text:
IdentityMind: Online Risk Management & Compliance Automation
in Innovative-Companies-apr17-list
Founded and built on the premise of driving integrity back into the digital economy through creation and sharing of Digital Identities, IdentityMind provides real-time risk management and compliance.
After seeing that the fraud prevention solutions in the market could not handle the complexities of e-commerce transactions and the transformation to digital, IdentityMind went into action. They pioneered the concept of creating digital identities based on their digital footprints. Called eDNA™, it describes a holistic internet identity (individual or a business) by looking at attributes and how these attributes relate to each other.
IdentityMind realized that eDNA™ could answer the question of who is on the other side of the transaction and should you trust them.
IdentityMind Founder
Garrett Gafke, Chief Executive Officer of IdentityMind is a successful entrepreneur and Fortune 500 Executive, blending early stage action with public company knowledge. Prior to founding IdentityMind Global, Garrett served as President & CEO of Paymate, an innovative provider of payment and risk management services which was acquired by Flexigroup (FLX). Prior to Paymate, Garrett has also served as President and CEO for SteelEye which was acquired by SIOS, a public Japanese company, and was a member of the senior executive team that built and took CyberSource (CYBS) and Trintech (TTPA) public, the former of which Visa acquired in 2010 for $2 billion.
Garrett helped build VeriFone's Internet Commerce Division (PAY) which was later acquired by Hewlett Packard (HP) for $1.2 billion. He has served as the Group Vice President and General Manager for Cardinal Health's (CAH) technology division. A serial entrepreneur, Garrett has a proven track record of founding and growing great technology companies, having completed five M&A transactions, and two successful IPO's. Garrett is an active angel investor and Board Member of early stage companies around Silicon Valley.
While talking about the early days of IdentityMind, he shares, "We pioneered the idea of a digital identity. No one had talked about digital identity until really 2014 in this context. How do we build and complete this hypothesis of someone's electronic DNA(eDNA™), build a reputation around that eDNA™, and then share it with customers across markets within network function? All of this to build greater integrity across the financial services marketplaces. We wanted to address who people really are and whether it was safe to do business with them digitally; we wanted to inject integrity back into the digital marketplace, integrity that was being eroded away."
Services provided by IdentityMind
IdentityMind, creator of Trusted Digital Identities (TDIs), offers a SaaS Platform for Online Risk Management and Compliance Automation. IdentityMind continuously validates and risks scores online identities worldwide through its eDNA to ensure global business safety and compliance at customer onboarding and throughout their lifecycle. It securely tracks the entities involved in each transaction (e.g. consumers, merchants, cardholders, payment wallets, alternative payment methods, etc.) to build reputations, and allows companies to identify and reduce potential fraud, onboard accounts, perform KYC identity verification services, and identify suspicious activity for money laundering.
IdentityMind is innovative in many different ways. They started their business with innovative technology – called eDNA™ and patented it in 2016 – for creating and evaluating digital identities as the core of their risk management and automated compliance platform. They provide the ability to understand if the entity on the other end of the transaction: is a real user/business entity, is authorized to use the information they presented, is someone you should do business with, and whether they pose a risk to the business' brand. And, to answer these questions, they apply identity graph and machine learning technology to understand correlations across large amounts of data and within digital identities to better understand the risk that each identity poses. And, all this happens before the transaction even takes place.
Culture, that is ideal
While talking about the culture of the company, Garrett says, "We have worked hard on our culture: a very flat and diverse culture devoid of the typical politics that usually distracts companies from executing. We also pride ourselves in having built direct line of communications with our clients, they have access to everyone in IdentityMind at all times. I am the greatest advocate and protector of this culture."
Garrett says, "We are constantly innovating and building value within the platform for our customers, and while we can't reveal too much of what we are working on, it is fair to say that it involves more advanced versions of what we already have, and faster and easier ways to apply it to the businesses that need it."
Achieving a balance between global customer acquisition, risk assessment, and regulatory compliance, for any business, is difficult without the proper strategy and technology. This is the reason IdentityMind has created, "The Digital Identity Evaluation Guide", which provides a framework that will help you think through your strategy with a focus on the functionality and technology that can help you achieve it.
Source :- The 30 Most Innovative Companies to Watch
Electric Cloud: Every Business is a Software Business
Intermedia: The Security, Scalability, IT Management that you are looking for


The incremental name comes from the pattern of two contrasting woods incrementally getting smaller and larger from left to right and from right to left. For my board I chose to use the beautiful combination of walnut and maple. Using my neighbors jointer to first get one face and one edge of the boards nice and flat. Big thank you to my neighbor for being so gracious with his shop and tools.
After flattening one face and edge on my walnut board I also did the same with my maple board. Then since I was already in my neighbors shop I went ahead and used his planer to flatten the other side of the boards. However at this point I could have ran these boards through my bench top planer to do the same.
Getting the boards back to my own shop I figured out how long I wanted my cutting board to be, then added an inch and cut that length at the miter saw. That way my boards are roughly cut to size but I still have room to cut them to final length later.
Before continuing, let me explain the two different cutting board options: end grain and edge grain. End grain is where you have the end grain facing up and down, for the cutting surface. Edge grain is where you have the edge of the boards for the cutting surfaces. End grain is easier on the knives edge but edge grain boards are just so darn pretty. For my board I went with edge grain so I could do the pattern I wanted.
I took my boards to the bandsaw and started cutting them in strips. This dimension will ultimately become the thickness of the cutting board.
Next I glued these strips together by applying glue to the face grain of the pieces so that the edge grain will be facing up and down. I'm using Titebond III for this project as it's water proof. Now it's worth noting that if I had bought thicker stock I wouldn't have had to do this step. To move through this project quicker, you can buy wood that is at least as thick as the widest strip you want in your cutting board. For example, since my widest strip is 1 1/4", I should have bought at least 1 1/2" rough sawn wood.
Instead, I'm doing this glue up so that I have a massive block of edge grain walnut and maple to then cut strips from.
After getting my glue ups in clamps I took some water on a towel and wiped off as much of the glue squeeze out as I could before letting it set up overnight.
Oh and I used some scraps wood strips on the ends of each glue up just to protect the wood from a slight indent from the clamps. These are not glued to the boards though.
The next morning I took the edge grain blocks and ran them through my thickness planer to get both sides completely flat.
Since I still don't have full power out to the shop yet, I hooked up a generator to my jobsite saw and started cutting my strips. The trick with the strips is to start off with a dimension, in my case it's 1 1/4". Then run the walnut through then the maple to get a strip this size. Now move the fence to reduce the cut by 1/8" or whatever increment you prefer. I dropped mine to 1 1/8" then ran the walnut and the maple blocks through again. Every time I moved the fence over the same amount, 1/8" until I got down to 1/8" strips.
Now I just rearranged them so that the two outside strips are the 1 1/4" strips, then moved the 1/8" right inside, then the 1 1/8", then 1/4" and so on. You can see the effect is as the walnut shrinks in size from the left to the right, the maples grows the same amount. Pretty cool huh?
Once I double checked that none of the strips got out of order, I got my Rockler bar clamps ready and did the final glue up. This glue up was a little more time consuming as each strip was a different height so the glue had to be placed and smeared individually. Again, I'm using Titebond III for this.
After letting that sit up over night I grabbed my crosscut sled to cut the board down to it's final size.
I once again knocked on my neighbors shop to use his larger thickness planer as the cutting board was now too large to run through my 12" bench top planer. Once I got both sides nice and flat, I took it back to my own space.
Now you can call the board done here if you'd like, it's still very pretty as it is. However, I thought it looked a tad plain so I played around with adding a few curves to the body.
I first drove in some screws to my workbench then used a flexible ruler to trace out a nice subtle curve. I repeated the shape on the other side then took it to the band saw to cut. This came out alright but it wasn't perfect as the cut was made free hand. I did what I could to clean it up at the spindle sander.
I also wanted some curves on the top and bottom of the cutting board but first wanted to cut in the handles on the sides while they were still square. To do this I used a straight bit in my router and made three passes to get to the depth I wanted. I again did this cut free hand and while they came out okay, I learned my lesson and would definitely recommend using a template to make it cleaner and quicker!
After cutting done with the router I came back with a chisel and mallet to square the corners.
When moving to the cut in the curves for the top and bottom I actually took the time to make a template, and I will tell you that using a template made a huge difference in speed and final look.
I made my template from scraps laying around the shop. I used double sided tape to attach the curve to my cutting board, flipped it all upside down and used a flush trim bit to make the cut. The bearing of the bit rides along the template making the edge of the board match the curve I wanted perfectly.
if you're interested I do have these templates available HERE. The template package includes CNC cut templates for the body curves, the handles, as well as making the juice groove which you'll see in the next step.
Before moving on I used my palm ROS to round over the sharp corners just by moving my it back and forth a few times.
Ok next was a little bit of a tricky part. I wanted a juice groove in my board, you know that mote some boards have to catch juices so they don't spill onto your counter? There are plenty of tutorials on making this cut when your board is square, but not any on making one with an irregular shape. So I improvised.
I cut off some cardboard bigger than my cutting board then traced the shape onto it. Next I came in a little bit on all sides and used my board to trace more lines. I'm essentially making the same shape as the board, just smaller. I'll use this as a template or guide for my router to make the juice groove.
Once I liked the shape and size in cardboard I made the template from scrap wood. Once again using double sided tape to stick it to my cutting board, making sure it was nice and centered before I made the cut.
I'm using a 3/8" round nose bit and a guide bushing to make this cut. I took my time and made sure to keep the router pressed up against this template and I'll say that I was beyond happy with the way it came out. It's a small thing that I know serves a function but even if it didn't, dang does it look nice.
To sand this groove nice and smooth I grabbed a Rockler contour sanding grip that was roughly the same size.
And now was my absolute favorite part (not), sanding. The board was pretty smooth already since I ran it through the thickness planer so I started off with 120 grit paper then worked down to 220.
Then the final touch before throwing on a finish was to round over the edges over at the router table. I set the height of the bit then started running all edges through, completely forgetting about the handles on the sides, which meant when I got to the handle, the bearing fell into the void of it and ate into the shape of the body.
As soon as I heard it my stomach dropped. I'll be honest and say I was pretty disappointed in my mistake but decided to finish and keep the board anyways. It gives it a story, right?
So moving on to finishing, I first wiped the board down with water to get the grain of the wood to raise up. Once that was dry, I lightly sanded the board using 400 grit paper until everything was baby-smooth again. If you skip this step, then the grain will raise up the first time your board gets wet, and it won't feel smooth.
For a finish, I used standard cutting board finish since it's food safe and won't go rancid. I applied 3 coats right off the bat using a paper towel to spread it around the board, it's edges, and the juice groove.
Even with my little hiccup, I am completely in love with how this came out. If you're interested, I do have templates available for sale HERE. If you're looking to make a batch for gifts, or for sale, these templates will help you do it must faster.


