text:
"""
Python scripts that, if they are compatible, eliminate and compact nodes and edges
"""

import logging

GRAPH_LOGGER = logging.getLogger(__name__)

def tuple_to_string(node):
    """Given a tuple of a node id and orientation
    :return tuple element concatenete by |:
    """
    node_id, node_orn = node
    return node_id+"|"+node_orn

def reverse_and_complement(string):
    """Given a genomic string
    :return the reverese&complement of the string: If is specify
    :return the same string: If is not specify (*)
    """
    reverse_dict = dict([('A', 'T'), ('T', 'A'), ('C', 'G'), ('G', 'C'), ('*', '*')])
    complement_string = ''.join([reverse_dict[c] for c in string])
    return complement_string[::-1]

def reverse_strand(strand):
    """Given a strand
    :return the opposite strand: if is specify
    :return None: if strand is not defined
    """
    dict_inverted = dict([('+', '-'), ('-', '+'), (None, None)])
    return dict_inverted[strand]

def update_graph(gfa_, keep_id, remove_id, new_seq, overlap, orn):
    """Given the id of the nodes in the edge to compact, the new sequence,
    orientation and overlap
    calcolate the new sequence lenght, the edges IN or OUT from the node
    to remove are updated with the node to keep and the node with
    remove_id is removed.
    """
    gfa_.nodes()[keep_id]['sequence'] = new_seq
    if not new_seq == '*':
        gfa_.nodes()[keep_id]['slen'] = len(gfa_.nodes(identifier = keep_id)['sequence'])
    else:
        if gfa_.nodes()[keep_id]['slen'] and gfa_.nodes()[remove_id]['slen']:
            gfa_.nodes()[keep_id]['slen'] += gfa_.nodes()[remove_id]['slen'] - overlap
        else:
            gfa_.nodes()[keep_id]['slen'] = None

        if 'fu' in gfa_.nodes()[remove_id]:
            remove_fu = gfa_.nodes()[remove_id].get('fu').lstrip('Z:')
        else:
            remove_fu = remove_id

        if 'fu' in gfa_.nodes()[keep_id]:
            gfa_.nodes()[keep_id]['fu'] += '_'+remove_fu
        else:
            gfa_.nodes()[keep_id]['fu'] = 'Z:'+keep_id+'_'+remove_fu

    #fix gfa_.node()[keep_id]['option']

    remove_edge_dict = dict()
    data_update_edges = gfa_.edges(adj_dict = True)[remove_id]
    for node in data_update_edges:
        for edge_id in data_update_edges[node]:
            if data_update_edges[node][edge_id]['from_node'] == remove_id:
                parse_from_node = keep_id
                parse_from_orn = data_update_edges[node][edge_id]['from_orn']
                if not parse_from_orn:
                    parse_to_node = data_update_edges[node][edge_id]['to_node']
                    parse_to_orn = data_update_edges[node][edge_id]['to_orn']
                    parse_from_positions = data_update_edges[node][edge_id]['from_positions']
                    parse_to_positions = data_update_edges[node][edge_id]['to_positions']
                    keep_slen = int(gfa_.nodes()[keep_id]['slen'])
                    remove_slen = int(gfa_.nodes()[remove_id]['slen'])
                    if orn == '-+':
                        parse_to_orn = reverse_strand(parse_to_orn)
                        parse_from_positions = (str(remove_slen-int(parse_from_positions[1])), \
                            str(remove_slen-int(parse_from_positions[0])))
                    elif orn == '+-':
                        parse_to_orn = reverse_strand(parse_to_orn)
                        parse_from_positions = (str(keep_slen-int(parse_from_positions[1])), \
                            str(keep_slen-int(parse_from_positions[0])))
                    elif orn == '++':
                        parse_from_positions = (str(keep_slen-remove_slen+ \
                        	int(parse_from_positions[0])), \
                            str(keep_slen-remove_slen+int(parse_from_positions[1])))
                else:
                    if orn == '-+' or orn == '+-':
                        parse_from_orn = reverse_strand(parse_from_orn)
                    parse_to_node = data_update_edges[node][edge_id]['to_node']
                    parse_to_orn = data_update_edges[node][edge_id]['to_orn']
            else:
                parse_to_node = keep_id
                parse_to_orn = data_update_edges[node][edge_id]['to_orn']
                if orn == '-+' or orn == '+-':
                    parse_to_orn = reverse_strand(parse_to_orn)
                parse_from_node = data_update_edges[node][edge_id]['from_node']
                parse_from_orn = data_update_edges[node][edge_id]['from_orn']
            parse_overlap = data_update_edges[node][edge_id]['alignment']

            if parse_from_orn:
                parse_new_edge = 'L\t'+parse_from_node+'\t'+parse_from_orn+'\t'+ \
                    parse_to_node+'\t'+parse_to_orn+'\t'+parse_overlap
            else:
                parse_new_edge = 'F\t'+parse_from_node+'\t'+parse_to_node+parse_to_orn+'\t'+ \
                    parse_from_positions[0]+'\t'+parse_from_positions[1]+'\t'+ \
                    parse_to_positions[0]+'\t'+parse_to_positions[1]+'\t'+parse_overlap[0]

            gfa_.add_edge(parse_new_edge)
            remove_edge_dict[edge_id] = True

    for remove_edge_id in remove_edge_dict:
        gfa_.remove_edge(remove_edge_id)
    gfa_.remove_node(remove_id)

def compact_sequence(gfa_, from_node, to_node):
    """Given the id and orientation of the nodes in the edge to compact
    get the sequence and CIGAR information and
    make the new sequence string.
    :return the new string sequence, the aligment/overlap, and orientation.
    """
    from_id, from_orn = from_node
    to_id, to_orn = to_node

    edges = gfa_._search_edge_by_nodes((from_id, to_id))
    edge = None
    for edge in edges:
        overlap = int(edges[edge]['alignment'].rstrip('M'))
    gfa_.remove_edge(edge)

    from_seq = gfa_.nodes(identifier = from_id)['sequence']
    to_seq = gfa_.nodes(identifier = to_id)['sequence']

    if from_orn == '-' and to_orn == '-':
        if from_seq == '*' or to_seq == '*':
            new_seq = '*'
        else:
            new_seq = to_seq+from_seq[overlap:]
        return new_seq, overlap, '--'
    elif from_orn == '+' and to_orn == '+':
        if from_seq == '*' or to_seq == '*':
            new_seq = '*'
        else:
            new_seq = from_seq+to_seq[overlap:]
        return new_seq, overlap, '++'
    elif from_orn == '-':
        if from_seq == '*' or to_seq == '*':
            new_seq = '*'
        else:
            new_seq = reverse_and_complement(to_seq)[:-overlap]+from_seq
        return new_seq, overlap, '-+'
    else:
        if from_seq == '*' or to_seq == '*':
            new_seq = '*'
        else:
            new_seq = from_seq+reverse_and_complement(to_seq)[overlap:]
        return new_seq, overlap, '+-'

def update_dictionaries_by_nodes(nodes, count_dictionaries, orn):
    """Given the nodes to compact and the dictionaries
    the edges and nodes are update or deleted in the dictionaries.
    """
    keep_node, remove_node = nodes
    keep_id, keep_orn = keep_node
    remove_id, remove_orn = remove_node
    from_dict, to_dict = count_dictionaries

    from_dict[keep_id][keep_orn] = []
    to_dict[remove_id][remove_orn] = []

    if from_dict.get(remove_id):
        for orientation in from_dict.get(remove_id):
            if from_dict.get(remove_id).get(orientation):
                links = from_dict.get(remove_id).get(orientation)
                from_dict[remove_id][orientation] = []
                if orn == '+-' or orn == '-+':
                    orientation = reverse_strand(orientation)
                if not from_dict.get(keep_id):
                    from_dict[keep_id] = {}
                if from_dict.get(keep_id).get(orientation):
                    for link in links:
                        from_dict[keep_id][orientation].append(link)
                else:
                    from_dict[keep_id][orientation] = links

    if to_dict.get(remove_id):
        for orientation in to_dict.get(remove_id):
            if to_dict.get(remove_id).get(orientation):
                links = to_dict.get(remove_id).get(orientation)
                to_dict[remove_id][orientation] = []
                if orn == '+-' or orn == '-+':
                    orientation = reverse_strand(orientation)
                if not to_dict.get(keep_id):
                    to_dict[keep_id] = {}
                if to_dict.get(keep_id).get(orientation):
                    for link in links:
                        to_dict[keep_id][orientation].append(link)
                else:
                    to_dict[keep_id][orientation] = links

def compression_graph_by_nodes(gfa_):
    """Create dictionaries with edges's id and with nodes involved.
    By the dictionaries determine what edge can be removed. The ends
    of segment(node) with only 1 edge IN or OUT are compatible with compression.
    Passing data to the other functions update the graph and the dictionaries.
    """
    eid_dict = dict()
    from_dict = dict()
    to_dict = dict()

    data_edges = gfa_.edges(adj_dict = True)
    for node1 in data_edges:
        for node2 in data_edges[node1]:
            for eid in data_edges[node1][node2]:
                if not eid_dict.get(eid):
                    eid_dict[eid] = True

                    from_id = data_edges[node1][node2][eid]['from_node']
                    from_orn = data_edges[node1][node2][eid]['from_orn']
                    to_id = data_edges[node1][node2][eid]['to_node']
                    to_orn = data_edges[node1][node2][eid]['to_orn']

                    if from_dict.get(from_id):
                        from_dict[from_id][from_orn].append(tuple_to_string((to_id, to_orn)))
                    else:
                        from_dict[from_id] = {}
                        from_dict[from_id][from_orn] = [tuple_to_string((to_id, to_orn))]
                        from_dict[from_id][reverse_strand(from_orn)] = []

                    if to_dict.get(to_id):
                        to_dict[to_id][to_orn].append(tuple_to_string((from_id, from_orn)))
                    else:
                        to_dict[to_id] = {}
                        to_dict[to_id][to_orn] = [tuple_to_string((from_id, from_orn))]
                        to_dict[to_id][reverse_strand(to_orn)] = []

    edge_no_text = 0
    count_edge_compacted = 0
    for from_id, orientation in from_dict.items():
        for from_orn in orientation:
            if len(orientation.get(from_orn)) == 1:
                to_node = orientation.get(from_orn)
                to_id, to_orn = to_node[0].split('|')
                if gfa_.nodes(identifier = from_id) and gfa_.nodes(identifier = to_id):
                    if len(to_dict[to_id][to_orn]) == 1:
                        if to_dict.get(from_id):
                            if to_dict.get(from_id).get(reverse_strand(from_orn)):
                                break
                        if from_dict.get(to_id):
                            if from_dict.get(to_id).get(reverse_strand(to_orn)):
                                break
                        from_node = (from_id, from_orn)
                        to_node = (to_id, to_orn)
                        new_seq, overlap, orn = compact_sequence(gfa_, from_node, to_node)
                        update_graph(gfa_, from_node[0], to_node[0], new_seq, overlap, orn)
                        update_dictionaries_by_nodes((from_node, to_node), \
                            (from_dict, to_dict), orn)
                        count_edge_compacted += 1
                else:
                    edge_no_text += 1

    GRAPH_LOGGER.debug('%s edges has been compacted of total amount of %s', \
    	count_edge_compacted, len(eid_dict)-edge_no_text)

    return count_edge_compacted

