text:
Q: What's the problem in my BFS implementation for 8 squares I have designed a algorithm which will solve the 8 square problem using BFS or DFS.The current problem is that it is running for infinitely long time.If I let it run for 30 minutes or so.It ends with my RAM getting full.What's the problem in my implementation.I am unsuccessful to debug this code.
Thanks in advance.
import copy
import time
import pprint
def get_empty_board():
    return [
        [7,4,2],
        [8,3,0],
        [1,5,6]
        ]
end_state = [
    [1,2,3],
    [8,0,4],
    [7,6,5]
    ]
def solve_squares(board):
    states_explored = list()
    states = [ (neighbor,[board] + [neighbor]) for neighbor in get_neighbors(board) ]
    while states:
        print(len(states))
        current_state = states.pop(0)
        if (current_state[0]) in states_explored:
            continue
        # if len(states) > 300:
            # states =[ states[0] ]
        # pprint.pprint(current_state)
        # pprint.pprint(current_state)
        if current_state[0] == end_state:
            return True,current_state[1]
        neighbors = get_neighbors(current_state[0])
        states_explored.append(current_state[0])
        for neighbor in neighbors:
            if (neighbor) not in states_explored:
                states.append((neighbor,current_state[1] + [neighbor]))
                states_explored.append((neighbor[0]))
    return False,None
def get_neighbors(board):
    x = None
    y = None
    neighbors = list()
    for i in range(len(board)):
        for j in range(len(board[0])):
            if board[i][j] == 0:
                x = i
                y = j
                break
    # print(x,y)
    for i in range(len(board)):
        for j in range(len(board[0])):
            if abs(i-x) <= 1 and abs(j-y) <= 1:
                if abs(i-x) != abs(j-y):
                    # print(i,j)
                    new_state = copy.deepcopy(board)
                    new_state[x][y] = new_state[i][j]
                    new_state[i][j] = 0
                    # pprint.pprint(new_state)
                    # time.sleep(5)
                    neighbors.append(new_state)
    return neighbors
def main():
    result,path = solve_squares(get_empty_board())
    print(result)
    print(path)
main()

A: There are couple of improvements required in your solution:

*

*You are using a python list (e.g., states_explored) to track the board configurations that you already been visited. Now, list's average case complexity for x in s is: O(n). You need to apply some efficient data structure (e.g., set) for this purpose. You can check this stack-overflow answer for details discussion about this optimization.

*Your RAM is getting full because you are storing the full paths of every discovered board configurations in the queue (e.g., states). This is quite unnecessary and memory inefficient. To solve this, you can use an efficient data-structure (e.g., map) to store the parent-state of a given state. After discovering the target, you need to construct the path by backtracking the map.

We can visualize the second optimization by the following example. Let's say, you are mapping <state, parent-state> as the key-value:
<initial-state, NaN>
<state-1, initial-state>
<state-2, state-1>
<state-3, state-2>
...
...
<final-state, state-n>

Now after discovering final-state, we can query what is the parent of final-state in the map. Then, recursively made this query until we reach to the initial-state.
If you apply this two optimizations, you will get huge improvement in your run-time, as well as in the memory consumption.

A: The issue is indeed performance. To get an idea of the speed, put the following print in your code (and only that one):
    if len(states_explored) % 1000 == 0:
        print(len(states_explored))

You'll see how it slows down as it progresses. I wrote a more efficient implementation, and found that the algorithm would need to visit over 100,000 states to find the solution. At the rate you see the above line output lines, you can imagine that it will take a very long time to finish. I didn't have the patience to wait for it.
Note that there was one error I spotted in your code, but it does not harm the algorithm:
states_explored.append((neighbor[0]))

This statement is wrong for two reasons:

*

*neighbor is a board, so taking index [0] from it, produces the first row of that board, and that is useless for this algorithm.

*If you would correct it to just neighbor, it would become significant, but would stop the algorithm in its tracks, because then the search will stop when these neighbors are popped from the queue.

So this line should just be omitted.
Here are some ways to improve the efficiency of your algorithm:

*

*Use a primitive value to represent the board, not a list. For instance, a string of 9 characters would do the job. Python can work much faster with strings than with 2-dimensional lists. This also means you don't need deep_copy.

*Don't use a list for tracking which states have been visited. Use a set -- or to also cover for the next point -- a dictionary. Lookup in a set/dictionary is more efficient than in a list.