The Cuban Vireo is endemic to Cuba and where it is sedentary. It frequents forested areas and bushy thickets at low elevation.
Four subspecies share the Cuban range, with two races on Cuba Island and two others on small nearby islands.
The Cuban Vireo is common throughout the range, and currently, this species is not globally threatened.
The Cuban Vireo of nominate race has dull olive-grey crown, ear-coverts and back. It has a pale yellow to creamy-white eye patch extending from lores to behind the eye. The cheeks are pale yellowish-grey.
On the upperwing, primaries and secondaries are pale brownish-grey. Median and greater coverts are similar but with pale tips forming two narrow wingbars. The tail is dull brownish-grey.
On the underparts, throat and breast are pale yellowish. The belly is paler, but the sides are greyer. The undertail-coverts are dull yellow-grey.
The bill is grey-brown on the upper mandible and paler below. We can see a small hook at tip. The eyes are dark brown to dark reddish-brown. Legs and feet are bluish-grey.
Male and female are similar, but some individuals can be yellower.
The juvenile resembles adult but it is duller.
The Cuban Vireo has four subspecies.
V.g. gundlachii is on Cuba except SE, and I of Pines.
V.g. sanfelipensis is found on Cayo Real, W of I of Pines. This race has paler underparts, especially on chin and throat that are mostly whitish.
V.g. magnus occurs on Cayo Cantiles, E of I of Pines. This one is larger with longer wings and tail. The upperparts are less olivaceous, and it has paler yellow underparts.
V.g. orientalis is found in SE Cuba, E of Camagüey. This race is greyer than others, but it has paler underparts.
The Cuban Vireo frequents forest edges, thickets, dense scrub and bushes at low elevation, but sometimes, it can be seen higher in hills and mountains. It is often found in coastal regions. It is able to live in degraded forests, finding suitable feeding and nesting habitats in areas with scrubs and shrubs.
The Cuban Vireo gives a high, repeated call "wi-chíví, wi-chíví…". The alarm call is a guttural "Shruo", typical of numerous vireo species. During the courtship displays, it gives a rapid, repeated "wheet".
The Cuban Vireo feeds mainly on insects, fruits and small lizards. It usually forages in pairs throughout the territory and often joins mixed flocks with Yellow-headed Warbler and Oriente Warbler.
It forages in the lower parts of the vegetation. It swallows the smaller prey whole, but larger items (crickets) are hold with a foot, while the bird uses its hooked bill to rip bits off.
It forages among the foliage by making short flights or leaps from twigs to leaf clusters.
During the breeding season, the Cuban Vireo is strongly territorial and often attacks intruders, even conspecifics. It flies at them and makes bodily contact.
Both male and female use some visual displays such as raising the crest feathers, or spreading and lowering the tail. They also perform gaping with open bill, in order to expose the colours of the mouth.
The Cuban Vireo is sedentary. It has broad, rounded wings and only performs short flights.
The breeding season usually takes place between March and August, with peak in April/June.
The Cuban Vireo builds the nest well hidden among the thick vegetation, tangles or vines. It is a cup-shaped nest made with grasses, mosses, lichens and plant fibres, held together with spider web. This small structure is packed very tightly with plant material. It is placed between lateral forks of twigs and supported by the rims. Both mates build the nest.
The female lays 3 white eggs with small dark spots. She incubates during 13-15 days, but the male may help sometimes. The chicks are fed by both parents. They leave the nest at 10-14 days old, and remain for some time with the adults, about two weeks.
The Cuban Vireo has restricted range in Cuba and nearby islands. It is usually common throughout the range in suitable habitats.
However, the subspecies "magnus" and "sanfelipensis" are vulnerable to violent climate events such as hurricanes, because they have very small ranges.
The population has not been quantified, but it is suspected to be decreasing, due to deforestation and illegal hunting.
But in spite of these threats, the Cuban Vireo is currently evaluated as Least Concern.


text:
Cybersecurity: The Importance of Being Certified (and Competitive)
On March 12, 2019 members of the European Parliament approved the Cybersecurity Act. It establishes an EU-wide certification scheme for products, processes and services to guarantee they meet common minimal EU cybersecurity requirements.
Giovedì, 18 aprile, 2019 - 09:30
Leggi tutto su Cybersecurity: The Importance of Being Certified (and Competitive)
The EU Cybersecurity Act: When the Going Gets Tough, the Tough Get Going
"Cyber-attacks can be more dangerous to the stability of democracies and economies than guns and tanks", the EU Commission President Jean-Claude Juncker stated in 2017. The Cybersecurity Act entered into force on June 27, 2019, as a key step towards further strenghtening the European Union's posture in cyberspace. The implications of this Act go beyond the mere technical dimension: they directly impact the private sector, the establishment of a single digital market, and the projection of EU as a digital power vis à vis other international actors.
Giovedì, 27 giugno, 2019 - 10:30
Leggi tutto su The EU Cybersecurity Act: When the Going Gets Tough, the Tough Get Going
Room for New Parnterships: A Chinese View on Europe's Cybersecurity
With the rapid development and wide application of Information and Communication Technology (ICT), it is urgent as well as challenging for all countries to mitigate threats, maintain stability and improve security in cyberspace. As one of the most advanced actors in the international digital world, the EU has made enormous efforts and achieved astonishing progress in this regard by establishing a comprehensive and systematic cyber strategy.
Leggi tutto su Room for New Parnterships: A Chinese View on Europe's Cybersecurity
The EU Approach to Cyberspace: A View from Washington
Reform of cybersecurity in Europe has been high on the agenda of EU institutions and the member states since September 2017. On March 12, members of the European Parliament adopted the EU Cybersecurity Act.
Martedì, 16 aprile, 2019 - 13:15
Leggi tutto su The EU Approach to Cyberspace: A View from Washington
Europe's Cybersecurity Puzzle: The Role of Industry
The Cybersecurity Act entered into force on the 27 of June 2019 is just the last act (for now) in a flurry of policy and operations- level activities carried out in recent years by the European Commission, by agencies and in member states regarding cybersecurity. This high level of activity is based on several reasons. On the one hand, cyber threats have finally been recognized as a major hazard and something that will not go away if left alone, with numbers on the growth and financial impacts of "hard" cyber risks that continue to be staggering.
Leggi tutto su Europe's Cybersecurity Puzzle: The Role of Industry
ENISA: The EU's Guide to the Cybergalaxy
With approval by the European Parliament, which took place last March 12 with 586 votes in favor, 44 against and 36 abstentions, the long legislative process of the so-called Cybersecurity Act, which began in September 2017, has come to its end. The Act entered into force on the 27 of June 2019 and, being a Regulation, it is effective for all member states.
Leggi tutto su ENISA: The EU's Guide to the Cybergalaxy
The (Geo)political Meaning of Europe's Cybersecurity Act
Unrest is growing in cyberspace. Cybercriminals, spies, and "hacktivists" have been inhabiting cyberspace since its inception. More recently, there has been a growing presence of state-sponsored cyber-attacks, which are often driven by espionage goals.
Mercoledì, 17 aprile, 2019 - 12:30
Leggi tutto su The (Geo)political Meaning of Europe's Cybersecurity Act
The EU and Japan: Time for a Strategic Partnership
Despite for years leaving much to be desired, the strategic relationship between Japan and the EU has recently witnessed a significant boost. With the signing of tandem economic and strategic partnership agreements at the end of 2018, relations between the great civilian powers at each of Eurasia's poles appear on the cusp of major change.
Lunedì, 15 aprile, 2019 - 18:15
Leggi tutto su The EU and Japan: Time for a Strategic Partnership
European Cybersecurity after Brexit: What is at Stake?
The clock is ticking for the United Kingdom, as we enter the final month of the two-year Article 50 negotiations period, which allows the UK to secure a Withdrawal Agreement from the European Union.
Giovedì, 14 febbraio, 2019 - 10:45
Leggi tutto su European Cybersecurity after Brexit: What is at Stake?
The Road to Georgia's EU Integration
European integration remains the top priority for the Georgian government and society at large. The integration process involves many sectors, from good governance and human rights to security, environment, and the economy.
Martedì, 7 Agosto, 2018 - 10:00
Leggi tutto su The Road to Georgia's EU Integration

redpajama_set_name: RedPajamaCommonCrawl


Resources include historic residences, commercial and government buildings, a wharf, and a lighthouse.
Derby Street, which runs parallel to Salem Harbor, retains its strong association with Salem's maritime history during the half century that Salem served as one of the leading ports of entry in the U.S. Many of the district's buildings, both residential and commercial, are directly associated with the individuals, families, trades and services that flourished as a result of the extensive foreign commerce carried on here in the 1760-1820 period.
On either side of the 1819 Custom House stand houses built for some of Salem's most prominent merchants, including Elias Hasket Derby. Further down Derby Street, the closely-built homes and shops, many dating from the pre-1800 period, accurately convey the intimate character and feeling of a Federal Era coastal community.
This district includes some of Salem's oldest buildings as well as the Salem Maritime National Historic Site, Derby Wharf and Derby Lighthouse. The district also includes one of the nation's most important historic landmarks, The House of the Seven Gables complex with its famed Turner-Ingersoll Mansion (1668) and Nathaniel Hawthorne's birthplace.


text:
New Des Moines super PAC focused on Black Lives Matter movement hosts first event
Andrea May Sahouri
Des Moines Register
Leaders of a new Des Moines-based super PAC that advocates for issues associated with the Black Lives Matter movement held its first event Monday night.
Dozens of people were attendance of the virtual roundtable — focused on the importance of voting — including both local and state leaders.
"Black people's voting rights have not been violated just now, they've always been," said Rep. Ako Abdul-Samad, D-Des Moines, who highlighted the history of slavery and Jim Crow laws, a term used to describe actions taken by white-dominated legislatures to enforce racial segregation in the 19th and early 20th centuries. "This was a system set up to make sure that Blacks did not have a right to vote."
The political action committee, No Justice, No Peace, was officially launched late last month by Des Moines-area community organizer Rob Johnson; Iowa Democratic Party Black Caucus Chair Al Womble; Eddie Mauro, former Democratic candidate for U.S. Senate; and two Mauro campaign staff members, Scott Harrington and Mark Langgin.
The super PAC plans to campaign throughout the state and push policies such as expansion of voting rights protections, legalization of marijuana as well as reforms to criminal justice, police and economic systems.
"We wanted those candidates on the ticket to know these policy changes are something we're serious about," Johnson said. "Our message is clear: You cannot ignore this. You cannot just say Black lives matter, but then push policies that do not help Black lives."
Iowa Democratic Party Black Caucus Youth Chair Sandrah Nasimiyu said one of the barriers of the youth vote is a lack of education on the voting process in schools. She worries that traditional paper ballot method of voting might be too outdated for younger generations and encourages election officials to explore online voting options.
"The youth are the power and leaders of today. ... We should feel empowered (to vote)," Nasimiyu said during Monday's event. "Understanding that you hold that power right now is so important."
Nasimiyu ended the virtual roundtable by telling supporters that what they do now will affect future generations.
"You don't want to regret this when you are 35 and trying to figure out why you're little brother, your son got shot. Why when you applied for that loan, it was denied eight times even though you got a credit score of above 700. Why your ZIP code seems to be a problem. Why your kids still come home and ask, 'Mommy, why don't they like me?"
Andrea Sahouri covers breaking news for the Des Moines Register. She can be contacted at asahouri@registermedia.com, 515-284-8247 or on Twitter at @andreamsahouri.
Your subscription makes work like this possible. Subscribe today at DesMoinesRegister.com/Deal.