def update_dictionaries_by_edges(eid_dict, count_dictionaries, eid, orn):
    """Given the list with the index of edge to compact and orientation
    the edges and nodes are update or deleted in the list.
    """
    keep_node = (eid_dict[eid]['from_id'], eid_dict[eid]['from_orn'])
    keep_id, _ = keep_node
    remove_node = (eid_dict[eid]['to_id'], eid_dict[eid]['to_orn'])
    remove_id, _ = remove_node
    from_dict, to_dict = count_dictionaries

    eid_dict[eid] = False
    from_dict[tuple_to_string(keep_node)] -= 1
    to_dict[tuple_to_string(remove_node)] -= 1

    for edge in eid_dict:
        if eid_dict[edge]:
            from_node = (eid_dict[edge]['from_id'], eid_dict[edge]['from_orn'])
            to_node = (eid_dict[edge]['to_id'], eid_dict[edge]['to_orn'])

            if eid_dict[edge]['from_id'] == remove_id:
                from_dict[tuple_to_string(from_node)] -= 1
                eid_dict[edge]['from_id'] = keep_id
                if orn == '-+' or orn == '+-':
                    eid_dict[edge]['from_orn'] = reverse_strand(eid_dict[edge]['from_orn'])
                    if not eid_dict[edge]['from_orn']:
                        to_dict[tuple_to_string(to_node)] -= 1
                        eid_dict[edge]['to_orn'] = reverse_strand(eid_dict[edge]['to_orn'])
                        to_node = (eid_dict[edge]['to_id'], eid_dict[edge]['to_orn'])
                        if to_dict.get(tuple_to_string(to_node)):
                            to_dict[tuple_to_string(to_node)] += 1
                        else:
                            to_dict[tuple_to_string(to_node)] = 1
                from_node = (eid_dict[edge]['from_id'], eid_dict[edge]['from_orn'])
                if from_dict.get(tuple_to_string(from_node)):
                    from_dict[tuple_to_string(from_node)] += 1
                else:
                    from_dict[tuple_to_string(from_node)] = 1

            if eid_dict[edge]['to_id'] == remove_id:
                to_dict[tuple_to_string(to_node)] -= 1
                eid_dict[edge]['to_id'] = keep_id
                if orn == '-+' or orn == '+-':
                    eid_dict[edge]['to_orn'] = reverse_strand(eid_dict[edge]['to_orn'])
                to_node = (eid_dict[edge]['to_id'], eid_dict[edge]['to_orn'])
                if to_dict.get(tuple_to_string(to_node)):
                    to_dict[tuple_to_string(to_node)] += 1
                else:
                    to_dict[tuple_to_string(to_node)] = 1

def compression_graph_by_edges(gfa_):
    """Create dictionaries with edges's id and with nodes involved.
    By the dictionaries determine what edge can be removed. The ends
    of segment(node) with only 1 edge IN or OUT are compatible with compression.
    Passing data to the other functions update the graph and the dictionaries.
    """
    eid_dict = dict()
    from_dict = dict()
    to_dict = dict()

    data_edges = gfa_.edges(adj_dict = True)
    for node1 in data_edges:
        for node2 in data_edges[node1]:
            for eid in data_edges[node1][node2]:
                if not eid_dict.get(eid):
                    eid_dict[eid] = {}

                    from_node = (data_edges[node1][node2][eid]['from_node'],\
                        data_edges[node1][node2][eid]['from_orn'])
                    if from_dict.get(tuple_to_string(from_node)):
                        from_dict[tuple_to_string(from_node)] += 1
                    else:
                        from_dict[tuple_to_string(from_node)] = 1

                    to_node = (data_edges[node1][node2][eid]['to_node'],\
                        data_edges[node1][node2][eid]['to_orn'])
                    if to_dict.get(tuple_to_string(to_node)):
                        to_dict[tuple_to_string(to_node)] += 1
                    else:
                        to_dict[tuple_to_string(to_node)] = 1

                    eid_dict[eid]['from_id'] = from_node[0]
                    eid_dict[eid]['from_orn'] = from_node[1]
                    eid_dict[eid]['to_id'] = to_node[0]
                    eid_dict[eid]['to_orn'] = to_node[1]

    count_edge_compacted = 0
    edge_no_text = 0

    for eid in eid_dict:
        from_node = (eid_dict[eid]['from_id'], eid_dict[eid]['from_orn'])
        to_node = (eid_dict[eid]['to_id'], eid_dict[eid]['to_orn'])
        if gfa_.nodes(identifier = from_node[0]) and gfa_.nodes(identifier = to_node[0]):
            if from_node[1] and from_dict.get(tuple_to_string(from_node)) == 1 and \
                to_dict.get(tuple_to_string(to_node)) == 1:
                inverted_from = (from_node[0], reverse_strand(from_node[1]))
                inverted_to = (to_node[0], reverse_strand(to_node[1]))
                if (not to_dict.get(tuple_to_string(inverted_from))) and \
                    (not from_dict.get(tuple_to_string(inverted_to))):
                    new_seq, overlap, orn = compact_sequence(gfa_, from_node, to_node)
                    update_graph(gfa_, from_node[0], to_node[0], new_seq, overlap, orn)
                    update_dictionaries_by_edges(eid_dict, (from_dict, to_dict), eid, orn)
                    count_edge_compacted += 1
        else:
            edge_no_text += 1

    GRAPH_LOGGER.debug('%s edges has been compacted of total amount of %s', \
    	count_edge_compacted, len(eid_dict)-edge_no_text)

redpajama_set_name: RedPajamaGithub


text:
Q: how can I make this query show distinct model_nbr question about a join.
I have this query where I am joining stuff from three tables.
My question is when I got the result set
Model A comes up twice there I was only expecting one row with Model A.
I want to show model A with 18 beeps only. But also want to show Model B with the 0 beeps as well.
How can I do this?  Am I not doing the join correctly?..
query:
 SELECT DISTINCT
    TO_CHAR(C.KR_DATE,'YYYY/MM/DD') AS K_Date,
    A.OUT_FIELD1 AS MODEL_NBR,
    A.IN_FIELD1 AS LOCATIONS,
    sum(schemaJoe.FUNC_GET_LINE_TOUCHES(C.ORG, B.DELIV_ID, B.DELIV_DTL_NUM)) AS BEEPS
FROM
    schemaJoe.TABLE_A A, schemaJoe.TABLE_B B,  schemaJoe.TABLE_C C
    WHERE A.ORG = 'JOE'
    AND A.REF_TYPE = 'JOES_MODEL'
    AND A.ORG = B.ORG  (+)
    AND A.OUT_FIELD1 = B.PART_NBR (+)
    AND B.DELIVERY_ID = C.DELIVERY_ID (+)
    AND C.CALC_REQUEST_DATE (+)  BETWEEN TO_DATE('7/30/2016', 'MM/DD/YYYY') AND TO_DATE('8/30/2016', 'MM/DD/YYYY')
    AND B.LINE_STATUS (+) IN ( 'CREATED','OPEN','PROECSSING')
GROUP BY
    C.KR_DATE,
    A.OUT_FIELD1,
    A.IN_FIELD1,
    C.ORG,
    B.DELIVERY_ID,
    B.DELIV_LANE
ORDER BY
    K_Date ASC,BEEPS DESC,MODEL_NBR ASC,LOCATIONS ASC

Result:

redpajama_set_name: RedPajamaStackExchange