*Don't store the whole path of boards that leads to a certain state. It is enough to track the previous state. You can use a dictionary to both indicate that a state was visited, and from which state it came. This will represent a path as a linked list. And so you can reconstruct a path from it once you have found the target.

*When looking for neighbors, don't iterate each cell of the board. It is quite clear at which indexes these neighbors are at, and there are at most 4 of them. Just locate these four coordinates and check whether they are in range. Here the string-representation of the board will also come in handy: you can locate the 0-cell with board.index("0").

*Don't use .pop(0) on a list: it is not efficient. You can use a deque instead. Or -- what I prefer in this case -- don't pop at all. Instead, use two lists. Iterate the one, and populate the second. Then assign the second list to the first and repeat the process with an empty second list.

Here is the code I would suggest. It has the same print I suggested at the start of this answer, and finds the solution in a few seconds.
def get_empty_board():
    return "742830156"

end_state = "123804765"

def print_board(board):
    print(board[:3])
    print(board[3:6])
    print(board[6:])

def solve_squares(board):
    states = [(board, None)]
    came_from = {}
    while states:
        frontier = []
        for state in states:
            board, prev = state
            if board in came_from:
                continue
            came_from[board] = prev
            if len(came_from) % 1000 == 0:
                print(len(came_from))
            if board == end_state:  # Found! Reconstruct path
                path = []
                while board:
                    path += [board]
                    board = came_from[board]
                path.reverse()
                return path
            frontier += [(neighbor, board) for neighbor in get_neighbors(board) if neighbor not in came_from]
        states = frontier

def get_neighbors(board):
    neighbors = list()
    x = board.index("0")
    if x >= 3:  # Up
        neighbors.append(board[0:x-3] + "0" + board[x-2:x] + board[x-3] + board[x+1:])
    if x % 3:  # Left
        neighbors.append(board[0:x-1] + "0" + board[x-1] + board[x+1:])
    if x % 3 < 2:  # Right
        neighbors.append(board[0:x] + board[x+1] + "0" + board[x+2:])
    if x < 6:  # Down
        neighbors.append(board[0:x] + board[x+3] + board[x+1:x+3] + "0" + board[x+4:])
    return neighbors

path = solve_squares(get_empty_board())
print("solution:")
for board in path:
    print_board(board)
    print()

A: Flattening the board and using a dictionary containing pre-mapped moves will simplify and accelerate the logic considerably.  A BFS approach is recommended in order to obtain the smallest number of moves.  To keep track of visited positions, the flattened board can be stored as a tuple which will allow direct use of a set to efficiently track and verify previous states:
# move mapping (based on position of the zero/empty block)
moves = { 0: [1,3],
          1: [0,2,4],
          2: [1,5],
          3: [0,4,6],
          4: [1,3,5,7],
          5: [2,4,8],
          6: [3,7],
          7: [4,6,8],
          8: [5,7] }

from collections import deque
def solve(board,target=(1,2,3,4,5,6,7,8,0)):
    if isinstance(board[0],list):  # flatten board
        board  = tuple(p for r in board for p in r)
    if isinstance(target[0],list): # flatten target
        target = tuple(p for r in target for p in r)
    seen = set()
    stack = deque([(board,[])])         # BFS stack with board/path
    while stack:
        board,path = stack.popleft()    # consume stack breadth first
        z = board.index(0)              # position of empty block
        for m in moves[z]:              # possible moves
            played = list(board)
            played[z],played[m] = played[m],played[z] # execute move
            played = tuple(played)                    # board as tuple
            if played in seen: continue               # skip visited layouts
            if played == target: return path + [m]    # check target
            seen.add(played)
            stack.append((played,path+[m]))           # stack move result

output:
initial = [ [7,4,2],
            [8,3,0],
            [1,5,6]
          ]
target  = [ [1,2,3],
            [8,0,4],
            [7,6,5]
          ]

solution = solve(initial,target) # runs in 0.19 sec.

# solution = (flat) positions of block to move to the zero/empty spot
[4, 1, 0, 3, 6, 7, 4, 1, 0, 3, 4, 1, 2, 5, 8, 7, 6, 3, 4, 5, 8, 7, 4]

board = [p for r in initial for p in r]
print(*(board[i:i+3] for i in range(0,9,3)),sep="\n")
for m in solution:
    print(f"move {board[m]}:")
    z = board.index(0)
    board[z],board[m] = board[m],board[z]
    print(*(board[i:i+3] for i in range(0,9,3)),sep="\n")