text:
Polandball (znany również pod nazwą Countryball) – mem internetowy zapoczątkowany przez użytkowników niemieckiego imageboardu krautchan.net w drugiej połowie 2009 roku. Mem ma formę komiksów internetowych (często przerabianych na animacje), w którym poszczególne państwa zostały przedstawione jako kuliste postacie, często posługujące się łamanym angielskim, wyśmiewające narodowe stereotypy i relacje między państwami. Mimo satyrycznego podłoża wydźwięk hasztagu #polandball jest uważany za neutralny. Między innymi dzięki Polandball powstały Countryhumans.

Tło

Krautchan.net to niemieckojęzyczny imageboard, którego dział /int/ jest odwiedzany także przez anglojęzycznych użytkowników Internetu. Zapoczątkowanie memu Polandball zostało przypisane Brytyjczykowi z /int/ o pseudonimie Falco, który we wrześniu 2009 stworzył pierwszy mem używając Microsoft Paint, aby w ten sposób sprowokować Polaka z tego samego forum, który udzielał się pisząc łamanym angielskim. Według redaktora Wojciecha Orlińskiego, analizującego fenomen Polandballa w "Gazecie Wyborczej", w tworzenie grafik włączyli się również obecni na forum użytkownicy z Rosji.

Niektóre źródła podają także, że Polandball ma swoje źródło w wojnie toczącej się między polskimi użytkownikami internetu a "resztą świata" na łamach serwisu drawball.com. Strona ta pozwala na rysowanie przez wiele osób na kole wyświetlanym na stronie. Polscy internauci postanowili narysować tam flagę Polski z napisem "POLSKA" na środku. Gdy do akcji włączyło się setki tysięcy Polaków z serwisu społecznościowego Nasza klasa, rzecz się ostatecznie powiodła, ale potem na rysunku pojawiła się swastyka, będąca odpowiedzią "reszty świata". Historia ta miała zainspirować Falca do stworzenia pierwszego komiksu z wykorzystaniem memu Polandball.

Rozgłos
Według serwisu Google Trends zainteresowanie memem rosło, zwłaszcza od początku 2013 roku, aby na przełomie lat 2014/2015 osiągnąć swój szczyt, po czym zaczęło łagodniej opadać (stabilizując się na wartości ok. 50% zapytań z czasu szczytu). Najwięcej zapytań pochodzi z Polski oraz (kolejno) z Finlandii, Szwecji i Kanady.

Komiks Countryballs (Polandball) został opisany w pracy poświęconej fenomenowi memów internetowych i wydanej w 2013 oraz w książce o fenomenach internetowych z 2015 roku. Zjawisko memów Polandball było przedmiotem badań na Uniwersytecie Wrocławskim. Referat na ten temat został przedstawiony podczas konferencji Teksty kultury uczestnictwa, zorganizowanej przez Centrum Humanistyki Cyfrowej Instytutu Badań Literackich PAN i Komitet Nauk o Literaturze PAN, która odbyła się w 2013 roku. Referat Polandball. Dlaczego memy śmieją się z polskiej historii? wygłosił Paweł Lewandowski, który stwierdził, że ten popularny w globalnej cyberkulturze mem stanowi potencjalnie interesujący temat badań dla badaczy kultury jako forma twórczości internetowej mikrowspólnot interpretacyjnych. Zastanawiał się także, która z dwóch postaw: współ-śmiech lub oburzenie, jest właściwsza wobec tego typu zjawiska.

Polandball pojawia się jako przykład jednego z memów będących reakcją na akcję kampanii "Dlaczego nie zainwestowałeś w Polsce Wschodniej".

Tematy i wygląd

Polandball i wzorowane na nim symboliczne przedstawienia innych państw to głównie kółka w barwach ich flag. W przypadku Polski barwy są jednak odwrócone, co interpretuje się jako reakcję Falca na zarzuty o mylenie pojęć symbolizujących Polskę z symbolami innych krajów.

Komiks internetowy Polandball ukazuje Polskę, jej historię i relacje z innymi krajami oraz narodowe stereotypy, skupiając się na polskiej megalomanii oraz kompleksach. Dialogi pomiędzy countryballami są zazwyczaj pisane w łamanej angielszczyźnie i slangu internetowym, przypominającym ten używany w lolcatach. Polandball często zostaje przedstawiony, gdy łka.

W jednym z odcinków komiksu, który rozpoczynał się informacją o tym, że na Ziemię wkrótce spadnie gigantyczny meteor, wszystkie kraje przeniosły się na orbitę okołoziemską. Na Ziemi pozostała jedynie Polska, która rozpłakała się i łamaną angielszczyzną wypowiedziała frazę Poland cannot into space ("Polska nie umieć w kosmos").

Inne countryballe
W komiksach Polandball występują też inne państwa. Te komiksy także nazywają się Polandball, lecz znane są też pod nazwą Countryball.

Według Lurkmore.to swój własny rysunek ma między innymi Bawaria, osobne wizerunki zostały również stworzone dla poszczególnych stanów Ameryki, Katalonii czy Syberii. Singapur w komiksie przybrał kształt trójkąta i został nazywany "Tringapore", Bermudy także przybrały formę trójkąta i zostały nazwane "Bermudatriangle", Chile ze względu na kształt państwa przybrało formę dżdżownicy i zostało nazwane "Chileworm", Izrael otrzymał formę sześcianu (został nazwany "Israelcube"), a Kazachstan – kształt cegły (nazwa to "Kazakhbrick"). Podobnie jest również w przypadku II Rzeszy Niemieckiej, jednak tu została ona przedstawiona w postaci prostokąta (nazwa to "Reichtangle"), choć bywa, że kształt ten przyjmują inne potężne państwa.

Charakterystyka wybranych countryballi
Źródła

Przykładowe memy

Zobacz też
 Polish jokes
 personifikacje narodowe
 Efekt Streisand

Uwagi

Przypisy

Bibliografia

Linki zewnętrzne

 , wersja polska (serwis ma ogółem 26 mutacji językowych)
 Oficjalny tutorial Polandballa – wersja angielska, wersja polska
 Polandball w serwisie Knowyourmeme.com

Memy internetowe
Komiksy internetowe
Personifikacje narodowe
Stereotypy dotyczące Polski

redpajama_set_name: RedPajamaWikipedia