text:
Subscribe Now: You'll Save 70%
Paris accelerates global trend of restoring urban waterways to swimmable cleanliness
For years, Paris, France has been promising to open up its urban waterways for safe, clean public swimming.
This month, it's done exactly that, becoming the second world-class city to accomplish the feat. Copenhagen, Denmark was the first, opening its floating harbor baths in the early 2000s.
On July 17, 2017, Paris Mayor Anne Hidalgo opened-up new open-air swimming enclosure in the Bassin de la Villette. In temperatures of over 90 degrees Fahrenheit, Parisians lined up to splash about the three new pools fed directly from the canal's waters, separated from the watercourse's general flow only by filter meshes to keep leaves and other objects out.
Bassin de la Villette. Photo credit:
Emmanuel Legrand via Wikipedia.
The Bassin de la Villette is the largest artificial lake in Paris. The large rectangle was filled with water on December 2, 1808.
Located in the 19th arrondissement of the capital, it links the Canal de l'Ourcq to the Canal Saint-Martin, and it represents one of the elements of the Réseau des Canaux Parisiens (Parisian Canal Network), a public-works authority operated by the city that comprises approximately 130 kilometres (81 miles).
How did Paris accomplish this heroic cleanup? The city has actually been cleaning the waterways here for several decades. Paris's canals here were once among the world's most contaminated: not surprising, considering that they served former industrial areas, and received the city's sewage.
But since the 1980s, regulations managing industrial run-off have tightened substantially. Paris invested heavily in wastewater treatment, and in rectifying the combined sewage overflow problem (the result of a tragically-common, monumentally-dumb engineering design) that afflicts cities worldwide during times of heavy rainfall.
Two years ago, following a concerted clean-up, bacteria levels dropped below safe levels, and rogue bathers have been jumping in the water here for a while. Meanwhile, the Canal Saint Martin, which runs downstream from the basin down to the Seine, was entirely drained and cleaned in 2016, a process that sent a powerful visual message to Parisians that the area's historic filth was being swept away.
Paris has accomplished what many major cities around the world are trying to do…or are at least promising to do. They include Berlin, Germany, London, England, Melbourne, Queensland, Australia, Portland, Oregon, and New York City, New York.
In Boston, Massachusetts, the annual "City Splash" is one of the few days the state permits public swimming on the city's stretch of the 80-mile, notoriously filthy Charles River. The Charles is now one of the cleanest urban rivers in the U.S.
The event, now in its fifth year, spotlights the non-profit Charles River Conservancy's efforts to build a permanent feature on the river that would allow visitors to enjoy the water without coming in contact with any leftover contaminants. They call it a "swim park," which would include floating docks for swimmers to safely jump into the river without touching the hazardous bottom. The water quality would be regularly tested. Nearly 300 people signed up to take the plunge this year.
Featured photo credit: Le Parisien.
See article by Feargus O'Sullivan in CityLab.
See AP article by Philip Marcelo.
pages in Issue #56
See A Map Of Our 7000+ Articles!
Click the map above to see our Archive arranged geographically.
Once you're on the map page, scroll down to see the controls.
You can check & uncheck boxes to filter by type, such as Jobs.
Zoom the map to focus on your country, state, or city.
PUT A LINK ON YOUR WEBSITE TO HELP YOUR CITIZENS, STUDENTS, EMPLOYEES OR MEMBERS
REVITALIZATION inspires readers to improve our world.
And it provides the knowledge and connections needed to do so.
Current Issues are always FREE as a public service: Subscribing is unnecessary, except to access the 6500+ articles in Past Issues.
So, put a link to https://Revitalization.org on your website now.
© Copyright 2015-2019, Storm Cunningham. All rights reserved.
Welcome to Revitalization.
Please check your email for your log-in information.
If you don't receive "Welcome" email within 5 minutes,
please check your Spam/Junk folder.
SUBSCRIBE NOW TO ACCESS ARTICLES FROM PAST ISSUES.
SAVE 50% ON MONTHLY RATE!
Half-price when you subscribe for 1 year.
As a subscriber, you'll enjoy extra benefits:
1) No ads or popups;
2) Access to Archive of 7000+ articles in 110+ Past Issues;
3) Save 10% on training by Storm Cunningham at your event;
4) Satisfaction of supporting our regenerative work; and
5) Email notification of new issues (2X/month). And More!
(Already a subscriber? Log in Or, return to the Front Page)
"Everyone should subscribe to REVITALIZATION to be inspired by all the revitalization happening around the world! I look forward to every edition!"
– Sean DeWitt, Director, Global Restoration Initiative,
RENEW NOW TO ACCESS ARTICLES FROM PAST ISSUES.
Sorry! Your subscription has expired.
PLEASE RENEW YOUR SUBSCRIPTION.
As a subscriber, you enjoy extra benefits:
Or, return to the Current Issue.
SUBSCRIBE NOW TO READ THIS FULL PREVIEW OF STORM CUNNINGHAM'S UPCOMING 3rd BOOK, RECONOMICS
JOIN THE RESILIENCE TREND!
Subscribers also enjoy extra benefits:
3) Save 10% on a talk by Storm Cunningham at your event;

redpajama_set_name: RedPajamaCommonCrawl


text:
Into the Coven aims to highlight quality extreme metal bands who have a lot of crossover appeal with fans of the classic metal approach.
Into the Coven: Mystifier – The World Is So Good That Who Made It Doesn't Live Here Review
Evil comes in different shapes. In South America, the shape it assumed was mostly primitive, raw, and dirty until The World Is So Good That Who Made It Doesn't Live Here was released. Finding an early interest in extreme metal in 80s, many South American bands experimented with filthy sounds that had not been quite discovered before their time. A record store that was already active before this particular kind of extreme metal rose, Cogumelo Records, became the meeting spot for a lot of early Brazilian first wave black, death, and thrash metal bands. The best example of the thrashy, primitive, aggressive sound of the region from that era would be the cult album, I.N.R.I., by Sarcófago.
By Rhandgar, 4 years February 8, 2019 ago
Into the Coven: Malokarpatan – Nordkarpatenland Review
Eastern Europe, where some reserved folks live and mostly keep to themselves. Amongst those folks, Slovakians witnessed a lot of political volatility in the recent past which resulted in the separation of Czech Republic and Slovakia in early 90s. This civil unrest resulted in the rise of a small circle of black metal artists in the more recent past which formed the foundation of Malokarpatan along with other projects like Krolok, Temnohor, and Algor.
Into the Coven: Varathron – Patriarchs of Evil Review
The Greeks who would become the prominent members of what we call the Hellenic black metal scene experimented with different sounds before reaching their final shape. Some of them started their journey playing raw, aggressive grindcore and spent years chasing a contract for their debut. Others tried out the early death metal sound before taking part in one of the cornerstone splits of the country. Through experimentation and desire to find their unique approach to "evil metal", Greeks cultivated their own sound, which resulted in what could be considered the most important wave of Hellenic black metal releases around 1992.
By Rhandgar, 4 years January 25, 2019 ago
Into the Coven: Master's Hammer – Ritual Review
The story usually begins in late 80s or early 90s and in one of the many corners of the world. In this particular case it is 1987 and the Czech Republic (or Czechoslovakia, as it was back then). Master's Hammer was founded on the brink of the Velvet Revolution, which would come in two years later, in 1989, and would end the communist era of the country. With the heavy metal tapes of 80s like Motörhead, Venom, Slayer, Mercyful Fate, etc. and fanzines finding their way into the country; Czechoslovakian youth founded more and more amateur, underground bands to play their own music as loud as possible, and as the sound got more and more extreme all around the world, as hideous as possible.


My Cityscape Bracelet, Pod Ring and Destiny Brooch were chosen to be part of the Crafthaus New Directions: Powder Metallurgy (Metal Clay) in a Sheet Metal World exhibit.
New Directions: Powder Metallurgy (Metal Clay) in a Sheet Metal World Part 1 is the first of a multi-segmented exhibition celebrating the unique personality that metal clay brings in the form of jewelry, vessels, functional and decorative objects. New Directions: Powder Metallurgy (Metal Clay) in a Sheet Metal World Part 2 is on display on Crafthaus. A print exhibition of the entire Powder Metallurgy exhibition was on view at the Metal Clay World Conference to be held in Chicago July 14 -17, 2011.
The exhibition catalog titled, New Directions: Powder Metallurgy (Metal Clay) in a Sheet Metal World is available to order by clicking here. Below is a picture of me with my page from the catalog!


Frank Andreesen, Vice President Logistics - EMEA at Covestro, discussed platform revolution during his LogiChem 2017 presentation containing "food for thought" on how digitalization is offering an opportunity for superior matching of supply and demand, also in chemical transportation.
TankContainerFinder.com was listed as one of the emerging players in the UBERization of transport.
The presentation slides are available on SlideShare for those who missed the LogiChem 2017 conference.
Click here to watch the presentation slides on SlideShare.
Image credits: Platform Revolution by Geoffrey G. Parker, Marshall W. Van Alstyne & Sangeet Paul Choudary.
"An inside look at the revolutionary business power of the platform―from the experts who helped discover how it works."