[7, 4, 2]
[8, 3, 0]
[1, 5, 6]
move 3:
[7, 4, 2]
[8, 0, 3]
[1, 5, 6]
move 4:
[7, 0, 2]
[8, 4, 3]
[1, 5, 6]
move 7:
[0, 7, 2]
[8, 4, 3]
[1, 5, 6]
move 8:
[8, 7, 2]
[0, 4, 3]
[1, 5, 6]
move 1:
[8, 7, 2]
[1, 4, 3]
[0, 5, 6]
move 5:
[8, 7, 2]
[1, 4, 3]
[5, 0, 6]
move 4:
[8, 7, 2]
[1, 0, 3]
[5, 4, 6]
move 7:
[8, 0, 2]
[1, 7, 3]
[5, 4, 6]
move 8:
[0, 8, 2]
[1, 7, 3]
[5, 4, 6]
move 1:
[1, 8, 2]
[0, 7, 3]
[5, 4, 6]
move 7:
[1, 8, 2]
[7, 0, 3]
[5, 4, 6]
move 8:
[1, 0, 2]
[7, 8, 3]
[5, 4, 6]
move 2:
[1, 2, 0]
[7, 8, 3]
[5, 4, 6]
move 3:
[1, 2, 3]
[7, 8, 0]
[5, 4, 6]
move 6:
[1, 2, 3]
[7, 8, 6]
[5, 4, 0]
move 4:
[1, 2, 3]
[7, 8, 6]
[5, 0, 4]
move 5:
[1, 2, 3]
[7, 8, 6]
[0, 5, 4]
move 7:
[1, 2, 3]
[0, 8, 6]
[7, 5, 4]
move 8:
[1, 2, 3]
[8, 0, 6]
[7, 5, 4]
move 6:
[1, 2, 3]
[8, 6, 0]
[7, 5, 4]
move 4:
[1, 2, 3]
[8, 6, 4]
[7, 5, 0]
move 5:
[1, 2, 3]
[8, 6, 4]
[7, 0, 5]
move 6:
[1, 2, 3]
[8, 0, 4]
[7, 6, 5]

redpajama_set_name: RedPajamaStackExchange


This new edition contains up-to-date information on this dynamic specialty that applies a holistic approach employing biological, psychological, social, and spiritual factors to provide treatment to patients who are affected by alcohol, tobacco, and other drug use and persistent and recurrent maladaptive behaviors and addictive disorders. Much of the addictions nurse's job involves teaching patients about the dangers of substance abuse and possible treatment options. Since addiction is both a mental and physical disease, these nurses are trained in both general medicine and mental health.
This go-to guide contains the most up-to-date information on this practice specialty. It specifies the who, what, where, when, why, and how of addictions nursing practice. The 16 standards are those by which all RNs in addictions nursing are held accountable for in their practice. Each standard is measurable by a set of specific competencies that serve as evidence of minimal compliance with that standard.
Additions Nursing: Scope and Standards of Practice is a must-have title for clinicians, educators, students, and other healthcare works directly involved in this area of practice.


text:
Pt. Govind Ballabh Pant High Altitude Zoo is a high altitude zoo situated in Nainital, Kumaon. Established in 1984 and opened to public in 1995, it is situated on the Sher Ka Danda hill at a height of   above sea-level and is spread over . It is the only High Altitude Zoo in north India, besides those in Darjeeling and Sikkim. Over the years it has become a popular tourist attraction

History
The zoo was established in 1984, though it was opened to visitors on 1 June 1995.

The Naintal Zoo was home to India's only Siberian tiger from 2001 until its death in November 2011. The tiger, named Kunal, was half of a pair of tigers brought from Darjeeling in 1997. His older brother, named Mahesh, died in 2001.

Overview
The zoo has several endangered species of animals in the Himalayas, and animals like Royal Bengal tiger, Tibetan wolves, sambar, leopard cat and Himalayan bear. It also has a vast collection of high altitude birds, like kalij pheasant, Lady Amherst pheasant, rose ringed parakeet, golden pheasant and red junglefowl.

The zoo has night shelters for the animals, and curtains are put up in the bird enclosures during the winter months

Geography
The zoo is situated at the elevation ranging from  above sea level between Shivalik and middle Himalayas mountain range. It has a forest cover of evergreen oak, cupressus, and two other species of oak.

Transport
The zoo is located about  uphill from Tallital Bus station in Nainital. There is a steep motorable road leading to the zoo, though many tourist walk up the hill.

The zoo is open, Friday to Wednesday, 10.00 am - 4.30 p.m.