United Nations Peacekeeping began in 1948 when the Security Council authorized the deployment of UN military observers to the Middle East.
The mission's role was to monitor the Armistice Agreement between Israel and its Arab neighbours – an operation which became known as the United Nations Truce Supervision Organization (UNTSO).
Since then, more than 70 peacekeeping operations have been deployed by the UN. Over the years, hundreds of thousands of military personnel, as well as tens of thousands of UN police and other civilians from more than 120 countries have participated in UN peacekeeping operations.
More than 3,000 UN peacekeepers from some 120 countries have died while serving under the UN flag.
UN Peacekeeping was born at a time when Cold War rivalries frequently paralyzed the Security Council.
Peacekeeping was primarily limited to maintaining ceasefires and stabilizing situations on the ground, providing crucial support for political efforts to resolve conflict by peaceful means.
Those missions consisted of unarmed military observers and lightly armed troops with primarily monitoring, reporting and confidence-building roles.
The first two peacekeeping operations deployed by the UN were the UN Truce Supervision Organization (UNTSO) and the UN Military Observer Group in India and Pakistan (UNMOGIP). Both of these missions, which continue operating to this day, exemplified the observation and monitoring type of operation and had authorized strengths in the low hundreds. The UN military observers were unarmed.
The earliest armed peacekeeping operation was the First UN Emergency Force (UNEF I) deployed successfully in 1956 to address the Suez Crisis.
The UN Operation in the Congo (ONUC), launched in 1960, was the first large-scale mission having nearly 20,000 military personnel at its peak. ONUC demonstrated the risks involved in trying to bring stability to war-torn regions - 250 UN personnel died while serving on that mission, including the Secretary-General Dag Hammarskjold.
In the 1960s and 1970s, the UN established short-term missions in the Dominican Republic - Mission of the Representative of the Secretary-General in the Dominican Republic (DOMREP), West New Guinea (West Irian) - UN Security Force in West New Guinea( UNSF), and Yemen - UN Yemen Observation Mission (UNYOM), and started longer term deployments in Cyprus - UN Peacekeeping Force in Cyprus (UNFICYP) and the Middle East - UN Emergency Force II (UNEF II), UN Disengagement Observer Force (UNDOF) and UN Interim Force in Lebanon (UNIFIL).
In 1988, UN peacekeepers were awarded the Nobel Peace Prize. At that time, the Nobel Committee cited "the Peacekeeping Forces through their efforts have made important contributions towards the realization of one of the fundamental tenets of the United Nations. Thus, the world organization has come to play a more central part in world affairs and has been invested with increasing trust".
With the end of the Cold War, the strategic context for UN Peacekeeping changed dramatically.
The UN shifted and expanded its field operations from "traditional" missions involving generally observational tasks performed by military personnel to complex "multidimensional" enterprises. These multidimensional missions were designed to ensure the implementation of comprehensive peace agreements and assist in laying the foundations for sustainable peace.
The nature of conflicts also changed over the years. UN Peacekeeping, originally developed as a means of dealing with inter-State conflict, was increasingly being applied to intra-State conflicts and civil wars.
UN Peacekeepers were now increasingly asked to undertake a wide variety of complex tasks, from helping to build sustainable institutions of governance, to human rights monitoring, to security sector reform, to the disarmament, demobilization and reintegration of former combatants.
After the Cold War ended, there was a rapid increase in the number of peacekeeping operations. With a new consensus and a common sense of purpose, the Security Council authorized a total of 20 new operations between 1989 and 1994, raising the number of peacekeepers from 11,000 to 75,000.
Elect new governments and build democratic institutions.
The general success of earlier missions raised expectations for UN Peacekeeping beyond its capacity to deliver. This was especially true in the mid 1990's in situations when the Security Council was not able to authorize sufficiently robust mandates or provide adequate resources.
Missions were established in situations where the guns had not yet fallen silent, in areas such as the former Yugoslavia - UN Protection Force (UNPROFOR), Rwanda - UN Assistance Mission for Rwanda (UNAMIR) and Somalia - UN Operation in Somalia II (UNOSOM II), where there was no peace to keep.
The setbacks of the early and mid-1990s led the Security Council to limit the number of new peacekeeping missions and begin a process of self-reflection to prevent such failures from happening again.
The Secretary-General commissioned an independent inquiry [S/1999/1257] into the actions of the United Nations during the 1994 genocide in Rwanda and, at the request of the General Assembly, provided a comprehensive assessment [A/54/549] on the 1993-1995 events in Srebrenica in the former Yugoslavia. The circumstances that led to the UN withdrawal from Somalia were also carefully examined [S/1995/231].
In the meantime, UN peacekeepers continued their long-term operations in the Middle East, Asia and Cyprus.
Haiti - UN Support Mission in Haiti (UNSMIH) UN Transition Mission in Haiti (UNTMIH) and UN Civilian Police Mission in Haiti (MIPONUH).
At the turn of the century, the UN undertook a major exercise to examine the challenges to peacekeeping in the 1990s and introducing reform. The aim was to strengthen our capacity to effectively manage and sustain field operations.
With a greater understanding of the limits – and potential – of UN Peacekeeping, the UN was asked to perform even more complex tasks. This started in 1999 when the UN served as the administrator of both Kosovo in the former Yugoslavia - UN Interim Administration Mission in Kosovo (UNMIK), and in East Timor (now Timor-Leste) - UN Transitional Administration in East Timor (UNTAET), which was in the process of gaining independence from Indonesia.
Syria - UN Supervision Mission in Syria (UNSMIS).
Peacekeepers also returned to resume vital peacekeeping and peacebuilding operations where fragile peace had frayed, in Haiti -UN Stabilization Mission in Haiti (MINUSTAH) and the newly independent Timor-Leste - UN Integrated Mission in Timor-Leste (UNMIT).
Many of these operations have now completed their mandates, including the UN Mission in the Central African Republic and Chad (MINURCAT), UN Organization Mission in the Democratic Republic of the Congo (MONUC), UN Operation in Burundi (ONUB), UN Mission in Sierra Leone (UNAMSIL) and UN Mission in Ethiopia and Eritrea (UNMEE) and UN Mission in the Sudan (UNMIS) and UN Operation in Côte d'Ivoire (UNOCI).
In the first decade of the century, UN Peacekeeping found itself stretched like never before and increasingly called upon to deploy to remote, uncertain operating environments and into volatile political contexts.
Peacekeeping faced a varied set of challenges, including challenges to deliver on its largest, most expensive and increasingly complex missions, challenges to design and execute viable transition strategies for missions where a degree of stability has been attained, and challenges to prepare for an uncertain future and set of requirements.
By May 2010, UN Peacekeeping had entered a phase of consolidation. The numbers had, for the first time in a decade, begun to decline slightly, with the reduction of troops in UN Organization Stabilization Mission in the Democratic Republic of the Congo (MONUSCO) and the withdrawal of UN Mission in the Central African Republic and Chad (MINURCAT) at the end of 2010.
Today, a little more than 110,000 military, police and civilian staff currently serve in 14 peacekeeping missions, representing a decrease in both personnel and peacekeeping missions, as a result of peaceful transitions and the rebuilding of functioning states.
However, the reduction in personnel and peacekeeping missions in the intervening years by no means indicates that the challenges faced by the UN are diminishing. The emergence of new conflicts spreading beyond local and regional boundaries signal that the demand for field missions is expected to remain high and peacekeeping will continue to be one of the UN's most complex operational tasks.
Moreover, the political complexity facing peacekeeping operations and the scope of their mandates, including on the civilian side, remain very broad. There are strong indications that certain specialized capabilities – including police – will be in especially high demand over the coming years.
Today's multidimensional peacekeeping will continue to facilitate the political process, protect civilians, assist in the disarmament, demobilization and reintegration of former combatants; support the organization of elections, protect and promote human rights and assist in restoring the rule of law.
Peacekeeping has always been highly dynamic and has evolved in the face of new challenges.
In October 2014, the UN Secretary-General established a 17-member High-level Independent Panel on UN Peace Operations to make a comprehensive assessment of the state of UN peace operations and the emerging needs of the future. The HIPPO report, as it is known, was issued in June 2015, with key recommendations for the way forward for peace operations. In September 2015, the Secretary-General's issued his own report on the implementation of these recommendations and the future of peace operations.
For further overview of our ongoing operations, the current strategic context and priorities as well as the evolving challenges facing the peacekeeping today, please review the 20 October 2016 statements to the General Assembly's Fourth Committee by the former Under-Secretary-General for Peacekeeping Operations, Hervé Ladsous and the Under-Secretary-General for Field Operations, Atul Khare.