text:
Politicsby Fern Shen9:31 amApr 23, 20210
"Doing this in the name of renters like myself and my family – that's despicable"
Advocates urge Mayor Brandon Scott to veto the Security Deposit Alternatives bill being promoted by City Council President Nick Mosby, saying it will hurt renters
Above: Detrese Dowridge, of Right to Housing Alliance, speaks against the Security Deposit Alternatives bill. (Fern Shen)
A coalition representing renters opposed to a City Council bill they say promotes a deceptive alternative for security deposits made a direct appeal to Mayor Brandon Scott to veto it.
Standing outside of City Hall, the speakers said the legislation will trick tenants into purchasing a surety bond product that could trap them into ever-deeper debt to an unaccountable company.
Terrell Askew urged Scott "to do the right thing" and "recognize that he comes from my same background."
"It sickens me," said Askew, an organizer with United Workers, part of the Baltimore Renters United coalition that organized yesterday's protest rally. "Doing this in the name of renters like myself, my family and my friends – that's despicable."
• On Scott's desk: A bill pitched as helping renters that renters' advocates denounce (11/15/21)
Detrice Dowridge, of Right to Housing Alliance, had a similar message, calling on the mayor to listen to those opposed to Council Bill 21-0022.
"This will not help tenants. It will only cause more distress for tenants," said Dowridge.
"I work with tenants who are already forced to live in unsafe conditions without remediation from slumlords. We are sick and tired of these slumlords who get away with everything, while tenants are suffering."
A crowd of about two dozen people carried signs that said, "Housing, Not Hedge Funds," and chanted, "Veto Rhino," referring to the New York company, backed by venture capital fund Kairos, that has been lobbying the measure in Baltimore and similar laws in other cities.
Housing advocate Tisha Guthrie speaks. Listening behind her is Caitlin Goldblatt, of the Greater Baltimore Chapter of the Democratic Socialists of America. (Fern Shen)
Nick Mosby Initiative
Scott has not said what he will do about the legislation, passed overwhelmingly by the Council on April 5.
If he does not sign or veto the measure by May 17, it goes into law without his signature.
The bill has turned into one of the highest profile battles in the first months of Scott's administration, featuring dueling op-eds, an unregistered Rhino lobbyist and renters' advocates accusing the Baltimore Sun of factually mischaracterizing the measure in a supportive editorial.
It has also showcased the political clout of the city's No. 2 elected official, Nick Mosby. Only two Council members, Zeke Cohen and Ryan Dorsey, voted against the measure even as a chorus of advocates denounced it.
Mosby, who became City Council President in December, has been pushing hard to promote the bill in interviews and on social media, together with the Council's vice president and bill sponsor, Sharon Green Middleton.
(Mosby and Middleton are listed, along with presumably supportive officials from other U.S. cities, on Rhino's renterschoice.org website, protest speaker Caitlin Goldblatt pointed out yesterday.)
The Baltimore Renters United Coalition in front of City Hall yesterday. (Fern Shen)
Under the bill, landlords with 10 or more units who charge a security deposit of more than 60% of a month's rent would have to include in the lease one of two options in lieu of the required security deposit.
One of those options, the chance to pay off the security deposit in monthly installments, has broad support from the advocacy groups.
The controversy centers on the other option – "rental security insurance," which is actually not insurance but a surety bond. Critics say landlords will most likely offer tenants only this choice because the private companies will pay them right away for any future claims of damages against the tenants.
Advocates point to horror stories reported to the Better Business Bureau of renters using Rhino who said they were hit with erroneous charges, but were unable to get through to the company to stop them from piling up.
In contrast to a traditional lump-sum security deposit, tenants who purchase a surety bond lose their ability to dispute landlords' claims in court and typically have to resolve the disputes through arbitration.
Vulnerable Renters
Calling the bill a needed source of relief for city renters in the midst of the Covid pandemic, Mosby has said being able to make payments of as little as $5 per month would help cash-strapped residents get housing. (The payments are typically non-refundable.)
He says he's found little evidence of problems with the surety bond companies.
If anything, he claims, the renter is more protected with a surety bond because "the onus is now placed on the landlord through the insurance commission, a regulatory body of the state."
Taking issue with that argument yesterday, Marceline White, of the Maryland Consumer Rights Coalition, said that in disputes that come before the state, "the landlord wins 98% of the time."
"The City Council President has talked about how there are consumer protections. . . Has he ever said what those protections are?" – Marceline White.
"The City Council President has talked about how there are consumer protections in the Maryland Insurance Administration that will protect tenants," White said. "Has he ever said what those protections are?"
"No," the crowd replied.
"Has he ever cited a law?"
"Has he said anything about what those protections are, besides there are protections?"
"Because they are very slight protections," White said, concluding the call and response.
Another point she made is that the surety bond companies price their product higher for those who have poor credit ratings, "using algorithms biased against renters of color."
"That's not justice," she said. "That's not housing rights. That's not equity."
PoliticsNov 18, 2021
Marilyn Mosby is holding a fundraiser this evening while her fate is up in the air
"Hope all my peeps can make it," Mosby writes as the race for her seat heats up and a separate online fund raises money for her and her City Council president husband's legal defense in federal probe.
PoliticsMay 20, 2021
Votes to override Scott's veto of security deposit bill disappear
Enough Council members have changed position on the measure that, unless Mosby flips some back, a vote to overturn the mayor's veto would fail.


text:
Q: How do I hide an element on a click event anywhere outside of the element? I would like to know whether this is the correct way of hiding visible elements when clicked anywhere on the page.
$(document).click(function (event) {
    $('#myDIV:visible').hide();
});

The element (div, span, etc.) shouldn't disappear when a click event occurs within the boundaries of the element.

A: Thanks, Thomas. I'm new to JS and I've been looking crazy for a solution to my problem. Yours helped.
I've used jquery to make a Login-box that slides down. For best user experience I desided to make the box disappear when user clicks somewhere but the box. I'm a little bit embarrassed over using about four hours fixing this. But hey, I'm new to JS.
Maybe my code can help someone out:

<button class="login">Logg inn</button>

Lots of login content

A: I did the below. Thought of sharing so someone else could also benefit.
$("div#newButtonDiv").click(function(){
    $(this).find("ul.sub-menu").css({"display":"block"});

    $(this).click(function(event){
        event.stopPropagation();
        $("html").click(function(){
            $(this).find("ul.sub-menu").css({"display":"none"});
        }
    });
});

Let me know if I can help someone on this.

A: What you can also do is:
$(document).click(function (e)
{

  var container = $("div");

   if (!container.is(e.target) && container.has(e.target).length === 0)
  {
 container.fadeOut('slow');

   }

});

If your target is not a div then hide the div by checking its length is equal to zero.

A:   $(document).on('click', function(e) { // Hides the div by clicking any where in the screen
        if ( $(e.target).closest('#suggest_input').length ) {
            $(".suggest_div").show();
        }else if ( ! $(e.target).closest('.suggest_container').length ) {
            $('.suggest_div').hide();
        }
    });

Here #suggest_input in is the name of textbox and .suggest_container is the ul class name and .suggest_div is the main div element for my auto-suggest.
this code is for hiding the div elements by clicking any where in the screen.
Before doing every thing please understand the code and copy it...

A: Try this:
 $(document).mouseup(function (e) {
    var div = $("#yourdivid");
    if (!div.is(e.target) && div.has(e.target).length === 0)
    {
       div.hide();
     }
    });

A: Another way of hiding the container div when a click happens in a not children element;
$(document).on('click', function(e) {
    if(!$.contains($('.yourContainer').get(0), e.target)) {
        $('.yourContainer').hide();
    }
});

A: Try this
 $('.myDiv').click(function(e) { //button click class name is myDiv
  e.stopPropagation();
 })

 $(function(){
  $(document).click(function(){
  $('.myDiv').hide(); //hide the button

  });
});

I use class name instead of ID, because in asp.net you have to worry about the extra stuff .net attaches to the id
EDIT-
Since you added a another piece, it would work like this:
 $('.myDiv').click(function() { //button click class name is myDiv
  e.stopPropagation();
 })

 $(function(){
  $('.openDiv').click(function() {
  $('.myDiv').show();

  });
  $(document).click(function(){
  $('.myDiv').hide(); //hide the button

  });
});

A: As of jQuery 1.7 there's a new way to handle events. I thought I'd answer here just to demonstrate how I might go about doing this the "new" way. If you haven't, I recommend you read the jQuery docs for the "on" method.
var handler = function(event){
  // if the target is a descendent of container do nothing
  if($(event.target).is(".container, .container *")) return;

  // remove event handler from document
  $(document).off("click", handler);

  // dostuff
}

$(document).on("click", handler);

Here we're abusing jQuery's selectors and bubbling of events. Note that I make sure I clean the event handler up afterwards. You can automate this behaviour with $('.container').one (see: docs) but because we need to do conditionals within the handler that isn't applicable here.

A: If I understand, you want to hide a div when you click anywhere but the div, and if you do click while over the div, then it should NOT close. You can do that with this code:
$(document).click(function() {
    alert("me");
});
$(".myDiv").click(function(e) {
    e.stopPropagation(); // This is the preferred method.
    return false;        // This should not be used unless you do not want
                         // any click events registering inside the div
});

This binds the click to the entire page, but if you click on the div in question, it will cancel the click event.

A: Try this, it's  working perfect for me.
$(document).mouseup(function (e)
{
    var searchcontainer = $("#search_container");

    if (!searchcontainer.is(e.target) // if the target of the click isn't the container...
        && searchcontainer.has(e.target).length === 0) // ... nor a descendant of the container
    {
        searchcontainer.hide();
    }
});

A: $('html').click(function() {
//Hide the menus if it is visible
});

$('#menu_container').click(function(event){
    event.stopPropagation();
});

but you need to keep in mind these things as well. http://css-tricks.com/dangers-stopping-event-propagation/

A: Here is a working CSS/small JS  solution based on the answer of Sandeep Pal:
$(document).click(function (e)
{
  if (!$("#noticeMenu").is(e.target) && $("#noticeMenu").has(e.target).length == 0)
  {
   $("#menu-toggle3").prop('checked', false);
  }
});

Try it out by clicking the checkbox and then outside of the menu:
https://jsfiddle.net/qo90txr8/

A: This following code example seems to work best for me.  While you can use 'return false' that stops all handling of that event for the div or any of it's children.  If you want to have controls on the pop-up div (a pop-up login form for example) you need to use event.stopPropogation().

    <title></title>

    show box

a paragraph of text

        <input type="file"  />

A: This doesn't work - it hides the .myDIV when you click inside of it.
$('.openDiv').click(function(e) {
$('.myDiv').show();
e.stopPropagation();
})

$(document).click(function(){
$('.myDiv').hide();

});

});

DISPLAY DIV

HIDE DIV

A: Just 2 small improvements to the above suggestions:

*

*unbind the document.click when done

*stop propagation on the event that triggered this, assuming its a click
jQuery(thelink).click(function(e){
    jQuery(thepop).show();

    // bind the hide controls
    var jpop=jQuery(thepop);
    jQuery(document).bind("click.hidethepop", function() {
            jpop.hide();
            // unbind the hide controls
            jQuery(document).unbind("click.hidethepop");
    });
    // dont close thepop when you click on thepop
    jQuery(thepop).click(function(e) {
        e.stopPropagation();
    });
    // and dont close thepop now
    e.stopPropagation();
});

A:

$(document).ready(function(){

$("button").click(function(){

        $(".div3").toggle(1000);
    });
   $("body").click(function(event) {
   if($(event.target).attr('class') != '1' && $(event.target).attr('class') != 'div3'){
       $(".div3").hide(1000);}
    });

});

<button class="1">Click to fade in boxes</button>

A: $( "element" ).focusout(function() {
    //your code on element
})

A: This is made from the other solutions above.
$(document).ready(function(){

    $("button").click(function(event){
        $(".area").toggle();
        event.stopPropagation();    //stops the click event to go "throu" the button an hit the document
    });

    $(document).click(function() {
        $(".area").hide();
    });

    $(".interface").click(function(event) {
        event.stopPropagation();
        return false;
    });
});

        <button> Press here for content</button>

 Content

A: $(document).click(function() {
  var container = $("#container");
  if (!container.is(event.target) &&
    !container.has(event.target).length) {
    container.hide();
  }
});

A: $(document).mouseup(function (e)
{
    var mydiv = $('div#mydiv');
    if (!mydiv.is(e.target) && mydiv.has(e.target).length === 0){
       search.slideUp();
    }
});

A: Simple Solution: hide an element on a click event anywhere outside of some specific element.
$(document).on('click', function () {
                $('.element').hide();
            });
            //element will not Hide on click some specific control inside document
            $('.control-1').on('click', function (e) {
                e.stopPropagation();
            });