References

External links

Zoos in India
Nainital
1984 establishments in Uttar Pradesh
Tourist attractions in Uttarakhand
Zoos established in 1984

redpajama_set_name: RedPajamaWikipedia


text:
Isidoro Grünhut (27 August 1862, Trieste – 5 May 1896, Florence) was an Italian painter of Jewish ancestry; known for genre scenes and portraits.

Biography

His father, Israel, was originally from Regensburg. His mother, Giuditta née Panzieri, was from an upper-class family in Ancona. He displayed artistic talent at an early age, but his father was opposed to his pursuit of that as a career. At the age of sixteen, he rebelled, running away from home to join up with an "impresario" named Benelli; providing drawings in return for his upkeep. The constant travelling, long hours and poor food undermined his already precarious health; having suffered a childhood fall that damaged his back. He eventually developed a chronic heart condition, and was forced to quit.

Around 1880, after a brief stay in Trieste, he was able to enroll at the Accademia di Belle Arti di Venezia, where he studied with Pompeo Marino Molmenti. After two years, he transferred to the Academy of Fine Arts, Munich. There, he met two other students from Trieste; Carlo Wostry and Umberto Veruda, whose recollections provide much of what is known about him up to this period. In 1884, new health problems forced him to quit attending school and work as an itinerant portrait painter. He left Munich in 1886 and returned to Trieste.

In 1888, he participated in a competition in Bologna, but was denied a prize because he lacked Italian citizenship; Trieste being part of Austria-Hungary at that time. He was also rejected for a scholarship that would have allowed him to study in Rome, but was able to gain financial support from Baron Giuseppe Morpurgo (1816-1898), head curator at the Museo Revoltella.

While in Rome, he was able to attract a permanent patron, Count Alessandro Lotteringhi della Stufa, who offered him room to set up a studio at the family palace in Florence. There, he gained numerous clients among the aristocracy, but much of his work from that time is unknown, as it remains in private collections. He left there in 1891, to travel, although he went back occasionally, and returned in 1893. During this period, he painted little, focusing on caricatures, and lived a very disorganized life. He also contracted an unhappy marriage, with Irene Fabbricotti, a young woman from Tuscany, who gave him two daughters.

Count Lotteringhi died in 1895, and his heirs took away the studio. Left without that resource, Grünhut's livelihood was precarious and he became more unruly. His excesses led to a physical and mental collapse; leaving him paralyzed and leading to his death; aged only thirty-three.

References

Further reading
 Carlo Wostry, Storia del Circolo artistico di Trieste, Edizioni de La Panarie, 1934
 Catalogo della la Galleria d'arte moderna del Civico Museo Revoltella, Ed. by Franco Firmiani and Sergio Molesi, Ente Provinciale per il Turismo, 1970, p. 77
 La pittura in Italia. L'Ottocento, II, Ed, by Enrico Castelnuovo and C. Pirovano, Mondadori Electa, 1997, , p. 862
 Laura Vasselli, Artisti allo specchio. Caricature e ritratti del Circolo artistico di Trieste 1887-1910 (Exhibition catalog), Civici Musei di Storia ed Arte di Trieste, 1992
 Adriano Dugulin (Ed.), Shalom Trieste. Gli itinerari dell'ebraismo (Exhibition catalog), Comune di Trieste, 1998 , pp. 365-372

External links

Austro-Hungarian painters
Austro-Hungarian Jews
Jewish painters
1862 births
1896 deaths
Italian painters
Artists from Trieste


Hi, my name is Latasha! I found out about WeRunMPLS shortly after moving to MPLS. I did some Google research on different running groups in the area and stumbled upon the WeRunMPLS website. The "all paces welcome. no one runs alone" motto is what drew me to the group!
I love running the Chain of Lakes—Lake Harriet, Bde Maka Ska and Lake of the Isles!
My favorite run so far has definitely been our Saturday morning long run + potluck brunch!
Spending time with my dog, Charlie!
As a transplant to MPLS, this group has been a great way to meet new people and make new friends. That's been my favorite part!
Probably the most motivating quote is one I read on the back of someone's t-shirt during the TC 10 mile: "…a 70 year old is running faster than you right now…" Needless to say, I started to pick up my pace!
I'm a native Virginian and diehard Wahoo (University of Virginia alumna)!