Watch a preview of the "Travels with Darley" Martinique PBS TV episode and a special bloopers and behind the scenes.
When our Emmy-winning team filmed for our Martinique PBS TV episode in the French Caribbean, we had a few mishaps! See what happened in our special behind the scenes video, below, and check out a preview for this episode, above.
This special half hour episode explores the French Caribbean island of Martinique, combining beautiful beaches with lush rainforests and quiet fishing villages with vibrant cultural sites. Host Darley Newman meets local guides to take a deeper dive into the top places to sun, sail, snorkel, eat, drink and enjoy eco-friendly nature and fascinating Creole culture.
Watching the sun set with a rum cocktail and fresh marlin tartare with Chef Guy Ferdinand, aka Chef Hot Pants, at Le Petibonum, a restaurant located on a black sand beach.
A visit to the "Little Pompeii of the Caribbean," Saint Pierre, the former capital of Martinique, which was wiped out by hot gas and volcanic debris in a matter of minutes!
A sailing lesson combined with snorkeling with local Delice Nouel at Ilet Madame.
Learning about Creole culture at the Emerald Estate (Domaine d'Emeraude), which cultivates tropical flora and fauna, many of which has traditional cultural significance.
Rum tasting at Depaz Distillery.
Walking along Martinique's best beaches, including Les Anses-d'Arlet and Les Salines.
An eco-friendly boat tour to visit mangroves and the island paradise of Ilet Chevalier.
An early morning fishing expedition on a black sand beach in Le Carbet using traditional techniques, called Coup de Senne.
The Vaka Band's Carnival rehearsal.
Watch "Travels with Darley: Martinique Adventures" on your local PBS TV station and Create TV.
I watched this episode in Savannah, GA on 06-01-17. Enjoyed it so much! I plan to go to Martinique for Christmas vacation. Would you please share your itinerary with me? And also, where did you stay (hotels)? Thanks!


text:
Police Chase of Stolen Car Ends in Fiery Head-On Crash
Published February 19, 2017 • Updated on February 20, 2017 at 6:57 am
A police chase of a stolen car in Newark ended in a fiery head-on crash early Sunday that injured two officers and a person in the car, police said.
The pursuit began shortly before midnight, when state police saw the car that had been reported stolen in Fairfield, Newark police said. The vehicle was being sought in connection with a recent a shooting and several robberies and carjackings in Essex County, police said.
Several law enforcement agencies and a Newark police helicopter took part in the pursuit, which ended when the car crashed head-on into an unmarked Newark police vehicle, police said.
Donald Trump 2 hours ago
Ex-Trump Casino in Atlantic City Now to Be Imploded Next Month
Powerball 1 hour ago
3 Million-Buck Powerball Tickets Sold in NJ; Lone Jackpot Winner Sold in Maryland
Four people in the car — Richard D. Williams, 39, of Newark; Terrell Norris, 28, of Newark; Nakiah Burr, 19, of East Orange; and a 16-year-old girl — were captured at the scene.
Williams was charged with aggravated assault against a police officer and weapons charges. Police said he had a loaded .38 handgun.
The other three suspects are charged with receiving stolen property and resisting arrest.
It's not clear whether any of the suspects have lawyers.
The injured officers and Williams were all treated at a hospital. All were expected to survive their injuries.
Newarkpolice officerCoralie CarlsonEssex CountyNewark police


Don't give up hope, truly believe that you will live to see the goodness of the Lord, in your life.
In this life I can keep on going, because I truly believe that I will see the goodness of the Lord as he works in my life. Major crises have the ability to shake my faith. However, it is my faith and my trust in Christ that will keep me going and get me through it. David, after suffering great loss, including the loss of a child, wrote in Psalm 27:13, "I would have despaired unless I had believed that I would see the goodness of the LORD in the land of the living" (NASB). In other words he said that he would have given up if he hadn't believed in the goodness of God. Even in those situations where life stinks and it seems dark, I'll need to believe that God is a good God. Even when everything is going wrong in your life, I can still believe in the goodness of God, and with this I can pull through. I need to know and believe that God's plan for my life is greater than the problem I'm currently going through. Then, I can share my faith in God's goodness with friends when they are going through a crisis. Friends strengthen their friends' faith. (I have a lot that I can share with others, especially given my most illness and how God has helped to heal me.) The Bible explains that there is only one place to strengthen my faith. Faith comes from knowing the Word of God. If I know the Bible well, I'm going to have great faith. If I know this book only a little, I'm going to have a little faith. If I don't know this book at all, then my faith will not be there. The Bible there has more than 7,000 promises made. However it is difficult to to claim them if I don't know them. In order to increase my faith and to able to handle the rogue winds of life, I've got to know the Bible through study, meditation, and memorization. My routine for getting to know God's word better is to spend some time each weekday morning studying scripture. I use the Daily Hope Devotional from Rick Warren (http://rickwarren.org/devotional) as a spring board for verses to review for the day. I then use biblegateway.com to look up the passage in several different translations. Using the translations, I then try to summarize the overall meaning I find in the different versions/presentations of the word to get the general idea. With this, I then formulate a bottom line (or what does this say), and then start my journalling (recording) with "what this means to me." I'll then use Rick's commentary to help further delve into the passage and make an application for my life.


text:
Q: how to make Excel/Access data have more than one quantity in a table? Sorry for the confusing question, I'm not sure how to word it right: here's a mock sample of my data
Name: Cheeseburger
Date: 1/20/2011
Stock: 30
Price: 200
Name: Hamburger
Date: 1/20/2011
Stock: 12
Price: 180
Name: Cheeseburger
Date: 1/21/2011
Stock: 31
Price: 210
...

I will have to make a table in excel or access capable of looking up the stock and price trends of a particular brand through time.
Trouble is, I have two independent variables (Stock, Price) and two known dependent variables (Name, Date).
So, I cannot use a simple table where the x axis is the name, y axis is the time, and the cells represent a quantity - each cell have to represent two quantities (Stock, Price)
Does anyone know how to do that?
Thanks.

A: Don't confuse data structure with data analysis.
Your data have four variables: name, date, stock, price, which together represent a single unit-block and so the natural way to organize them is:
Name              date  Stock Price
-----------------------------------
Cheeseburger  1/20/2011    30   200
Hamburger     1/20/2011    12   180
Cheeseburger  1/21/2011     3   210

Obviously when you have to summarize your data in a 2x2 table, you have to choose which variable titles the rows, which one titles the columns and which one gives values. But remember: first comes data structure, then come summary tables.
Are you interested in brand price trend? Build a table Name x Date with cells containing price values.
Are you interested in brand stock trend? Build a table Name x Date with cells containing stock values.

redpajama_set_name: RedPajamaStackExchange


text:
#include "pubsub_serialization_provider.h"

#include <stdlib.h>
#include <stdarg.h>
#include <dirent.h>
#include <string.h>

#include "pubsub_message_serialization_marker.h"
#include "celix_constants.h"
#include "dyn_function.h"
#include "celix_version.h"
#include "celix_utils.h"
#include "dyn_message.h"
#include "dyn_interface.h"
#include "pubsub_utils.h"
#include "celix_log_helper.h"
#include "pubsub_message_serialization_service.h"
#include "celix_shell_command.h"

#define MAX_PATH_LEN    1024

typedef enum
{
    FIT_INVALID = 0,
    FIT_DESCRIPTOR = 1,
    FIT_AVPR = 2
} descriptor_type_e;

#define L_DEBUG(...) \
    celix_logHelper_debug(provider->logHelper, __VA_ARGS__)
#define L_INFO(...) \
    celix_logHelper_info(provider->logHelper, __VA_ARGS__)
#define L_WARN(...) \
    celix_logHelper_warning(provider->logHelper, __VA_ARGS__)
#define L_ERROR(...) \
    celix_logHelper_error(provider->logHelper, __VA_ARGS__)

struct pubsub_serialization_provider {
    celix_bundle_context_t *ctx;
    celix_log_helper_t *logHelper;
    char* serializationType;

    //serialization callbacks
    celix_status_t (*serialize)(pubsub_serialization_entry_t* entry, const void* msg, struct iovec** output, size_t* outputIovLen);
    void (*freeSerializeMsg)(pubsub_serialization_entry_t* entry, struct iovec* input, size_t inputIovLen);
    celix_status_t (*deserialize)(pubsub_serialization_entry_t* entry, const struct iovec* input, size_t inputIovLen __attribute__((unused)), void **out);
    void (*freeDeserializeMsg)(pubsub_serialization_entry_t* entry, void *msg);

    //updated serialization services
    long bundleTrackerId;

    celix_shell_command_t cmdSvc;
    long cmdSvcId;

    pubsub_message_serialization_marker_t markerSvc;
    long markerSvcId;

    celix_thread_mutex_t mutex; //protects below
    celix_array_list_t *serializationSvcEntries; //key = pubsub_serialization_entry;
};

static void dfi_log(void *handle, int level, const char *file, int line, const char *msg, ...) {
    (void)level;
    va_list ap;
    pubsub_serialization_provider_t *provider = handle;
    char *logStr = NULL;
    va_start(ap, msg);
    vasprintf(&logStr, msg, ap);
    va_end(ap);
    celix_logHelper_log(provider->logHelper, CELIX_LOG_LEVEL_WARNING, "FILE:%s, LINE:%i, MSG:%s", file, line, logStr);
    free(logStr);
}

static descriptor_type_e getDescriptorType(const char* filename) {
    if (strstr(filename, ".descriptor")) {
        return FIT_DESCRIPTOR;
    }
    else if (strstr(filename, ".properties")) {
        return FIT_AVPR;
    }
    else {
        return FIT_INVALID;
    }
}

/**
 * Reads an avpr properties file. A properties file which revert to an avpr file and the usaged definition in the avpr.
 */
static bool readAvprPropertiesFile(pubsub_serialization_provider_t* provider, const char* properties_file_name, const char* root, char* avpr_fqn, char* path) {
    snprintf(path, MAX_PATH_LEN, "%s/%s", root, properties_file_name); // use path to create path to properties file
    FILE *properties = fopen(path, "r");
    if (!properties) {
        L_WARN("Could not find or open %s as a properties file in %s\n", properties_file_name, root);
        return false;
    }

    *avpr_fqn = '\0';
    *path = '\0'; //re-use path to create path to avpr file
    char *p_line = malloc(MAX_PATH_LEN);
    size_t line_len = MAX_PATH_LEN;
    while (getline(&p_line, &line_len, properties) >= 0) {
        if (strncmp(p_line, "fqn=", strlen("fqn=")) == 0) {
            snprintf(avpr_fqn, MAX_PATH_LEN, "%s", (p_line + strlen("fqn=")));
            avpr_fqn[strcspn(avpr_fqn, "\n")] = 0;
        }
        else if (strncmp(p_line, "avpr=", strlen("avpr=")) == 0) {
            snprintf(path, MAX_PATH_LEN, "%s/%s", root, (p_line + strlen("avpr=")));
            path[strcspn(path, "\n")] = 0;
        }
    }
    free(p_line);
    fclose(properties);

    if (*avpr_fqn == '\0') {
        L_WARN("File %s does not contain a fully qualified name for the parser\n", properties_file_name);
        return false;
    }

    if (*path == '\0') {
        L_WARN("File %s does not contain a location for the avpr file\n", properties_file_name);
        return false;
    }

    return true;
}

static FILE* openFileStream(pubsub_serialization_provider_t* provider, descriptor_type_e descriptorType, const char* filename, const char* root, char* avpr_fqn, char* pathOrError) {
    FILE* result = NULL;
    memset(pathOrError, 0, MAX_PATH_LEN);
    switch (descriptorType) {
        case FIT_INVALID:
            snprintf(pathOrError, MAX_PATH_LEN, "Because %s is not a valid file", filename);
            break;
        case FIT_DESCRIPTOR:
            snprintf(pathOrError, MAX_PATH_LEN, "%s/%s", root, filename);
            result = fopen(pathOrError, "r");
            break;
        case FIT_AVPR:
            if (readAvprPropertiesFile(provider, filename, root, avpr_fqn, pathOrError)) {
                result = fopen(pathOrError, "r");
            }
            break;
        default:
            L_WARN("Unknown file input type, returning NULL!\n");
            break;
    }

    return result;
}

static unsigned int pubsub_serializationProvider_getMsgId(pubsub_serialization_provider_t* provider __attribute__((unused)), dyn_message_type *msg) {
    unsigned int msgId = 0;

    char *msgName = NULL;
    dynMessage_getName(msg, &msgName);

    char *msgIdStr = NULL;
    int rv = dynMessage_getAnnotationEntry(msg, "msgId", &msgIdStr);
    if (rv == CELIX_SUCCESS && msgIdStr != NULL) {
        // custom msg id passed, use it
        long customMsgId = strtol(msgIdStr, NULL, 10);
        if (customMsgId > 0) {
            msgId = (unsigned int) customMsgId;
        }
    }
    if (msgId == 0) {
        msgId = celix_utils_stringHash(msgName);
    }

    return msgId;
}

static dyn_message_type* pubsub_serializationProvider_parseDfiDescriptor(pubsub_serialization_provider_t* provider, FILE* stream, const char* entryPath) {
    dyn_message_type *msg = NULL;
    int rc = dynMessage_parse(stream, &msg);
    if (rc != 0 || msg == NULL) {
        L_WARN("Cannot parse message from descriptor from entry %s.\n", entryPath);
        return NULL;
    }

    char *msgName = NULL;
    rc += dynMessage_getName(msg, &msgName);

    version_pt msgVersion = NULL;
    rc += dynMessage_getVersion(msg, &msgVersion);

    if (rc != 0 || msgName == NULL || msgVersion == NULL) {
        L_WARN("Cannot retrieve name and/or version from msg, using entry %s.\n", entryPath);
        dynMessage_destroy(msg);
        return NULL;
    }

    return msg;
}

static bool pubsub_serializationProvider_isDescriptorInterface(pubsub_serialization_provider_t* provider, FILE* stream) {
    dyn_interface_type *msg = NULL;
    bool isInterface = false;

    int rc = dynInterface_parse(stream, &msg);
    if (rc == 0 && msg != NULL) {
        isInterface = true;
    }
    dynInterface_destroy(msg);
    fseek(stream, 0, SEEK_SET);

    return isInterface;
}

//TODO FIXME, see #158
//
//    static dyn_message_type* pubsub_serializationProvider_parseAvprDescriptor(pubsub_serialization_provider_t* provider, FILE* stream, const char *entryName, const char* fqn) {
//
//    //dyn_message_type* msgType = dynMessage_parseAvpr(file_ptr, fqn);
//    dyn_message_type* msgType = NULL;
//
//    if (!msgType) {
//        L_WARN("[json serializer] Cannot parse avpr file '%s'\n", fqn);
//        return -1;
//    }
//
//    dyn_type* type;
//    dynMessage_getMessageType(msgType, &type);
//
//    const char *msgName = dynType_getName(type);
//
//    version_pt msgVersion = NULL;
//    celix_status_t s = version_createVersionFromString(dynType_getMetaInfo(type, "version"), &msgVersion);
//
//    if (s != CELIX_SUCCESS || !msgName) {
//        L_WARN("[json serializer] Cannot retrieve name and/or version from msg\n");
//        if (s == CELIX_SUCCESS) {
//            version_destroy(msgVersion);
//        }
//        return -1;
//    }
//
//    unsigned int msgId = 0;
//    const char *msgIdStr = dynType_getMetaInfo(type, "msgId");
//    if (msgIdStr != NULL) {
//        // custom msg id passed, use it
//        long customMsgId = strtol(msgIdStr, NULL, 10);
//        if (customMsgId > 0)
//            msgId = (unsigned int) customMsgId;
//    }
//
//    if (msgId == 0) {
//        msgId = utils_stringHash(msgName);
//    }
//
//
//
//    return 0;
//}
//}

/**
 * Check if a pubsub serialization entry is already present (exact path)
 *
 * @return true if the entry is a already present
 */
static bool pubsub_serializationProvider_alreadyAddedEntry(pubsub_serialization_provider_t* provider, pubsub_serialization_entry_t* entry) {
    for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
        pubsub_serialization_entry_t *visit = celix_arrayList_get(provider->serializationSvcEntries, i);
        if (celix_utils_stringEquals(visit->readFromEntryPath, entry->readFromEntryPath)) {
            return true;
        }
    }
    return false;
}

/**
 * Validates an pubsub serialization entry and check if this is a new unique entry.
 *
 * Checks whether the entry is valid. Specifically checks:
 *  - If there is not already an entry with the same msg fqn, but a different msg id.
 *  - If there is not already an entry with the same msg id, but a different msg fqn.
 *  - If there is not already an entry for the message with a different versions. (this is not supported).
 *  - If there is not already an entry for the message with a different descriptor content.
 *
 * Logs error if msg id clashes or versions are different.
 * Logs warning if descriptors are different.
 *
 * @return true if the entry is a new (unique) entry.
 */
static bool pubsub_serializationProvider_validateEntry(pubsub_serialization_provider_t* provider, pubsub_serialization_entry_t* entry) {
    bool unique = true;

    celixThreadMutex_lock(&provider->mutex);
    for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
        pubsub_serialization_entry_t* visit = celix_arrayList_get(provider->serializationSvcEntries, i);
        if (visit->msgId == entry->msgId || strncmp(visit->msgFqn, entry->msgFqn, 1024*1024) == 0) {
            unique = false; //already have a descriptor with the same id or fqn. check if valid
            visit->nrOfTimesRead += 1;
            if (visit->msgId == entry->msgId && strncmp(visit->msgFqn, entry->msgFqn, 1024*1024) != 0) {
                L_ERROR("Error adding descriptor %s. Found msg types with same msg id, but different msg fqn. Msg id is %d, but found fully qualified names are '%s' and '%s'. Not adding descriptor with msg fqn %s.",
                        entry->readFromEntryPath, entry->msgId, entry->msgFqn, visit->msgFqn, entry->msgFqn);
                entry->invalidReason = "msg id clash";
                entry->valid = false;
            } else if (strncmp(visit->msgFqn, entry->msgFqn, 1024*1024) == 0 && entry->msgId != visit->msgId) {
                L_ERROR("Error adding descriptor %s. Found msg types with same fqn, but different msg ids. Msg fqn is %s, but found msg ids are '%d' and '%d'. Not adding descriptor with msg id %d.",
                        entry->readFromEntryPath, entry->msgFqn, entry->msgId, visit->msgId, entry->msgId);
                entry->invalidReason = "msg fqn clash";
                entry->valid = false;
            } else if (celix_version_compareTo(visit->msgVersion, entry->msgVersion) != 0) {
                L_ERROR("Error adding descriptor %s. Found two different version for msg %s. This is not supported, please align used versions between bundles!. Versions found %s and %s. Not adding descriptor with version %s.",
                        entry->readFromEntryPath, entry->msgFqn, entry->msgVersionStr, visit->msgVersionStr, entry->msgVersionStr);
                entry->invalidReason = "different versions for the same msg type";
                entry->valid = false;
            } else if (strncmp(visit->descriptorContent, entry->descriptorContent, 1024*1014*10) != 0) {
                L_ERROR("Error adding descriptor %s. Added descriptor content is different than existing content. Existing: '%s', added: %s.", entry->readFromEntryPath, entry->descriptorContent, visit->descriptorContent);
                entry->invalidReason = "different versions for the same msg type";
                entry->valid = false;
            }
        }
    }
    celixThreadMutex_unlock(&provider->mutex);

    return unique;
}