text:
Federal Disability Programs:
Coordination Could Facilitate Better Data Collection to Assess the Status of People with Disabilities
GAO-08-872T: Published: Jun 4, 2008. Publicly Released: Jun 4, 2008.
Daniel Bertoni
Multiple federal programs provide services and support to the approximately 50 million individuals with disabilities in America. While some health and economic data on people with disabilities are currently available, these data have limited use in providing a comprehensive assessment of how these individuals are faring. Additionally, the lack of more useful data limits the federal government's ability to determine how well federal programs are serving individuals with disabilities. GAO is providing information on (1) the limitations of data currently available to assess the status of individuals with disabilities and (2) how better coordination could help facilitate the collection of such data to inform policy decisions. This statement is based on prior GAO reports, including the May 2008 report on modernizing federal disability programs (GAO-08-635), the 2007 Comptroller General's forum on disability (GAO-07-934SP), and multiple reports on national indicators (e.g. GAO-05-1); and studies by other organizations, including the National Council on Disability.
Disability policy and programs in the United States have been developed on an individual basis over many years, with success being measured by individual program outcomes rather than with a unified set of national goals and indicators to assess how people with disabilities are faring. In 2005, GAO identified over 20 federal agencies and almost 200 federal programs serving individuals with disabilities that provided a wide range of assistance, such as employment-related services, medical care, and monetary support. These programs often have different missions, goals, funding streams, eligibility criteria, and policies that sometimes work at cross-purposes with other federal programs. In addition, these programs collect data to measure specific programmatic goals but not to provide a set of metrics to assess how federal programs are improving the lives of individuals with disabilities. Although other data on individuals with disabilities are collected on a national level, these data do not share consistent definitions of disability. As a result, these data cannot be easily compiled to create a comprehensive picture of the status of individuals with disabilities, which could better inform federal disability policy and help ensure that beneficiaries are given timely and appropriate supports. GAO and others have acknowledged the need for creating a common set of outcomes for disability programs and the appropriate measures for assessing progress toward shared goals. To facilitate an effort of reaching consensus on desired outcomes for people with disabilities, coordination among the key players in the disability community is required. In May 2008, to better serve people with disabilities, GAO suggested that Congress consider authorizing a coordinating entity consisting of leadership from appropriate agencies that serve this population to develop a cost-effective strategy to integrate services and supports for individuals with disabilities. Consistent with its proposed charter, such an entity should play a critical role in developing agreed-upon, desired outcomes for disability policies and programs and in determining what metrics and data will be used to assess progress toward meeting those outcomes.
Find Recent Work on Worker and Family Assistance »
Fair Labor Standards Act:
Tracking Additional Complaint Data Could Improve DOL's Enforcement
GAO-21-13: Published: Dec 9, 2020. Publicly Released: Jan 8, 2021.
Amateur Athletes:
The U.S. Center for SafeSport's Response and Resolution Process for Reporting Abuse
Military Child Care:
Off-Base Financial Assistance and Wait Lists for On-Base Care
Drug Misuse:
Agencies Have Not Fully Identified How Grants That Can Support Drug Prevention Education Programs Contribute to National Goals
Federal Social Safety Net Programs:
Millions of Full-Time Workers Rely on Federal Health Care and Food Assistance Programs
Child Care Facilities:
Federal Agencies Need to Enhance Monitoring and Collaboration to Help Assure Drinking Water is Safe from Lead
Federal Employees' Compensation Act:
Comparisons of Benefits in Retirement and Actions Needed to Help Injured Workers Choose Best Option
Information on Wait Times, Bankruptcies, and Deaths among Applicants Who Appealed Benefit Denials
GAO-20-641R: Published: Aug 13, 2020. Publicly Released: Aug 13, 2020.
Child Welfare and Aging Programs:
HHS Could Enhance Support for Grandparents and Other Relative Caregivers
Economic Adjustment Assistance:
Actions Needed to Better Address Workers' Needs and Assess Program Effectiveness
GAO-20-521: Published: Jul 29, 2020. Publicly Released: Jul 29, 2020.
Explore our Key Issues on Worker and Family Assistance
Children's Health and Safety
Employment in a Changing Economy
Improving and Modernizing Federal Disability Programs - High Risk Issue


We all dream about seeing our blog posts grow like wildfire and hit a million views within hours. You're used to writing good articles with grabby headlines, adding images that pop, and hoping that this will grab people's attention.
However, creating content that users feel compelled to share is more complicated (and a lot more interesting). BuzzSumo, a software that specializes in analyzing content, just published amazing data regarding which content is the most shared across web, what motivates people, and what steps marketers can take to spark content virality.
You may have read other articles that try to explain the process, but this infographic has been backed up by pure data. Take a look!


We strive to provide the highest quality dental care in a comfortable & relaxing atmosphere.
For your convenience we provide extended hours.
We accept dental insurance programs, and can provide flexible payment terms.
We are located at 947 O'Connor Drive (St Clair & O'Connor). Easy to get to, with free parking, and TTC right to our door!


An SDL codebase is given with this tutorial, called QuickCG. All the C++ code in the articles uses QuickCG and its functions to draw graphics on the screen.
This page will explain how to use QuickCG to get the examples working. Information is provided to get SDL and QuickCG working in the DevC++ IDE, as well as how to do ith with g++.
Then a few examples of scripts for QuickCG follow.
And finally, tables are given with all the QuickCG functions, some C++ functions and operators, QuickCG and SDL datatypes, and all the SDL names for keyboard keys.
SDL is an API that can handle graphics, audio, keyboard, mouse and joystick input on many platforms, including Windows and Linux. SDL can also be used to initialize and use OpenGL for 3D graphics. The codebase of this tutorial uses SDL for it's graphics and input, but the rest of the focus of this tutorial is on the graphics algorithms, and not SDL. In this tutorial SDL's functions are rarely used directly (but through QuickCG instead), though it's always handy to learn a thing or two about SDL if you'd like to make some games with it.
QuickCG was designed specifically for this tutorial, to be as easy to use and as universal as possible and to feel a bit like a scripting language. QuickCG includes functions to set up the screen, draw pixels and 2D primitives on it, handle input, do color model conversions, print texts and numbers on the screen using a built in font, load pictures, etc... QuickCG is less useful for making actual games because it's not really optimized.
A full list of all functions it contains is further on this page.
This section is for if you want to use DevC++ in Windows to run the examples.
DevC++ is a free IDE for Windows, that uses the compiler gcc 3.2 or later. For help on using DevC++, I suggest you check out the help files, try to open and compile some of the included examples, check out the bloodshed.net website, or just read on here.
This chapter is only for Windows users who want to be able to compile QuickCG and the examples with the free DevC++ IDE. It's also perfectly possible to use SDL and QuickCG on other platforms, but for now that's not explained here. If you don't know how, use the SDL site or google to find out how to install it with your compiler, and then make a new project in your compiler and add the .cpp and .h files of QuickCG to it.
If you don't have the newest version of DevC++ installed yet, follow these steps to get it up and running with SDL. If you have it installed, but not yet the SDL developer libraries, start at step 2).
2) download the latest version of SDL from http://www.libsdl.org/: download the Development Libraries for Mingw32 (under Windows) and the runtime libraries for Windows. You may need WinRAR to be able to unpack the .tar.gz files.
3) The runtime library contains the file SDL.DLL, put it either in your C:\Windows\System32 folder, or put one in the folder of your compiled program, and don't forget that you always have to include SDL.DLL with your program if you want other people who don't have the file to run it. Programs compiled for the newest version of SDL won't work with older versions of the DLL.
4) Unpack the SDL developer files, but not yet inside the DevC++ folder, put them in another folder.
6) Copy the files in the lib folder of the development files, into the lib folder of DevC++.
Now you have installed DevC++ with SDL! You still need to know how to make a working project that uses SDL though. The other files in the development package include the full SDL documentation, example and tests, and the binaries. Your DevC++ folder structure should now look like this, where the SDL folder is new, and the lib folder contains new files from the SDL development package.
If you use the SDL codebase (QuickCG) provided with the tutorial, unzip it to your code folder (that folder where you store all your DevC++ projects and code in, which is hopefully not in the unreliable My Documents folder of Windows), and just open it's *.dev file with Dev-C++, and it should compile and run correctly. To compile it, use "Execute -> Compile" from the menu. The exe file will appear in the same folder as where your code is located. You can run it with "Execute -> Run". You can also compile&run your projects by pressing F9. If it doesn't work, look a bit further for a list of possible solutions. It's highly recommended that you use QuickCG for this tutorial, because the rest of the tutorial focuses on the commands of it and not on the actual SDL itself.
7) Start up DevC++ and make a new project. Add any .cpp and .h files you need to it.
Note that the order IS important! If you put -lSDL first and then -lSDLmain it won't work!
10) Under Linker options, turn off the console.
Did you follow steps 1-6 or 1-11 correctly, in the correct order? Read every detail?
Did you #include the SDL.h header file in the code?
Are all the other SDL header files in the correct folder of DevC++?
Are the SDL library files (libSDL.a and libSDLmain.a) correctly in the lib folder of DevC++?
Did you put -lSDLmain and -lSDL in the correct order in the Linker parameters?
Are the options -lmingw32 -mwindows -lSDLmain -lSDL correctly in the linker parameters, and not wrongly in the compiler parameters?
Did you make a main function?
Try if the FAQ on the http://bloodshed.netorhttp://www.libsdl.org site answer your problem. There's info about DevC++ in the faq from libsdl.org. These sites also have search functions.
Try searching for some keywords from the compiler or linker error with google. You might find forum posts which describe your problem.
If you have a different version of DevC++ than version 5 Beta 8.10, things might be different (I encourage using the newest version, there may be more recent information available than this tutorial). Try to find the correct way to tell the linker to add the files libSDLmain.a and libSDL.a, and give the linker the options -lmingw32 and -mwindows, and the correct folders for include and library files.
If you're trying to get your own project to work, try if QuickCG that you can download with this tutorial works correctly (open it's *.dev file, compile and run it). If it does, but your own project doesn't, try giving your project the same settings as the project from QuickCG.
Once you got it to work, you can run example code of the tutorials by opening the quickcg.dev file with DevC++ and going to main.cpp file where you can enter the code. Here's a screenshot of the main.cpp file after opening it.
This section is for if you want to use g++ to run the examples.
The -O3 is optional if you want compiler optimization. The -lSDL lets it link to SDL. This requires you to have SDL installed on your distro (look for sdl and sdl-devel packages or similar).
main.cpp: in this file you can type the code of the examples of this tutorial. Leave the #includes at the top of the file intact to be able to run all examples.
QuickCG.dev: this is the project file for DevC++ that contains all necessary settings, if you don't use DevC++ you can remove this file and make your own project that uses the .cpp and .h files.
The main.cpp file file is where you can put the code of the examples of this tutorial. If no main function is mentioned in a code example, make one yourself and put the example inside the main function.
The screen function will create the graphical window, with a resolution of 256*256 pixels, windowed, and with the caption "Small Test Script". You always have to use the screen function at the start of any program, or you'd be drawing pixels on a non existing window.
Next comes a double for loop, which goes through every pixel of the window: w and h are global variables that contain the width and the height of the window.
Inside the for loops is the function pset. This function will plot a pixel at location x, y with RGB color x, y, 128. This means the red color component will depend on the location x of the pixel, the green color component will vary with the location y of the pixel, and blue component will always be 128.
After the loop comes the function redraw. You always have to use this function before you'll be able to see any new pixels you've drawn. The redraw function is relatively slow, so do NOT call it after every single pixel, but only once after all pixels of the screen have been drawn.
Finally, the sleep function will let the program pause until you press any key. If the sleep function wouldn't be there, the program would close immediately and you wouldn't be able to see the result.
The drawDisk command will draw a filled circle at the given position, with a certain radius and RGB color. The disk function is called 3 times: to draw a face, and two eyes.
The drawDine command will draw a line.
The redraw() and sleep() commands are again needed so that the new pixels will show up, and so that the program won't close immediately.
A full list of all commands is below, and the next chapter is full of easy examples of all functions to learn working with QuickCG.