We welcome volunteers because their support shows that the community really wants our organization to succeed. Volunteers diversify and expand the skills we can offer to the people who need our services. Volunteers that contribute time and talents to our organization always make a wonderful impact and difference in peoples lives.
We provide and offer flexible time commitments, training, opportunities to meet new people and learn different skills as you become involved in your community.
Volunteers can provide support directly to people with an intellectual disability through our programs and in the community. The purpose of this involvement is to enter into a relationship with a group or individual in order to meet some of their needs for recreation, socialization, or companionship. Volunteers improve the individual's quality of life and are a link to the community.
Some volunteers provide support by assisting staff in various capacities, thus allowing our Association to maintain and expand services. Some types of service activities include local fundraising, administration, office support, repairs, and maintenance.
If you would like to learn more about our volunteer opportunities with Community Living Port Colborne ~ Wainfleet please fill out and submit the form below.


text:
Look how much Plymouth Hoe looks like Santorini right now
The waterfront is getting a lick of paint in time for summer - but the stunning weather has already arrived
Sarah ElmesContent Editor
Plymouth or Santorini? (Image: Jacob McTighe)
Plymouth Hoe is looking more like Santorini at the moment as it gets a lick of paint in time for summer.
BC Painting Limited from Launceston will be refreshing the waterfront for the next two weeks before the summer season hits.
And looking through the freshly-painted white arches onto the sparkling blue water below, you'd think you were on holiday abroad - not five minutes from Plymouth city centre.
Jacob McTighe, who is one of the painters working on the hefty job, said the Hoe is looking "the best it ever has".
The 26-year-old added everybody is commenting how they could be in Santorini rather than Plymouth.
"We're breathing a bit of fresh air into the masonry that surrounds the colonnade," he said, "and all of the beach front next to Tinside Lido. We are giving it a lick of paint and getting it ready for the summer and we will be here for about a fortnight.
"The railings are also being replaced on the sea water edge and we are painting the arches and steps that lead down to the water, which is very funny with timings of the tide. You have to time it right."
"We are not using anti-fungal spray because this is a marine conservation area and we also have to use fast-drying paint.
The team from BC Painting LTD. Back to front: James Mayne, Craig Stewart, Dave Neal, Will Potter and Jake McTighe (Image: Penny Cross / Plymouth Live)
He added: "When we walked down this morning we thought it could be Santorini because of the contrast of the blue and white.
"The weather is gorgeous; it's like it's summer already. It's looking really good; I've never seen it looking so good."
Thankfully the weather will be remaining fair for the rest of the week, according to the Met Office.
You can watch the Met Office weather forecast below.
Met Office spokesman Richard Miles said temperatures are way above average - and there's more good weather to come.
He said: "It looks quite nice today and we will have much of the same tomorrow. It will be very mild in the day, although overnight it will be chilly.
"It will be staying dry for the rest of the week, but towards the end we've got some cloud so there may be the possibility of having the odd shower.
"Temperatures will be about 12C - 13C tomorrow, which is much warmer than the average for the time of year. The max for England is 9.8C.
Plymouth waterfront is looking like Santorini (Image: Penny Cross / Plymouth Live)
This is Santorini - see the similarities? (Image: SAKIS MITROLIDIS/AFP/Getty Images)
"High pressure over the UK is causing several conditions leaving skies clear, which lets the sun warm us up."
He added: "We will possibly get some more showers on the weekend, but generally we will have sunny spells. There is a good chance the South West could miss the showers though, as the front is coming down from the North West so it might not come that far."
Latest Plymouth news
Two people charged with Plymouth sub...
Plymouth thug banged up after horrif...
Concern over Morrisons 'unacceptable...
Nazi swastikas daubed all over Plymo...
To keep up to date with Plymouth Live's latest news, follow us on Facebook here and Twitter here, or visit our homepage at www.plymouthlive.com
For Devon news, find Devon Live's Facebook page here, or their Twitter page here, or visit their homepage at www.devonlive.com
For Cornwall news, find Cornwall Live's Facebook page here, or their Twitter page here, or visit their homepage at www.cornwalllive.com

redpajama_set_name: RedPajamaCommonCrawl