static void pubsub_serializationProvider_registerSerializationEntry(pubsub_serialization_provider_t* provider, pubsub_serialization_entry_t* entry) {
    if (entry->svcId == -1L) {
        celix_properties_t* props = celix_properties_create();
        celix_properties_set(props, PUBSUB_MESSAGE_SERIALIZATION_SERVICE_MSG_FQN_PROPERTY, entry->msgFqn);
        celix_properties_set(props, PUBSUB_MESSAGE_SERIALIZATION_SERVICE_MSG_VERSION_PROPERTY, entry->msgVersionStr);
        celix_properties_setLong(props, PUBSUB_MESSAGE_SERIALIZATION_SERVICE_MSG_ID_PROPERTY, (long)entry->msgId);
        celix_properties_set(props, PUBSUB_MESSAGE_SERIALIZATION_SERVICE_SERIALIZATION_TYPE_PROPERTY, provider->serializationType);

        celix_service_registration_options_t opts = CELIX_EMPTY_SERVICE_REGISTRATION_OPTIONS;
        opts.svc = &entry->svc;
        opts.serviceName = PUBSUB_MESSAGE_SERIALIZATION_SERVICE_NAME;
        opts.serviceVersion = PUBSUB_MESSAGE_SERIALIZATION_SERVICE_VERSION;
        opts.properties = props;
        entry->svcId = celix_bundleContext_registerServiceWithOptions(provider->ctx, &opts);
    }
}

static void pubsub_serializationProvider_parseDescriptors(pubsub_serialization_provider_t* provider, const char *root, long bndId) {
    char fqn[MAX_PATH_LEN];
    char pathOrError[MAX_PATH_LEN];
    const char* entry_name = NULL;
    descriptor_type_e descriptorType;

    const struct dirent *entry = NULL;
    DIR* dir = opendir(root);
    if (dir) {
        entry = readdir(dir);
    }

    for (; entry != NULL; entry = readdir(dir)) {
        FILE* stream = NULL;
        entry_name = entry->d_name;
        descriptorType = getDescriptorType(entry_name);
        if (descriptorType != FIT_INVALID) {
            L_DEBUG("Parsing entry '%s'\n", entry_name);
            stream = openFileStream(provider, descriptorType, entry_name, root, /*out*/fqn, /*out*/pathOrError);
            if (!stream) {
                L_WARN("Cannot open descriptor file: '%s'\n", pathOrError);
            }
        }

        if (!stream) {
            continue; // Go to next entry in directory
        }

        char *entryPath = NULL;
        asprintf(&entryPath, "%s/%s", root, entry_name);

        dyn_message_type *msgType = NULL;
        if (descriptorType == FIT_DESCRIPTOR) {
            if(!pubsub_serializationProvider_isDescriptorInterface(provider, stream)) {
                msgType = pubsub_serializationProvider_parseDfiDescriptor(provider, stream, entry_name);
            } else {
                L_DEBUG("Ignoring interface file");
            }
        } else if (descriptorType == FIT_AVPR) {
            L_DEBUG("Ignoring avpr files for now, needs fixing!");
            //msgType = pubsub_serializationProvider_parseAvprDescriptor(provider, stream, entry_name, /*TODO FQN*/fqn);
        } else {
            L_ERROR("Unexpected descriptor type for entry %s.", entryPath);
        }

        if (msgType == NULL) {
            free(entryPath);
            fclose(stream);
            continue;
        }

        fseek(stream, 0L, SEEK_END);
        long streamSize = ftell(stream);
        char *membuf = malloc(streamSize + 1);
        rewind(stream);
        fread(membuf, streamSize, 1, stream);
        fclose(stream);
        membuf[streamSize] = '\0';

        celix_version_t *msgVersion = NULL;
        char *msgFqn = NULL;
        dynMessage_getVersion(msgType, &msgVersion);
        dynMessage_getName(msgType, &msgFqn);
        unsigned int msgId = pubsub_serializationProvider_getMsgId(provider, msgType);

        pubsub_serialization_entry_t* serEntry = calloc(1, sizeof(*serEntry));
        serEntry->log = provider->logHelper;
        serEntry->descriptorContent = membuf;
        serEntry->msgFqn = msgFqn;
        serEntry->msgVersion = msgVersion;
        serEntry->msgVersionStr = celix_version_toString(msgVersion);
        serEntry->msgId = msgId;
        serEntry->msgType = msgType;
        serEntry->readFromBndId = bndId;
        serEntry->readFromEntryPath = entryPath;
        serEntry->nrOfTimesRead = 1;
        serEntry->valid = true;
        serEntry->invalidReason = "";
        serEntry->svc.handle = serEntry;
        serEntry->svc.serialize = (void*)provider->serialize;
        serEntry->svc.freeSerializedMsg = (void*)provider->freeSerializeMsg;
        serEntry->svc.deserialize = (void*)provider->deserialize;
        serEntry->svc.freeDeserializedMsg = (void*)provider->freeDeserializeMsg;
        serEntry->svcId = -1L;

        if (pubsub_serializationProvider_alreadyAddedEntry(provider, serEntry)) {
            L_WARN("Skipping entry %s. Exact entry already present!. Double event triggered?", serEntry->readFromEntryPath);
            free(serEntry->descriptorContent);
            free(serEntry->readFromEntryPath);
            free(serEntry->msgVersionStr);
            dynMessage_destroy(serEntry->msgType);
            free(serEntry);
            continue;
        }

        bool unique = pubsub_serializationProvider_validateEntry(provider, serEntry);
        if (unique && serEntry->valid) { //note only register if unique and valid
            L_DEBUG("Adding message serialization entry for msg %s with id %d and version %s", serEntry->msgFqn, serEntry->msgId, serEntry->msgVersion);
            pubsub_serializationProvider_registerSerializationEntry(provider, serEntry);
        }

        celixThreadMutex_lock(&provider->mutex);
        if (unique || !serEntry->valid) { //add all unique entries and ! invalid entries. The invalid entries are added to support debugging.
            celix_arrayList_add(provider->serializationSvcEntries, serEntry);
        } else {
            free(serEntry->descriptorContent);
            free(serEntry->readFromEntryPath);
            free(serEntry->msgVersionStr);
            dynMessage_destroy(serEntry->msgType);
            free(serEntry);
        }
        celixThreadMutex_unlock(&provider->mutex);
    }

    if (dir) {
        closedir(dir);
    }
}

static void pubsub_serializationProvider_printEntryDetails(pubsub_serialization_provider_t* provider, FILE *outStream, pubsub_serialization_entry_t *entry) {
    char *bndName = celix_bundleContext_getBundleSymbolicName(provider->ctx, entry->readFromBndId);
    fprintf(outStream, "|- %20s = %s\n", "msg fqn", entry->msgFqn);
    fprintf(outStream, "|- %20s = %d (0x8%x)\n", "msg id", entry->msgId, entry->msgId);
    fprintf(outStream, "|- %20s = %s\n", "msg vesion", entry->msgVersionStr);
    fprintf(outStream, "|- %20s = %li\n", "svc id", entry->svcId);
    fprintf(outStream, "|- %20s = %s (bundle id %li)\n", "read from bundle", bndName, entry->readFromBndId);
    fprintf(outStream, "|- %20s = %s\n", "bundle entry name", entry->readFromEntryPath);
    fprintf(outStream, "|- %20s = %lu\n", "nr of times found", (long unsigned int) entry->nrOfTimesRead);
    fprintf(outStream, "|- %20s = %s\n", "valid", entry->valid ? "true" : "false");
    if (!entry->valid) {
        fprintf(outStream, "|- %20s = %s\n", "invalid reason", entry->invalidReason);
    }
    fprintf(outStream, "|- %20s:\n", "descriptor");
    fprintf(outStream, "%s\n", entry->descriptorContent);
    free(bndName);
}