text:
Production of Aliko Dangote's Assembly Plant Has Begun.
Posted on: December 20, 2021, 10:38:24 PM
Several years ago, Aliko Dangote, Africa's richest man, wanted to expand his business by adding a vehicle assembly facility since it would have a beneficial influence on Nigeria's economic growth and development and diminish the people's dependency on foreign products and services.
A controlling share in Peugeot Automobiles in Nigeria was sought for in a joint effort with the states of Kaduna and Kebbi and the Bank of Industry (BOI) (PAN). Asset Management Corporation of Nigeria (AMCON) had previously taken the firm into receivership and was looking for investors to buy off some of the company's assets following a series of difficulties. Local core investors could not keep the firm solvent when the federal government sold up its majority position in 2006.
By the end of 2012, AMCON had a majority share in the firm and had assumed all of the company's debt. Even AMCON, on the other hand, found it difficult to keep it afloat. Everybody sighed with pleasure when Dangote bid to buy PAN for 52 million euros (approximately N21 billion), signaling that the firm needed a fresh lease on life.
In the end, the idea was doomed from the start. Since he realized that investing in PAN would have been an enormous burden, Dangote promptly changed his mind. A year later, he negotiated a joint venture deal with Peugeot of France, a French automaker (PSA Groupe). A new firm, Dangote Peugeot Automobiles Nigeria Limited (DPAN), has started up recently.
DPAN just issued its first set of completed saloon vehicles, located around 25 kilometers from the current location of the defunct PAN Limited assembly facility in Kaduna State. This set, however, is not for sale, according to a person who is familiar with the matter. In the first quarter of 2022, the business tycoon intends to put the units on the market.
The Big Brother Naija 7 auditions have begun.
Started by EverestBoard Movie/Shows
Health Benefits of Garden Egg Plant you should know
Started by EverestBoard Health
The battle for 4.4 billion 5G subscribers has begun in Nigeria.
How to start a T-shirt production business - procedures
Started by AsphaltBoard Business Guide


How do I check my gift card or PowerUp Rewards™ card balance?
That's easy! To check the balance on a gift card or trade credit card, you will need the card number as well as the PIN. Both numbers are located on the back of your gift card or PowerUp Rewards™ Card. Enter your card number and PIN on the Balance Inquiry page to check your available balance.
What can I use my gift card on?
There are a ton of things to use them for! Gift cards, digital gift certificates, trade credit and PowerUp Rewards™ cards containing store credit can be used to purchase all sorts of products at US GameStop stores and on GameStop.com.
How do I get a replacement gift card?
A gift card is like cash. If lost or stolen, it cannot be replaced without the original sales receipt or a receipt from a transaction the card was used on. These receipts will have the card's account number and the amount on the card.
For online transactions you can use a printout of the order confirmation that the card was used on.
In either case, a store associate will contact our Document Control Department with that information so the amount can be transferred to a new card.
Do gift cards ever expire?
Nope. There is no expiration date for our gift cards. They will be valid until the end of time or until money becomes obsolete - whichever happens first.
Remember how we said they were "like" cash? Well, unfortunately, GameStop gift cards, trade cards, and PowerUp Rewards™ cards cannot be refunded or redeemed for cash (as stated on the back of the card).
How do I get a GameStop Gift Card?
The best way is to ask Santa. He loves to give GameStop gift cards! But you can also get them from US GameStop stores and GameStop.com.
Physical gift cards are sold on GameStop.com, and in US GameStop stores. If ordered from GameStop.com, physical gift cards are delivered via First Class U.S. Mail within one to two weeks and can include an optional gift message.
Digital gift certificates are sold on GameStop.com and can be redeemed online at GameStop.com or redeemed in US GameStop stores. Digital gift certificates are delivered via email within 48 hours of processing (excluding major holidays), and can also include a gift message.
How do I redeem my store credit online?
That's easy, too! Just enter the card or account number and PIN on the payment page during the checkout process. To use your gift card, trade credit, or PowerUp Rewards™ card online, it must have a scratch-off PIN. This PIN is located on the back of eligible gift cards. If your gift card does not have a four-digit PIN along with the 19-digit Gift Card number, you can only use the gift card at a GameStop store. The digital gift certificate number and PIN can be found in the email sent to the recipient.
Choose a physical or digital Gift Card, then select the desired amount and quantity. You will be asked for shipping information or an e-mail address later in the process. Total of order may not exceed $500.
Note: each order will go to one recipient, so simply click "Add another Gift Card" to create multiple orders. Click on "Add to Cart" when you complete your selections.


These porcelain tiles have a grey colour and concrete style which has been emphasised by a highly polished finish. These versatile porcelain tiles work superbly as part of a range of interior layouts, adding style to bathrooms, kitchens and living room areas.
You can provide walls with a stunning feature by choosing these concrete grey porcelain tiles. They are a superb option if you are looking to produce a genuine wow factor. They have a unique pattern which can transform the style of interior decors.
These durable porcelain tiles provide floor areas with a hardwearing surface. These tiles are a highly practical option. Not only are they suitable for high traffic areas but if you would like a warm covering under foot then you can use electric underfloor mats with these tiles.


text:
Light in Winter
Events by date Next 7 days This Month Next Month Events by type Member Events Families & Kids Adult Workshops Special Events Tours All Event Types Calendar view
‹Previous month
›Next month
Fight for Sunlight Exhibit
Daily during Garden hours
Learn about the history of the Garden's conservatory complex and why changing neighborhood zoning would be catastrophic. Learn More about Fight for Sunlight Exhibit ›
Visions of Nature 2019
Through Sunday, February 2
This exhibit features the work of over 50 talented artists who have participated as students and teachers in the Garden's Continuing Education art classes. Learn More about Visions of Nature 2019 ›
Heritage Trees of BBG Imbolc Walk
Saturday, February 1, 2020 | 11 a.m.–12 p.m.
Imbolc falls midway between the winter solstice and vernal equinox. On this walk we'll celebrate the return of light and see signs of rebirth along the bare boughs of BBG's oldest trees. Learn More about Heritage Trees of BBG Imbolc Walk ›
Conservatory Seasonal Highlights Tour
Saturday, February 1, 2020 | 1 p.m.–2 p.m.
Tour the exotic flora of tropical, desert, and Mediterranean climates without leaving Brooklyn. Learn More about Conservatory Seasonal Highlights Tour ›
Workshops | Wellness Sundays
Winter Wellness Sundays: Healing for the Body & Mind
Sunday, February 2, 2020 | 9 a.m.–10:45 a.m.	| Ticketed Event
Warm up with the Garden's Winter Wellness Sundays series. Learn More about Winter Wellness Sundays: Healing for the Body & Mind ›
Chase Away the Winter Blues Outdoor Tour
Sunday, February 2, 2020 | 12 p.m.–1 p.m.
Join licensed psychotherapist and veteran BBG guide Lynne Spevack for this narrated walk designed to relieve the winter doldrums. Learn More about Chase Away the Winter Blues Outdoor Tour ›
Sunday, February 2, 2020 | 1 p.m.–2 p.m.
Soil Science 101
Wednesday, February 5, 2020 | 6 p.m.–9 p.m.	| Preregistration Required
Learn the basic components of soil (living and inert) and discuss how to support soil's natural processes to grow healthy plants. Learn More about Soil Science 101 ›
Friday, February 7, 2020 | 1 p.m.–2 p.m.
Growing in Winter: Self-Care with Alexander Technique
Saturday, February 8, 2020 | 10 a.m.–1 p.m.	| Preregistration Required
This workshop applies principles of the Alexander Technique to improve posture, reduce stress and pain, and care for our bodies as much as we care for our plants. Learn More about Growing in Winter: Self-Care with Alexander Technique ›
Natural Perfume Blending
Saturday, February 8, 2020 | 1 p.m.–4:30 p.m.	| Preregistration Required
Examine the art of natural perfumery, explore perfume ingredients and formulation, and leave with two bottles of your own bespoke perfume. Learn More about Natural Perfume Blending ›
Nature Walks with Bradley Klein: Winter Nature Walk III
Sunday, February 9, 2020 | 11 a.m.–12 p.m.
The Garden may seem to sleep during the short days of midwinter, but there are clues to the survival strategies of both plants and animals if you know where to look for them. Learn More about Nature Walks with Bradley Klein: Winter Nature Walk III ›
Grow and Eat Microgreens Year-Round
Thursday, February 13, 2020 | 6 p.m.–8 p.m.	| Preregistration Required
Learn how to grow these delicious greens, discover beautiful ways to use them, and create a microgreen garden to take home. Learn More about Grow and Eat Microgreens Year-Round ›
Seasonal Skies: Winter Stars and Star Clusters
As the night sky changes with the seasons, a recurring treasure trove of celestial sights awaits our gaze. Learn to identify the bright stars and constellations of Brooklyn's winter sky, and view stars, star clusters, and nebulae through a telescope. Learn More about Seasonal Skies: Winter Stars and Star Clusters ›
Friday, February 14, 2020 | 1 p.m.–2 p.m.
Saturday, February 15, 2020 | 1 p.m.–2 p.m.
Sunday, February 16, 2020 | 9 a.m.–10:45 a.m.	| Ticketed Event
Sunday, February 16, 2020 | 1 p.m.–2 p.m.
February Break Discovery Days
Monday, February 17, 2020 | 10:30 a.m.–12:30 p.m.
Explore habitats from around the world and have some hands-on science fun during the midwinter school break. Learn More about February Break Discovery Days ›
Tuesday, February 18, 2020 | 10:30 a.m.–12:30 p.m.
Wednesday, February 19, 2020 | 10:30 a.m.–12:30 p.m.
Thursday, February 20, 2020 | 10:30 a.m.–12:30 p.m.
Grow Mushrooms Indoors
Saturday, February 22, 2020 | 12 p.m.–3 p.m.	| Preregistration Required
Learn simple and affordable techniques to grow mushrooms for food, medicine, and fun. Learn More about Grow Mushrooms Indoors ›
Naked Trees Tour
Saturday, February 29, 2020 | 11 a.m.–12 p.m.
We'll look at the shape and architecture of BBG's trees, including some not-so-naked specimens. Learn More about Naked Trees Tour ›
Support the Garden and enjoy unlimited free admission, members-only summer hours, invitations to special events, discounts, and much more.