text:
Joint Workshop Brings Together Government and Civil Society to Discuss National Policy on the Protection of Civilians
Shotunde Biola, ACSS-Nigeria, acsslistnigeria@gmail.com
Piper Hendricks, CIVIC, phendricks@civiliansinconflict.org
Gathering is a next step toward adoption of globally-lauded policy to ensure civilian harm mitigation measures across security operations
GUDU, ABUJA, NIGERIA – On June 28, 2018, the Alumni Nigeria Chapter of the Africa Center for Strategic Studies (ACSS) and the Center for Civilians in Conflict (CIVIC) will jointly host an invite-only workshop on the protection of civilians in conflict situations. The organizations are honored to welcome representatives and experts from the Government of Nigeria, the National Human Rights Commission, the ACSS community, and Nigerian civil society.
"A common feature of modern day armed conflicts is that civilians have in many instances become the major victims. The current draft of the Nigerian National Policy on the Protection of Civilians and Civilian Harm Mitigation, which has been globally recognized, including by the UN Secretary-General, seeks to address that problem, restore peace, and prevent further conflict," Major General Shehu Yusuf (Rtd), President ACSS Alumni, (Nigeria Chapter) observed. "Indeed, it recognizes the importance of peace and security in Nigeria and the valuable contribution of this tool to conflict management. As a vanguard of security experts in Nigeria, we are very much committed to leverage this very important tool by domesticating its usefulness through continuous advocacy and awareness education within civil population as a means towards mitigating civilian casualties in conflict."
"The Nigerian Government understands that ensuring national security and civilian safety are not mutually exclusive," noted William Meeker, Director of CIVIC's Africa Program. "Civilians and members of the military alike are calling for the adoption and implementation of this pioneering policy, which would further demonstrate the government's commitment to the effective protection of civilians."
The workshop will share both civilian and security sector perspectives to armed conflict, with focus on Northeast Nigeria. Experts will provide insights on Nigeria's draft policy and its benefits before attendees form working groups for discussion and feedback.
Attendance at the workshop is by invitation only, but all are encouraged to join the conversation on social media, including #NigeriaProtects.
Africa Center for Strategic Studies (ACSS)
The Africa Centre for Strategic Studies Alumni Association (Nigeria Chapter) is an alumni association of the ACSS Washington DC after members are deemed to have attended a short academic program offered by the center. The Alumni Association is well over 15 years in existence, with over 300 memberships in Nigeria. The ACSS office address is situated at the National Defence College, Abuja. The core objectives of the association are:
To promote the noble ideals of National Security, Sustainable Development and Rule of Law through active research, consultations and learning from ACSS Washington and all related institutions across the globe towards a better society.
To promote knowledge sharing, passionate loyalty to the nation, unity, self-respectand co-operation among the Alumni of ACSS.
To strengthen the link between the Alumni and the ACSS Chapters in Africa.
To interact with other organizations or association with similar aims and objectives.
Center for Civilians in Conflict (CIVIC)
Center for Civilians in Conflict is an international nonprofit based in Washington, DC with operations around the world. CIVIC's mission is to work with armed actors and civilians to develop and implement solutions to prevent, mitigate, and respond to civilian harm. Established in 2003 as the Campaign for Innocent Victims in Conflict (CIVIC), the organization was founded by Marla Ruzicka, a young American activist and humanitarian who saw first-hand the impacts of conflict on civilians, including casualties and their surviving family members. In April 2005, Marla was tragically killed by a suicide bomber in Baghdad. She died advocating for civilian war victims and their families. Since then, CIVIC has continued her extraordinary legacy and expanded its presence around the world. In Nigeria, CIVIC facilitates community self-protection and civil-military dialogue in the northeast, in addition to delivering training to security actors, primarily the Nigerian military, on the protection of civilians. Visit civiliansinconflict.org.
Source: Center for Civilians in Conflict (CIVIC)
Shotunde Biola, ACSS-Nigeria Communications
acsslistnigeria@gmail.com /+2348023006990
Piper Hendricks, CIVIC Communications
phendricks@civiliansinconflict.org /+1(202)709-7537
Image courtesy of
CIVIC STATEMENT: Welcoming UN Secretary-General's Report, CIVIC Calls for Action to Prioritize Protection of Civilians on Occasion of 20th Anniversary Year
Consultation on the Adoption of the Draft National Policy on the Protection of Civilians and Civilian Harm Mitigation Draws Wide Range of High-Ranking Government Officials and Military, Diplomats and International Agencies, and Civil Society Representatives
CIVIC STATEMENT: CIVIC Mourns the Loss of our colleague Hamza Cherbib, Peacekeeping Researcher
Experienced Leader Tunde Ojei Joins CIVIC as Nigeria Country Director
CIVIC Statement: Extrajudicial Killing of 12 Civilians in Mali Highlights the Need for the G5 Sahel Joint Force to Hasten Implementation of Human Rights Compliance Framework