bool pubsub_serializationProvider_executeCommand(void *handle, const char *commandLine , FILE *outStream, FILE *errorStream  __attribute__((unused))) {
    pubsub_serialization_provider_t* provider = handle;

    bool verbose = false;
    bool invalids = false;
    unsigned int msgId = 0;
    const char *msgFqn = NULL;

    //parse command line
    char *line = celix_utils_strdup(commandLine);
    char *lasts = NULL;
    // skip first argument since this is the command
    strtok_r(line," ", &lasts);
    char* tok = strtok_r(NULL, " ", &lasts);

    if (tok != NULL && strncmp("invalids", tok, 32) == 0) {
        invalids = true;
    } else if (tok != NULL && strncmp("verbose", tok, 32) == 0) {
        verbose = true;
    } else if (tok != NULL) {
        errno = 0;
        msgId = strtol(tok, NULL, 10);
        if (errno == EINVAL) {
            msgId = 0;
            msgFqn = tok;
        }
    }

    if (msgId != 0 || msgFqn != NULL) {
        celixThreadMutex_lock(&provider->mutex);
        bool match = false;
        for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
            pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
            if (msgId != 0 && msgId == entry->msgId) {
                match = true;
            } else if (msgFqn != NULL && strncmp(msgFqn, entry->msgFqn, 1024*1024) == 0) {
                match = true;
            }
            if (match) {
                fprintf(outStream, "%s message serialization service info:\n", provider->serializationType);
                pubsub_serializationProvider_printEntryDetails(provider, outStream, entry);
                break;
            }
        }
        celixThreadMutex_unlock(&provider->mutex);
    } else {
        celixThreadMutex_lock(&provider->mutex);
        if (celix_arrayList_size(provider->serializationSvcEntries) == 0) {
            fprintf(outStream, "No %s message serialization services available.\n", provider->serializationType);
        } else if (invalids) {
            fprintf(outStream, "%s invalid message serialization services: \n", provider->serializationType);
            size_t count = 0;
            for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
                pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
                if (!entry->valid) {
                    fprintf(outStream, "|- entry nr          : %d\n", i + 1);
                    pubsub_serializationProvider_printEntryDetails(provider, outStream, entry);
                    fprintf(outStream, "\n");
                    count++;
                }
            }
            if (count == 0) {
                fprintf(outStream, "No invalid message serialization entries found!\n");
            }
        } else {
            fprintf(outStream, "%s message serialization services: \n", provider->serializationType);
            for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
                pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
                if (verbose) {
                    fprintf(outStream, "|- entry nr          : %d\n", i + 1);
                    pubsub_serializationProvider_printEntryDetails(provider, outStream, entry);
                    fprintf(outStream, "\n");
                } else {
                    fprintf(outStream, "|- entry nr %02d: msg id=%d, msg fqn=%s, msg version = %s, valid = %s\n", i + 1, entry->msgId, entry->msgFqn, entry->msgVersionStr, entry->valid ? "true" : "false");
                }
            }
        }
        celixThreadMutex_unlock(&provider->mutex);
    }

    free(line);
    return true;
}

void pubsub_serializationProvider_onInstalledBundle(void *handle, const celix_bundle_t *bnd) {
    pubsub_serialization_provider_t* provider = handle;
    char *descriptorsDir = pubsub_getMessageDescriptorsDir(provider->ctx, bnd);
    if (descriptorsDir != NULL) {
        pubsub_serializationProvider_parseDescriptors(provider, descriptorsDir, celix_bundle_getId(bnd));
        free(descriptorsDir);
    }
}

pubsub_serialization_provider_t *pubsub_serializationProvider_create(
        celix_bundle_context_t *ctx,
        const char* serializationType,
        bool backwardsCompatible,
        long serializationServiceRanking,
        celix_status_t (*serialize)(pubsub_serialization_entry_t* entry, const void* msg, struct iovec** output, size_t* outputIovLen),
        void (*freeSerializeMsg)(pubsub_serialization_entry_t* entry, struct iovec* input, size_t inputIovLen),
        celix_status_t (*deserialize)(pubsub_serialization_entry_t* entry, const struct iovec* input, size_t inputIovLen __attribute__((unused)), void **out),
        void (*freeDeserializeMsg)(pubsub_serialization_entry_t* entry, void *msg)) {
    pubsub_serialization_provider_t* provider = calloc(1, sizeof(*provider));
    provider->ctx = ctx;
    celixThreadMutex_create(&provider->mutex, NULL);
    provider->serializationSvcEntries = celix_arrayList_create();

    provider->serializationType = celix_utils_strdup(serializationType);
    provider->serialize = serialize;
    provider->freeSerializeMsg = freeSerializeMsg;
    provider->deserialize = deserialize;
    provider->freeDeserializeMsg = freeDeserializeMsg;
    provider->logHelper = celix_logHelper_create(ctx, "celix_pubsub_serialization_provider");

    dynFunction_logSetup(dfi_log, provider, 1);
    dynType_logSetup(dfi_log, provider, 1);
    dynCommon_logSetup(dfi_log, provider, 1);

    {
        //Start bundle tracker and register pubsub_message_serialization services
        celix_bundle_tracking_options_t opts = CELIX_EMPTY_BUNDLE_TRACKING_OPTIONS;
        opts.callbackHandle  = provider;
        opts.onInstalled = pubsub_serializationProvider_onInstalledBundle;
        opts.includeFrameworkBundle = true;
        provider->bundleTrackerId = celix_bundleContext_trackBundlesWithOptions(ctx, &opts);
    }

    {
        //Register shell command to query serializers
        provider->cmdSvc.handle = provider;
        provider->cmdSvc.executeCommand = pubsub_serializationProvider_executeCommand;

        char *name = NULL;
        asprintf(&name,"celix::%s_message_serialization", provider->serializationType);
        char *usage = NULL;
        asprintf(&usage,"celix::%s_message_serialization [verbose | invalids | <msg id> | <msg fqn>]", provider->serializationType);

        celix_properties_t* props = celix_properties_create();
        provider->cmdSvc.handle = provider;
        celix_properties_set(props, CELIX_SHELL_COMMAND_NAME, name);
        celix_properties_set(props, CELIX_SHELL_COMMAND_USAGE, usage);
        celix_properties_set(props, CELIX_SHELL_COMMAND_DESCRIPTION, "list available json message serialization services or provide detailed information about a serialization service.");
        celix_service_registration_options_t opts = CELIX_EMPTY_SERVICE_REGISTRATION_OPTIONS;
        opts.svc = &provider->cmdSvc;
        opts.serviceName = CELIX_SHELL_COMMAND_SERVICE_NAME;
        opts.serviceVersion = CELIX_SHELL_COMMAND_SERVICE_VERSION;
        opts.properties = props;
        provider->cmdSvcId = celix_bundleContext_registerServiceWithOptions(ctx, &opts);

        free(name);
        free(usage);
    }

    {
        //Register pubsub_message_serialization_marker service to indicate the availability of this message serialization type.
        celix_properties_t* props = celix_properties_create();
        provider->markerSvc.handle = provider;
        celix_properties_set(props, PUBSUB_MESSAGE_SERIALIZATION_MARKER_SERIALIZATION_TYPE_PROPERTY, provider->serializationType);
        celix_properties_setBool(props, PUBSUB_MESSAGE_SERIALIZATION_MARKER_SERIALIZATION_BACKWARDS_COMPATIBLE, backwardsCompatible);
        celix_service_registration_options_t opts = CELIX_EMPTY_SERVICE_REGISTRATION_OPTIONS;
        opts.svc = &provider->markerSvc;
        opts.serviceName = PUBSUB_MESSAGE_SERIALIZATION_MARKER_NAME;
        opts.serviceVersion = PUBSUB_MESSAGE_SERIALIZATION_MARKER_VERSION;
        opts.properties = props;
        provider->markerSvcId = celix_bundleContext_registerServiceWithOptions(ctx, &opts);
    }

    return provider;
}

void pubsub_serializationProvider_destroy(pubsub_serialization_provider_t* provider) {
    if (provider != NULL) {
        celix_bundleContext_unregisterService(provider->ctx, provider->markerSvcId);

        celix_bundleContext_stopTracker(provider->ctx, provider->bundleTrackerId);
        celix_bundleContext_unregisterService(provider->ctx, provider->cmdSvcId);

        celixThreadMutex_lock(&provider->mutex);
        for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
            pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
            celix_bundleContext_unregisterService(provider->ctx, entry->svcId);
            if (entry->freeUserData) {
                entry->freeUserData(entry->userData);
            }
            free(entry->descriptorContent);
            free(entry->readFromEntryPath);
            free(entry->msgVersionStr);
            dynMessage_destroy(entry->msgType);
            free(entry);
        }
        celix_arrayList_destroy(provider->serializationSvcEntries);
        celixThreadMutex_unlock(&provider->mutex);

        celixThreadMutex_destroy(&provider->mutex);

        celix_logHelper_destroy(provider->logHelper);

        free(provider->serializationType);
        free(provider);
    }
}

size_t pubsub_serializationProvider_nrOfEntries(pubsub_serialization_provider_t* provider) {
    size_t count = 0;
    celixThreadMutex_lock(&provider->mutex);
    for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
        pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
        if (entry->valid) {
            ++count;
        }
    }
    celixThreadMutex_unlock(&provider->mutex);
    return count;
}

size_t pubsub_serializationProvider_nrOfInvalidEntries(pubsub_serialization_provider_t* provider) {
    size_t count = 0;
    celixThreadMutex_lock(&provider->mutex);
    for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
        pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
        if (!entry->valid) {
            ++count;
        }
    }
    celixThreadMutex_unlock(&provider->mutex);
    return count;
}

celix_log_helper_t* pubsub_serializationProvider_getLogHelper(pubsub_serialization_provider_t *provider) {
    return provider->logHelper;
}

redpajama_set_name: RedPajamaGithub