Thanks to the '55 Mod team for their test support and especially to Stefan Roess for hosting the website.
BTW, Stefan has cooked up a nice surprise for everyone too.
Be careful, it can be slippery out there.
What Is It?: The Weather Patch continuously changes the visibility on-the-fly to simulate fog, rain, or haze.
It works during training, qualification, and race for all mods, all country .exes, all tracks, and with the D3D7v2 and OpenGLv2 rasterisers.
Online players see the same visibility regardless of when they join the server.
As the visibility decreases, so does the track surface grip to simulate a wet track. Also, the AI will slow down.
How Does It Work?: The Weather Patch uses GPL's Fog Effect which, before now, could only apply a constant density, gray colored fog throughout qualification and race. Normally, the fog's density is set in the track.ini file, but the Weather Patch automatically and continuously changes the density on-the-fly and track.ini file settings aren't needed.
The density and change duration are random, but are based on the track's length. So each track will have different fog characteristics.
I place the Weather patch in one of the Options directories to make it easy to turn on and off with GEM+'s checkbox.
Important--the patch only works with v2 rasterisers! Do not use it with the Night Patch!
What Should You Expect To See?: The Weather Patch continuously adjusts the visibility during qualification or race. Sometimes the visibility will be very good while at other times, it can be quite poor. Be careful when the visibility is poor as the track surface can be very slippery.
Replays: The patch works during replays. All the replay buttons such as fast forward, pause, .etc, and the time slider work normally and the visibility is automatically updated although it make take a few seconds to adjust. If your replay includes qualification and race segments, the patch automatically adjusts. You can use a saved replay as well as the normal qualification/race replay screen.
1. If you enter and exit your car or use the replay time change features, elapsed time and visibility may no longer be in real time. Press the "Live Feed" button to synchronize the display. This is not a bug with the patch, but is a feature of GPL.
2. To minimize possible frame rate degradation, visibility changes are purposely limited to twice per second. This may create a slight flickering effect when the visibility is worst.
3. The Fog Effect is always active so it may obscure the horizon at some tracks. Some tracks have a distant horizon which makes them more susceptible to the effect. Tracks with closer horizons, such as Monaco, are not obscured as much.
4. Do not use the Weather Patch at the same time as the Night Patch as the two patches are not compatible with each other.
5. The online server does not have to be patched for the Weather Patch to work.
Edited by Lee200, Mar 26 2017 - 07:38 AM.
Thanks Lee and all concerned for this patch !
PS: Does the weather also hinder the AI as well as yourself (offline) ?
Thank you Lee for this patch, Stefan for the movie, and everyone who helped out.
Edited by John Woods, Mar 26 2017 - 10:31 AM.
Edited by twinpotter, Mar 26 2017 - 11:35 AM.
I don't understand. It already randomly varies the visibility from very good to very bad.
Now if you are talking about displaying actual raindrops, that is something that can be done, but it requires using modified track .3DO files. Wet Spa and Wet Mosport are good examples where the track maker has modified the track .3DO file to add raindrops. I've looked into automatically doing this with a patch, but it's probably impossible to do as the track .3DO file structure is extremely complex.
This is amazing ! Thank you Lee and all concerned !
WOW ! Just watched the video on Youtube. The effect is stunning and that was some great racing too.
Edited by marco lenarduzzi, Mar 27 2017 - 03:26 AM.
No man, I wasn't talking about that: I'm sorry if I didn't get the message out clearly enough.
What I'm talking about is since it will already shuffle between haze and heavy, normal and light rain, I thought it would be the cherry on the top if it could shuffle between clear sky and all of the said conditions: in this way it would be a more complete package, at least from where I'm seeing it. I'm not at all bashing on you or your work, mind you, but just asking if there is room for some further improvements down the line by you or someone else who wants to look at the actual code and how it works with GPL. I'm asking that because I've tested the patch for a while and it didn't ever display a sunny/clear weather after all the possible conditions were shuffled through.
Good work as ever Lee and thanks for adding more dynamics to this brilliant game.
As mentioned in the notes, it's not possible to have a completely clear sky as the fog effect is always active. So even at extremely low density values, the distant horizon including the sky will be obscured somewhat. The effect differs from track to track. Many tracks have a distant horizon which will always be obscured while some tracks, such as Monaco, have a closer horizon and aren't obscured as much.
Even if it were possible, I don't think a completely clear sky is realistic for a weather patch as typically rain and fog don't go from pea soup conditions to unlimited visibility in a short time.
There were several technical challenges that had to be overcome for the patch. Getting it to work well offline was relatively easy, but ensuring that all online players see the same fog density at the same time, but still using random changes for variety was tough. As you know, online player can join the server at different times which greatly complicates things.
I also spent several days trying to get the cars to display spray behind the tires. I succeeded in getting one or sometimes two cars to do this and it is a cool effect, but I couldn't get all cars to do so.
Ok when I call you the "Magic Patch Machine" from now on.
Thx to all for the positive feedback on the movie. Nice that you like it.
Maybe one day it might be possible.
It is good to know that it is possible at all....even just for 1-2 cars atm.
Edited by Stefan Roess, Mar 27 2017 - 07:27 AM.


text:
using System.Collections.Generic;

namespace Azure.ResourceManager.CosmosDB.Models
{
    /// <summary> An Azure Cosmos DB MongoDB database. </summary>
    public partial class MongoDBDatabaseGetResults : ARMResourceProperties
    {
        /// <summary> Initializes a new instance of MongoDBDatabaseGetResults. </summary>
        public MongoDBDatabaseGetResults()
        {
        }

        /// <summary> Initializes a new instance of MongoDBDatabaseGetResults. </summary>
        /// <param name="id"> The unique resource identifier of the ARM resource. </param>
        /// <param name="name"> The name of the ARM resource. </param>
        /// <param name="type"> The type of Azure resource. </param>
        /// <param name="location"> The location of the resource group to which the resource belongs. </param>
        /// <param name="tags"> Tags are a list of key-value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater than 128 characters and value no greater than 256 characters. For example, the default experience for a template type is set with "defaultExperience": "Cassandra". Current "defaultExperience" values also include "Table", "Graph", "DocumentDB", and "MongoDB". </param>
        /// <param name="resource"> . </param>
        /// <param name="options"> . </param>
        internal MongoDBDatabaseGetResults(string id, string name, string type, string location, IDictionary<string, string> tags, MongoDBDatabaseGetPropertiesResource resource, MongoDBDatabaseGetPropertiesOptions options) : base(id, name, type, location, tags)
        {
            Resource = resource;
            Options = options;
        }

        public MongoDBDatabaseGetPropertiesResource Resource { get; set; }
        public MongoDBDatabaseGetPropertiesOptions Options { get; set; }
    }
}


text:
Solomon Star News
Solomon Islands leading daily newspaper
About the Solomon Islands
Article author Editor
'Aligegeo shaped my life'
Sports - NationalBy Editor March 27, 2017 Leave a comment
A Fijian woman says Aligegeo Provincial Secondary School helps to shape her life. Viniana Duituturanga was a student at Aligegeo from 1969 to 1971 when her father was a teacher there. Last week she visited her old school in Malaita. "Aligegeo School is my home from 1969 to 1971," Duituturanga said. "I live and schooled…
Public asked to help fight TB
The national Tuberculosis (TB) programme is looking at engaging communities to help carry out the fight against TB in the country. Director Noel Itogo said it is important that communities must involve in this fight against the killer disease. "One of the main focuses of TB programme is to roll out TB services and engaged…
Red Cross outlines vision
"Our vision is to become the leading humanitarian organization in the Solomon Islands, improving the lives of vulnerable people," says Solomon Island Red Cross (SIRC) President, Donald Tahani. SIRC have launched their Strategic Plan for the next four years last Wednesday. The highlight of their work plan goal is the aim to reach 30 per…
A bold new vision
Private ViewBy Editor March 26, 2017 Leave a comment
In a report released by the WHO today, Thursday, 23 March 2017, (from which I quote) "A bold new plan developed by the Ministry of Health and Medical Services, with support from WHO, sets out the Pacific nation____s roadmap towards universal health coverage and the Sustainable Development Goals. "The plan defines what services are to…
NO MORE PAYMENT
…For all ex-combatants by government THE six million ($6m) paid by government to ex-combatants in 2015 and 2016 are the final cash payout to be made for the former fighters. This was revealed by the Permanent Secretary (PS) of the Ministry of National Unity, Reconciliation and Peace (MNURP) Justus Denni when he appeared before the…
Lucky families
Two families counted themselves lucky when a vehicle veered off the road and stopped just in front of their homes in the early hours of Saturday at Lengakiki. The incident happened at around 3am. Bakana Longasaliu told the Sunday Star a mango tree in front of his house stopped the rolling hilux from destroying his…
Benefits of teak tree
News - BusinessBy Editor March 26, 2017 Leave a comment
Teak is one of the popular trees planted in almost every corner of the country. It was said to be a highly commercial tree species. A report from the Ministry of Forest said teak was a species which was recommended for many situations in country. It was a timber which was highly regarded in the…
Vasuni queries loggers
Central Province to meet over logging operation Central Islands Provincial will convene an urgent meeting this week to discuss a logging company's operations and compliance issues. Tropical Logging Company landed with its machineries two weeks ago at Voghovavala point, Nautuha District, with informing the provincial executive. The incident prompted widespread criticism of the provincial administration's…
Meet the Kitchen Boys
Features - Local EntertainmentBy Editor March 25, 2017 Leave a comment
A five-boy band with a dream A DREAM of a five-boy band started from scratch. And they were able to make a break-through after they formed themselves a musical group and practically played live music apart from raising funds and enduring obstacles. Band leader Francisco Kengava was happy to share the experiences of his boys…
Police set to sign new pact with Indonesia
A DRAFT Memorandum of Understanding (MoU) between the Royal Solomon Islands Police Force (RSIPF) and the Indonesian National Police is expected to be signed soon. The MoU is focused on cooperation to prevent and combat transnational crimes and building international police capacity. Supervising minister of the Ministry of Police, National Security and Correctional Services, Peter…
23456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845
8518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991,0001,0011,0021,0031,0041,0051,0061,0071,0081,0091,0101,0111,0121,0131,0141,0151,0161,0171,0181,0191,0201,0211,0221,0231,0241,0251,0261,0271,0281,0291,0301,0311,0321,0331,0341,0351,0361,0371,0381,0391,0401,0411,0421,0431,0441,0451,0461,0471,0481,0491,0501,0511,0521,0531,0541,0551,0561,0571,0581,0591,0601,0611,0621,0631,0641,0651,0661,0671,0681,0691,0701,0711,0721,0731,0741,0751,0761,0771,0781,0791,0801,0811,0821,0831,0841,0851,0861,0871,0881,0891,0901,0911,0921,0931,0941,0951,0961,0971,0981,0991,1001,1011,1021,1031,1041,1051,1061,1071,1081,1091,1101,1111,1121,1131,1141,1151,1161,1171,1181,1191,1201,1211,1221,1231,1241,1251,1261,1271,1281,1291,1301,1311,1321,1331,1341,1351,1361,1371,1381,1391,1401,1411,1421,1431,1441,1451,1461,1471,1481,1491,1501,1511,1521,1531,1541,1551,1561,1571,1581,1591,1601,1611,1621,1631,1641,1651,1661,1671,1681,1691,1701,1711,1721,1731,1741,1751,1761,1771,1781,1791,1801,1811,1821,1831,1841,1851,1861,1871,1881,1891,1901,1911,1921,1931,1941,1951,1961,1971,1981,1991,2001,2011,2021,2031,2041,2051,2061,2071,2081,2091,2101,2111,2121,2131,2141,2151,2161,2171,2181,2191,2201,2211,2221,2231,2241,2251,2261,2271,2281,2291,2301,2311,2321,2331,2341,2351,2361,2371,2381,2391,2401,2411,2421,2431,2441,2451,2461,2471,2481,2491,2501,2511,2521,2531,2541,2551,2561,2571,2581,2591,2601,2611,2621,2631,2641,2651,2661,2671,2681,2691,2701,2711,2721,2731,2741,2751,2761,2771,2781,2791,2801,2811,2821,2831,2841,2851,2861,2871,2881,2891,2901,2911,2921,2931,2941,2951,2961,2971,2981,2991,3001,3011,3021,3031,3041,3051,3061,3071,3081,3091,3101,3111,3121,3131,3141,3151,3161,3171,3181,3191,3201,3211,3221,3231,3241,3251,3261,3271,3281,3291,3301,3311,3321,3331,3341,3351,3361,3371,3381,3391,3401,3411,3421,3431,3441,3451,3461,3471,3481,3491,3501,3511,3521,3531,3541,3551,3561,3571,3581,3591,3601,3611,3621,3631,3641,3651,3661,3671,3681,3691,3701,3711,3721,3731,3741,3751,3761,3771,3781,3791,3801,3811,3821,3831,3841,3851,3861,3871,3881,3891,3901,3911,3921,3931,3941,3951,3961,3971,3981,3991,4001,4011,4021,4031,4041,4051,4061,4071,4081,4091,4101,4111,4121,4131,4141,4151,4161,4171,4181,4191,4201,4211,4221,4231,4241,4251,4261,4271,4281,4291,4301,4311,4321,4331,4341,4351,4361,4371,4381,4391,4401,4411,4421,4431,4441,4451,4461,4471,4481,4491,4501,4511,4521,4531,4541,4551,4561,4571,4581,4591,4601,4611,4621,4631,4641,4651,4661,4671,4681,4691,4701,4711,4721,4731,4741,4751,4761,4771,4781,4791,4801,4811,4821,4831,4841,4851,4861,4871,4881,4891,4901,4911,4921,4931,4941,4951,4961,4971,4981,4991,5001,5011,5021,5031,5041,5051,5061,5071,5081,5091,5101,5111,5121,5131,5141,5151,5161,5171,5181,5191,5201,5211,5221,5231,5241,5251,5261,5271,5281,5291,5301,5311,5321,5331,5341,5351,5361,5371,5381,5391,5401,5411,5421,5431,5441,5451,5461,5471,5481,5491,5501,5511,5521,5531,5541,5551,5561,5571,5581,5591,5601,5611,5621,5631,5641,5651,5661,5671,5681,5691,5701,5711,5721,5731,5741,5751,5761,5771,5781,5791,5801,5811,5821,5831,5841,5851,5861,5871,5881,5891,5901,5911,5921,5931,5941,5951,5961,5971,5981,5991,6001,6011,6021,6031,6041,6051,6061,6071,6081,6091,6101,6111,6121,6131,6141,6151,6161,6171,6181,6191,6201,6211,6221,6231,6241,6251,6261,6271,6281,6291,6301,6311,6321,6331,6341,6351,6361,6371,6381,6391,6401,6411,6421,6431,6441,6451,6461,6471,6481,6491,6501,6511,6521,6531,6541,6551,6561,6571,6581,6591,6601,6611,6621,6631,6641,6651,6661,6671,6681,6691,6701,6711,6721,6731,6741,6751,6761,6771,6781,6791,6801,6811,6821,6831,6841,6851,6861,6871,6881,6891,6901,6911,6921,6931,6941,6951,6961,6971,6981,6991,7001,7011,7021,7031,7041,7051,7061,7071,7081,7091,7101,7111,7121,7131,7141,7151,7161,7171,7181,7191,7201,7211,7221,7231,7241,7251,7261,7271,7281,7291,7301,7311,7321,7331,7341,7351,7361,7371,7381,7391,7401,7411,7421,7431,7441,7451,7461,7471,7481,7491,7501,7511,7521,7531,7541,7551,7561,7571,7581,7591,7601,7611,7621,7631,7641,7651,7661,7671,7681,7691,7701,7711,7721,7731,7741,7751,7761,7771,7781,7791,7801,7811,7821,7831,7841,7851,7861,7871,7881,7891,7901,7911,7921,7931,7941,7951,7961,7971,7981,7991,8001,8011,8021,8031,8041,8051,8061,8071,8081,8091,8101,8111,8121,8131,8141,8151,8161,8171,8181,8191,8201,8211,8221,8231,8241,8251,8261,8271,8281,8291,8301,8311,8321,8331,8341,8351,8361,8371,8381,8391,8401,8411,8421,8431,8441,8451,8461,8471,8481,8491,8501,8511,8521,8531,8541,8551,8561,8571,8581,8591,8601,8611,8621,8631,8641,8651,8661,8671,8681,8691,8701,8711,8721,8731,8741,8751,8761,8771,8781,8791,8801,8811,8821,8831,8841,8851,8861,8871,8881,8891,8901,8911,8921,8931,8941,8951,8961,8971,8981,8991,9001,901


If you have a Jazz2Online account but no JCF account, you need to upgrade your Jazz2Online account. Enter your login details and click the button below to do so.
If you have both a JCF and a J2O account, you can link them. Please enter your login details for both below to link.
If you have a JCF account but no Jazz2Online account, you need to upgrade your JCF account. Fill in your JCF login details below to upgrade.
If you don't have a Jazz2Online or a JCF account, you'll need to register a new account. Go to the sign up page and fill in the form, and your account will be set up for you.


Theresa began her real estate career in the Vail Valley of Colorado 25 years ago selling resort properties. She was a Senior Broker with Slifer Smith & Frampton in Vail�s Bridge Street office involved in the early stages of development of Beaver Creek, Arrowhead, Strawberry Park and other area neighborhoods.
Originally from Alabama, Theresa came to Washington in her 20s to work as a U.S. Senate Staffer and later received an appointment to the Department of Commerce. After this appointment, Texas Air Corporation, the airline holding company, sent her to Colorado to represent the company during the construction and opening of the Denver International Airport. After 13 years in Colorado, she returned to the East Coast as a Development Director for The Rouse Company and now enjoys brokerage sales in the greater Washington area with Washington Fine Properties.
You will not find a better real estate professional in Washington. Theresa recently advised us on our house purchase and she was absolutely first class. She was insightful, understanding our situational and housing needs, diligent and making sure we were first to every opportunity. Theresa is very knowledgeable and successful. One offer made, one offer accepted. In summary, we were looking for the perfect house and Theresa secured it for us. Thank you!
Having bought and sold houses several times over the years, we have learned that a great realtor is essential. Theresa Burt helped us with two transactions in Georgetown, and each time she has gone the extra mile, bringing her excellent skills combined with sensitivity to bear.
Theresa kept her eye on our goals each time and brilliantly brought both sides together to close the deal with a rare finesse. She listens carefully to her client�s wants and needs and is very prepared. She is warm, focused and intelligent into the bargain.
Only 9 days on the market and we had a great offer! Fortunately a friend suggested I interview Theresa. After our first meeting, I felt optimistic and believed that her obvious expertise, determination and confidence would lead the way to the sale of my house.
Thanks to Theresa�s skill and guidance during every stage � pricing, listing, staging, showing offer evaluation, contract negotiation, inspection repairs and closing � the most significant business transaction of my life was amazingly smooth and pleasant. I can honestly say that her work on my behalf far exceeded my expectations.
Theresa Burt is a delight. She helped us purchase our home after an extensive search of the Washington region. She has a deep understanding of real estate in the area, and more importantly develops a firm grasp of what matters most to her clients. She is a total pro. Smart fun, charming and patient.
We wouldn�t do another deal without her. And she remains a friend.