text:
Pink Floyd stream video preview of The Later Years box set
Pink Floyd are streaming an unboxing video as the latest preview to the November 29 release of a new box set entitled "The Later Years 1987-2019."
Serving as a companion to 2016's "The Early Years 1965–1972", the new 5-CD/6-Blu-ray/5-DVD package includes an updated version of 1987's "A Momentary Lapse Of Reason", an expanded edition of 1998's live album, "Delicate Sound Of Thunder", a series of 1987 & 1994 live recordings & unreleased studio recordings, and full versions of the group's 1989 Venice Concert and 1990 appearance at Knebworth.
Among the DVD/Blu-ray material in the package is a restored and remixed concert film for "Delicate Sound Of Thunder", a restored and re-edited edition of the 1995 live set "Pulse", and a number of various unreleased live films, music videos and screen films.
"Pink Floyd: The Later Years 1987-2019" will also be available in a 2LP / 1CD 'Highlights' package that comes in a gatefold sleeve (for both CD and 2LP), while each will contain a 24-page booklet containing previously unseen and rare photos.
Pink Floyd stream One Slip 2019 remix from The Later Years box set
VIDEO: Pink Floyd stream Live 8 reunion performance
VIDEO: Pink Floyd stream Money 1994 concert film
VIDEO: Roger Waters previews 1977 Pink Floyd classic from Us And Them concert film
Search Pink Floyd at hennemusic
Labels: David Gilmour, Pink Floyd


In 1 Corinthians 11:17-34, Paul describes an extremely dysfunctional church event. When the church gathered to observe the Lord's Supper, there were divisions and factions (v. 18-19) due to the fact that people were not sharing food with those who were hungry and were eating before the others arrived (vv. 21, 33-34). What could have possessed them to act in such an unloving way during one of the holiest events in the life of their church?
In his book St. Paul's Corinth: Texts and Archaeology, Jerome Murphy-O'Connor suggests a historical context which could help explain this passage. His suggestion centers around the fact that wealthy homes in that culture typically had two public areas: a room just inside the entrance called an atrium and a dining room called a triclinium.
Our picture of the week is an example of an atrium found in one of the houses at Pompeii. This photo comes from Volume 14 of the revised and expanded version of the Pictorial Library of Bible Lands, which focuses on Italy and Malta. The photo is entitled, "Pompeii House of Sallust Atrium." An atrium typically had a a rectangular pool in the center of the room called an impluvium.
The reconstruction is hypothetical, but no scenario has been suggested which so well explains the details of 1 Cor. 11:17-34. The admonition "wait for one another" (v. 34) means that prolambano in v. 21 necessarily has a temporal connotation; some began to eat before others. Since these possessed houses with plenty to eat and drink (vv. 22, 34), they came from the wealthy section of the community and might have made a contribution in kind to the community meal. This, they felt, gave them the right to think of it as 'theirs' (to idion deiphon). Reinforced by the Roman custom they would then have considered it their due to appropriate the best portions for themselves. Such selfishness would necessarily include a tendency to take just a little more, so that it might happen that nothing was left for the 'have-nots' (v. 22), who in their hunger had to content themselves with the bread and wine provided for the Eucharist. However, as Paul is at pains to point out, under such conditions no Eucharist is possible (v. 20).
Excerpt is taken from Jerome Murphy-O'Connor, St. Paul's Corinth: Texts and Archaeology, Good News Studies, vol. 6 (Wilmington, DE: Michael Glazier, Inc, 1983), 153-161, and can be purchased here. This and other photos of Pompeii are included in Volume 14 of the Pictorial Library of Bible Lands and can be purchased here. More information on Pompeii and additional photos (including another atrium) can be found on the BiblePlaces website here.


Then, whenever your recipe asks for breadcrumbs, crush the required amount using a food processor or even a mortar and pestle, etc.
To save time and energy, process a large quantity of dried/hard bread all in one go, cutting the bread into smaller bits to help your food processor, and store in a clean jar for easy use. It should last for weeks, just like the shop-bought breadcrumbs.
Of course, you can also make breadcrumbs using French bread.
This entry was posted in Food and tagged "how to use", leftover, sliced bread, stale, what to do by Nicole. Bookmark the permalink.


I just got back from a week in New York! I was there for a jewelry business training conference with Flourish and Thrive. It was an extraordinary experience. I will try and distill it down to the two most important things I got from it.
I have never been to New York. And, I am embarrassed to admit, I was terrified. Terrified of getting from the airport to my hotel. Terrified of getting mugged. Terrified of getting lost. But I did it. I got on the plane and showed up in La Guardia, a New York virgin, ready to face my fears. As I was walking to the taxi area, I saw a guy with an "Uber" sign, offering rides. So off I went. We drove to my hotel, and I hopped out. The driver told me my hotel was just a few doors down. So I walked. No hotel. I am standing on the street. People and cars buzzing past me. Realizing my first fear just came true. My hotel is 1.5 miles away. I am lost in New York, and I am about to be mugged. Well, the driver realized he dropped me off at the wrong location, and came back around and got me! Tragedy averted!
Here's what I learned. My fear was so much bigger than reality. This is a really tangible example, but I want to apply this new found confidence to other areas of my life. I am afraid of people not liking me. I will put myself out there anyway. I am afraid of life passing by too quickly. I will invest in the everyday anyway. I am afraid of taking my business to the next level and failing. So, I put my heart and soul into it, and take it to the next level anyway. What are you afraid of? What is holding you back? You might be left on the street corner in New York, but you will be okay. You will find yourself on the other side, looking back at your fears and sighing with relief.
Lesson #2. The value in finding your tribe. I often feel alone. It was so easy to make and maintain friendships in my 20's. Now, in my (ahem) 40's I am finding it to be quite challenging. I am in a new city (moved to Denver 2 years ago). I work at home. As an artist, entrepreneur, and business owner, I work a lot. I am a mom and a wife. There is so little time, or emotional space left over. And as an adult, I have now had some painful friend break ups. Which have left me feeling quite inept and fearful. So my week in New York, with other like minded women was cathartic. I was intentional about being vulnerable and real. And I made friends. Real, lifelong friends. I loved these women. And they actually liked me too! I found my tribe. They spoke into my life, and into my business. They told me things that were hard to hear, and things that filled my heart to the brim. Wherever you are, and whatever you have been through, you can still find your tribe. Be intentional. Be real. You may get burned. You may find a new tribe mate. You are cool, fun, kind, and valuable. You are worth loving!
My experiences and all that I learned at this conference have given me a clear vision of where I want to go with my jewelry. I am so excited to take you on this journey with me. I have so many ideas brewing! I am afraid. And that's ok.
Follow me on this exciting journey! You'll even get a coupon for your first purchase!


text:
"A driving force in the Japanese bilingual recruitment market"
World-leading global specialist recruitment consultancy Robert Walters operates across five continents and has offices in over thirty countries.
Bridges spoke with Jeremy Sampson, managing director of Robert Walters Japan K.K. about the company's approach to the Japanese recruitment market.
How long has Robert Walters been active in the Japanese market and what are your competitive advantages?
Jeremy Sampson, Managing Director of Robert Walters Japan K.K. | © Robert Walters
Robert Walters has been a driving force in the Japanese bilingual recruitment market, providing high-quality candidates for our clients and access to the best jobs for over 20 years. We opened our first office in Tokyo in 2000 and our Osaka office in 2007 and celebrated our 20th anniversary last year in 2020.
Our core mission is "Powering people and organizations to fulfil their unique potential" and this begins by empowering our own people first. By providing the best industry training and the best work environment possible, we help our people become industry experts to introduce top talent to our clients. We're known for our non-commission model, which means that our consultants do not receive individual sales commission. Instead, they are rewarded on a team profit-share basis.
This not only ensures that our clients and candidates come first, but it also promotes a positive working culture where teamwork and collaboration are incentivized. One of our primary strengths is headhunting, which enables us to introduce specialized candidates who are not typically found in the job market. Our consultants are specialists in the fields they recruit for, with strong personal relationships and wide industry networks. That means our candidates can trust our expertise in finding the right role for even the most niche skill sets, and in turn, our clients get the peace of mind that any candidate we put forward will have the right skills for the job.
As a leading specialist professional recruitment consultancy, what makes Japan a unique market for Robert Walters?
There's no denying, Japan is one of the most challenging countries when it comes to sourcing talent. Low birth rates and an ageing population are among the demographic trends causing the chronic labor shortage. When we surveyed 300 companies in Japan, about 80% expressed concerns about the talent shortage within their industry. By seniority level, many companies believe the talent shortage is particularly acute at the "senior/team leader" level and "manager" level.
The top three hiring challenges in Japan according to our clients are a lack of industry experience, lack of technical qualifications and a lack of applicants. The pool of bilingual specialists is even more limited as the English language skills of the average person in Japan is not as high as one would expect.
The traditional Japanese employment system has also contributed to the shortage of specialists in Japan. Up until now, Japanese companies have practiced membership-based employment in which employees are expected to stay with the company until retirement (lifetime employment) and the company provides them with experience in various types of jobs (job rotation). While employees are more likely to have job security, they are less likely to develop specialized skills.
Our core mission is 'Powering people and organizations to fulfil their unique potential' and this begins by empowering our own people first. By providing the best industry training and the best work environment possible, we help our people become industry experts to introduce top talent to our clients.
Jeremy Sampson, Managing Director of Robert Walters Japan K.K.
How has the pandemic impacted the company in Japan and what opportunities do you see to grow the business in 2022?
We've adapted as a business and put our people first throughout the pandemic. We have led the way by being one of the first companies to go fully remote and provide vaccinations for our employees. Although we were impacted to a degree by the pandemic, we began to see recovery from the second half of 2020 and even more significant recovery from January 2021. In fact, for several months this year, we have experienced record high revenues for our business.
As markets continue to recover, we expect to continue seeing high levels of hiring activity pretty much across the board.  Japan continues to experience a chronic talent shortage and the Japanese government is pushing to attract more international talent and business into Japan. We see this is as an opportunity for our business to grow more and we're very optimistic that the future looks bright.
At Robert Walters, we specialize in the recruitment of senior/mid-level and hands-on professionals which is the area with the most severe shortage of talent. We are always ready to help companies navigate the talent challenges that exist in Japan & provide solutions.
What message do you have for our readers regarding the company's commitment to offering the best candidates to clients in Japan?
At Robert Walters, we specialize in the recruitment of senior/mid-level and hands-on professionals which is the area with the most severe shortage of talent. We are always ready to help companies navigate the talent challenges that exist in Japan & provide solutions. We have one of the largest databases of Japanese and English bilingual candidates and our diverse team of consultants enables us to build strong connections with both foreign and Japanese companies and bilingual specialists.
Our market leading materials such as our salary surveys, white papers and survey results can help inform organizations on the local market. We have a history of over 20 years in Japan, and over 300 employees with extensive knowledge and experience in their industries. Ultimately, when it comes to talent, we have more access to the best out there.
www.robertwalters.co.uk • www.robertwalters.co.jp/en/