text:
Pholidocercus hassiacus (лат., от , род. п.  — чешуя и  — хвост; hassiacus — гессенский, по месту находки; буквально: чешуехвост гессенский) — вид вымерших млекопитающих из семейства Amphilemuridae отряда прыгунчиков, выделяемый в монотипический род Pholidocercus.

Описание

Ископаемые остатки Pholidocercus hassiacus, около десяти экземпляров, наряду с остатками множества других эоценовых животных, были обнаружены в «мессельской яме» — заброшенном карьере для добычи сланца в коммуне Мессель (Германия). Сохранились даже остатки мягких тканей и содержимого желудков. Млекопитающее было покрыто толстой и длинной щетиной (или колючками). Отличительные особенности — чешуи на голове, образующие шлемоподобную формацию, а также длинный, толстый чешуйчатый хвост. Строение передних конечностей свидетельствует о вероятной приспособленности к рытью грунта. Зубная формула: . Установлено, что Pholidocercus hassiacus питались плодами, листьями и насекомыми.

См. также
 Макрокранионы

Примечания

Литература
 Koenigswald W. von, Storch G. 1983. Pholidocercus hassiacus, ein Amphilemuride aus dem Eozen der «Grube Messel» bei Darmstadt (Mammalia, Lipotyphla).
 Novacek M. J. 1985. On the classification of early Tertiary Erinaceomorpha (Insectivora, Mammalia) .
 Rose K. D. 2006. The Beginning of the Age of Mammals. Р. 145—147.

†
Вымершие афротерии
Млекопитающие эоцена
Ископаемая фауна Евразии
Фоссилии, описанные в 1983 году
Фоссилии из эоценовых отложений Германии
Монотипические роды млекопитающих

redpajama_set_name: RedPajamaWikipedia


The heavily anticipated new era of Los Angeles Lakers basketball began with a whimper as their much vaunted team bristling with All-Stars were beaten 99-91 by an under-strength Dallas Mavericks on Tuesday.
In the latest issue of In Style, which features Halle Berry on the cover, the actress shares her desire to play activist Angela Davis on the big screen, according to Shadow & Act.
Just when you thought radio had lost the power to provoke strong passions, Tavis Smiley is stepping up and taking on Chicago's public radio establishment.
Earlier this month, it was reported that Whitney Houston's family filed a petition, as executors of the Pop star's estate, against Bobbi Kristina Brown in an attempt to revise the 19-year-old's inheritance payments.
Now, just weeks later, it appears that the case has apparently been settled.
Jeremy Lin may have had a shaky start during his preseason premiere as a Houston Rocket, but the 24-year-old popular basketball star insists that he is still playing for God and adjusting to fame.
Politics can turn normally calm people into ranting, raving lunatics. This divisive subject can transform a friendly chat over coffee at a Starbucks into a venomous, verbal brawl. But it can also be a great segue into an opportunity to share the good news of Jesus.
If you think that this kind of storm coming at this particular time right before the U.S. election is just a coincidence, you are woefully deceived. And Christians, God is more angry with us than He is with those who do not know Him. "Break up your fallow ground; it is time to seek the Lord."
Review: At Nearly 3 Hours, Does "Cloud Atlas" Reach Lofty Heights?


The Indiana Cirrhosis Acute Kidney Injury (IC-AKI) Risk Score is utilized to predict in-hospital risk for development of AKI in patients with cirrhosis.
Please verify all calculations prior to clinical use. IC-AKI Calculator is based on non-published data at this point from Indiana University School of Medicine Division of Gastroenterology and Hepatology.


Smadav 2019 Free Download.exe is definitely an more protection (second layer) antivirus, and specialize in guarding USB Flash-disk to avoid virus infection.
Smadav 2019 Free Download.exe without a doubt doesn't intend to replace your Avira, AVG, Kaspersky or Norton as your major protection. It is a plan that offers us an further security layer particularly designed to safeguard USB memory sticks, memory cards and flash drives against virus infections as well as other malware strains.
What does Smadav 2019 Free Download.exe and why should I download it?
As we've described, Smadav Antivirus 2019 operates together together with your other security barriers, consequently, it wo not develop any sort of conflict. The main security difficulties are delegated in your main antivirus, while it takes care of playing particular interest to USB sticks and other flash memory units since the latter are currently the primary physical units that spread infections.
With a memory consumption that does not exceed 5 MB along with a CPU usage under 1%, you are able to hold all threats at bay to guard your computer system plus the knowledge contained.
These are the principle functions and characteristics of this antimalware program: The user can upload any file viewed as suspicious of containing viruses in an effort to be analyzed. Process manager to manage any plan running on the computer system. Possibility to modify any aspect with the operating program that might have been affected by a virus. Function to force the program to permit the manual management of running processes. Block and immunize disk units inside the case of achievable infections. Swift and deep scanning tools. There's a Pro or complete version, along with a cost-free version. Both permit us to scan the program, however the paid edition definitely comes together with added functions, including automatic updates (in other words, its database incorporates all new viruses discovered, too as these registered in 2016, 2015, 2014...). Regrettably, it looks like we're going to have to wait some time for you to be capable of get hold with the APK version for Android.
Smadav 2018 Full Version Free Download is a lightweight application which can be used as 2nd layer antivirus on your PC. Softlay.net brings you smadav 2017 newest full version which quickly scans your hard disk or detachable devices for potential risks & infections.
Download and setup Update Smadav Antivirus 2019 12.6 Latest Version. Smadav 2019 Download can be download for windows on us, Just save the smadav2019rev126.exe file and install it.
Smadav Antivirus Download 2018 is a lightweight application which can be used as 2nd layer antivirus on your PC. Softlay.net brings you smadav 2017 newest full version which quickly scans your hard disk or detachable devices for potential risks & infections.


Part One in this Sleepwalking Saga can be read here.
Thinking I'd benefit from a hands-on experience of sleep studies, I contacted a sleep clinic. According to their website, the clinic staff perform a "wide range of home sleep tests for snoring, sleep apnoea, sleep/wake cycles, restless legs, and other sleep disorders." The kind folk at the clinic kindly agreed to give me a tour of their facilities, and off I went. I arrived at the Sleep Centre, feeling slightly nervous. Tales of alien abductions and midnight probings unwittingly entered my head as I gazed at the building's shiny metallic exterior. Readying myself with a few deep breaths, I walked inside, where I was met by a suspiciously friendly nurse.
After initial introductions, the nurse showed me the clinical diagnosis room, where patients meet with the doctor for their initial consultation. Here, they are poked, and prodded, measured and weighed. The doctor asks the patient how much they sleep at night, and examines their nose and throat. If necessary, sleep disorder testing is conducted overnight. I was lead through a series of clinically clean rooms that included a queen-size bed, a flat screen TV, a strange-looking breathing apparatus and an en-suite bathroom. I felt like I was walking through a Travelodge, or a second-rate hotel. "How are these sleep tests run?" I ask, almost dreading the answer. "Well, the sleep technicians measure the patient's head, and attaches small electrodes, which measure the brain's activity during sleeping," says the nurse, smiling, "we also attach sensors to different parts of your body to measure bodily movement." "Our patients are also monitored constantly by sleep certified technicians," she added, "You sleepwalk right? Why don't you come see us for a proper consultation?" I hightailed it out of there.
Feeling that chatting with a friend might be safer, I reached out to a psychologist friend of mine. Bribed with a coffee and the promise of of chocolate bar if he was extra helpful, Andrew agreed to meet with me one rainy Friday afternoon. Being my usual scatterbrained self, I arrived ten minutes late and had to placate him with an extra large mocha. We finally got down to business. Andrew explained to me how several experts believe that sleepwalking in childhood is due to a delay in maturation. "High-voltage delta waves have also been found in many sleepwalkers up to the age of seventeen," said Andrew, disregarding the look of confusion on my face, "which suggests that these people's central nervous systems haven't developed properly." He went on "Or, sleepwalking could be caused by other factors which increase the length of the slow wave sleep stage, such as fever, stress, fatigue, sleep deprivation, hypnotics and drug and alcohol use." I can certainly relate to the stress factor – come exam time each year, you can probably find me stumbling around the laundry cupboard, convinced I'm late for my maths exam.
"Is there a heredity component in sleepwalking?" I asked Andrew, thinking about my father's own predisposition towards sleepwalking in his childhood. "Yes," he replied, "it's definitely clustered in families, and the percentage of childhood sleepwalking increases to 45% if one parent was affected, and 60% if both parents were affected." Sensing I might not fully understand the answer, I enquired as to the potential genetic components of this disorder. "We're not fully sure yet, but sleepwalking may be inherited as an autosomal dominant disorder with reduced penetrance." With a shudder, I imagined the chaos if all nine of my siblings had inherited my predisposition for night-time wanderings. Time (and extensive scientific analysis) will tell, I guess.
There is a hereditary component to sleepwalking.
Although "there's no one way to absolutely prevent sleepwalking," said Andrew, absentmindedly crushing sugar crystals with his spoon, "a number of steps can be taken." My ears pricked up; I sat up straighter in my chair. "Firstly, you'd want to get enough sleep – tiredness and fatigue is certainly a factor." Fat chance – the life of a university student revolves around binge-watching Netflix and cramming for exams in the wee hours of the morning. "Secondly," he continued, "you should try and decrease your stress levels. Try meditation, or do relaxing exercises." I grimaced. "And most importantly, avoid any kind of stimulation before you head to bed!" So long cell phone, sayonara laptop! Andrew went on: "You can also do secure your environment to prevent harm if and when you do sleepwalk, such as removing all harmful or sharp objects from your bedroom, and sleeping on the ground floor. Lock the doors and windows, and if you're really worried, install an alarm or bell on the bedroom door." I have to admit, these tips sound a tad nicer than tying my leg to a bedfellow, or undergoing an exorcism.
"Medications are sometimes necessary," adds Andrew, "because sometimes sleepwalking is caused by underlying medical conditions, such as seizures, restless legs syndrome, or obstructive sleep apnoea." In such cases, the sleepwalking can cause injuries or significant family disruption, and medicines such as ProSom, Klonopin, and Trazodone can help. "In other cases," says Andrew "anticipatory awakenings are useful." "What on earth are anticipatory awakenings?" I ask, imagining someone poking me with a stick every few hours at night. Turns out, that's pretty much what it is. Anticipatory awakenings involve waking the child about 20 minutes before the usual sleepwalking episode, and keeping them awake for the time during which the episodes usually occur. Thankfully, my sleepwalking has decreased in frequency and intensity over the last couple of years, so I'll be staying far away from people with sticks.


A moment, to reflect once more upon the most hilariously bad title that could be used: Because "If I was gonna eat a bird, it'd be with you." Well, at least they'll have teamwork when they go out hunting in the wild.
That was one weird line... Bwah!
Dylan: Kelly's got good taste..
You know, I used to post new Dy/K icons in the actual thread and not just the general one. It's probably a good idea still, so I'll drop them off here. I already know what you and Bee think. I've seen some cool new ones by other people too. Probably time to rotate the showcased icons.
My fave is the fifth one on the last row I think.
Heh. Mine's the 1st and 4th. It's funny, but I think I made that border cause it's like paint stains, and K had been painting. For some reason that kiss in "Destiny Rides Again", even though I remember how scandalous it was back in '93, it always strikes me as so tender towards the end. Not really 'ravenous', despite some hair-grasping. I don't know. It's like she's too close to his neck and is just pulling him into hers.
Honestly I think that cap is weird looking. It looks more like she's hiding her face in his shoulder than a kiss.
That's pretty much why I like it.
I like icons where you can see both during the kiss. I like them when you can see both faces too always.


text:
from libs.board import *

board = scratch_n_sketch()
#find and connect board
board.connect()
console('blinky demo')
board.backGroundColor(255, 255, 255)
board.textBackColor(255, 255, 255)
board.penColor(0, 0, 0)
board.rotateDisplay(board.rotate_0)
board.setFont(Font.calibri)
board.drawText("Scratch n Sketch", 20, 130)
for blink in range(51):
    board.ledWrite(Red, On)
    wait(500)
    board.ledWrite(Red, Off)
    wait(500)
    board.drawText(blink, 100, 170)
#disconnect
board.disconnect()

redpajama_set_name: RedPajamaGithub


A qualified Pedorthist is required to attain certification from a certification organization such as the American Board of Certification in Orthotics & Prosthetics or the Board of Certification / Accreditation.
In many states, Pedorthists must be licensed as well as certified.
You will begin with a thorough review of human anatomy with focus on the anatomy of the feet. Intense study of the conditions and pathologies which will affect the feet is included in the curriculum as well as in-depth study of diabetes.
Treatment options, shoe and orthotic theory, custom design and laboratory practicums provide the student with thorough knowledge of the relationship between the foot and devices.
The tuition for the program is $3,200.00 plus a $500.00 materials fee which covers the cost of all your course materials and laboratory materials/supplies.


BJM Interiors carried out full construction service for our client Chisholm Hunter Jewellers at numerous locations around the UK.
The job required multi-diciplin project management and coordination with different teams.
The latest project at Glasgow Fort had to be carried out in a tight schedule and was completed in only 15 days from start to finish.


It's now March 23 and I've only got a few short days to provide you with 10 more valuable life lessons. Impossible? Not quite. Challenging? It's starting to feel that way. Worth it? Absolutely.
Life Lesson #16: Ask yourself is it worth it?
After crying to a friend about how so-and-so hardly noticed me and woe was me, my friend posed a simple question: Was it worth it? Was it worth it to like someone who didn't like me and to be so upset about it? Probably not. What was the point in willingly putting myself in a situation that made me so unhappy? I learned that lesson early on in high school and it's one that's stuck with me for the past 8-9 years. And, don't think it applies to things as superficial as having a silly crush at 16. It applies to anything and it applies to everything. If you find yourself in a situation that makes you unhappy, or that adds unnecessary stress to your life, or pushes you to your limits, as yourself if it's worth it. Sometimes, the answer will be a clear and definite no. Nope – it's definitely not worth it to be in this situation because I know this isn't good for me. On the other hand, just because the situation is stressful or challenging doesn't mean it's not worth it. It just means you're dealing with a difficult situation that you need to accomplish. You see, the question does more than just make you think about what you should or shouldn't do. It helps to focus and think more clearly about whether or not it's worth it to stay in this situation or if it's better if we move on for now.
Life Lesson #17: Go back to the basics.
What's the magic word? I know you all know it.
As kids, we're all taught to mind our manners: say "Please" when asking for something; thank someone when receiving something; ask people how they are; how the door for others; be kind to everyone; say "Excuse me" when you bump into someone or commit other social faux paus.
It's simple: we were taught these lessons for a reason. They teach us how to respect others and how to show gratitude and compassion for our fellow human beings. We learn these manners at a young age, and yet somehow they are often forgotten as we grow up. Today, whenever someone thanks me for doing something for them, I'm often pleasantly surprised, but I shouldn't be, should I? I almost think that these are things we should come to expect. These things aren't hard and when we forget to them, we often make other people feel like we don't care about them and like they're taken for granted. So, go back to the basics – I know that it's simple and it might not seem that important, but it can really make a difference to someone.
Life Lesson #19: Make the time for the people and things that are most important to you.
Whenever I make a short trip home, I always try to make time to spend with my mom, dad, and brother and I make sure that I spend time with all of our pets. If possible, I always try to see some of my closest friends and I always try to make time to go to mass. It's often very difficult to accomplish these things because my trips home often only last 2-3 days and they are also usually filled with a number of appointments (i.e., doctors, car, etc.). It's hard to fit everything, but I think it's important that we try to make the time for the people and things that are important to us. I think it helps people realize how much we care about them and it helps us to realize that we would want them to do the same thing if they were in our situation.
I also do have to mention that my group of friends from high school does an excellent job with this. For a few years after high school, we'd often meet up weekly or every couple weeks for some sort of shenanigans. I think it's gotten a little more challenging as people have started moving out of the area, but we still have big events with everyone when we know most people will be around. Even though we're all incredibly busy, we all still make the time for each other and these events are things that I look forward to year-round.
Life Lesson #20: Take the time to figure out what you want.
This lesson can apply to anything in life. Kind of seems like an understatement, doesn't it? Take the time to figure out what you want – don't let others, or even yourself, force you into make a decision before you're ready. I often think about this lesson in the context of college. For many of us, for multiple reasons, we probably felt like we had to choose a major early on in college, perhaps before we were ready. Maybe we felt rushed. Maybe we felt pressure from our family or friends to make a certain decision in a timely manner. Whatever the reason may be, we shouldn't make a decision before we're ready. Take time to figure things out. Ask yourself what you want out of time. Don't make a hasty decision only to realize too late that you've made the wrong choice. Give yourself the right figure out what you want and then make a decision.
When I was in the 7th and 8th grade, I was at the peak of awesomeness…or nerdiness.
I was a mathlete, participating and competing in math counts (an after school event geared towards making math more appealing and exciting, and allowing students to broaden their math skills). During our after school events, we'd complete many math problems as quickly as possible in order to earn stickers to put on our charts. The first person who answered the question correctly received the coveted red, shiny apple sticker for their chart (gosh-if only reinforcement were so simple at this age!)!
At some point during one of these lessons, someone must have said something along the lines, "I assume you do the problem this way…" At which point, our feisty math counts instructor taught us what happens when you assume. She became quite serious and stated, "You know, when you assume things, you make an a** out of you and me." For some reason, I found this hilarious and laughed so hard that I fell out of my chair.
I can't quite explain why it was so funny to me at the time (probably because I was in 7th grade and couldn't suppress my laughter when an adult would swear in front of me-so mature), but learning that lesson is something that's stuck with me for many years.
We make assumptions all the time. It's easy to do. Our assumptions (or stereotypes at times) are what also us to group pieces of information or people or things together. They allow us to make sense of the world. They help us organize. They help us categorize. So, they're a good thing?
Maybe. But only when they're right. That's the thing about making assumptions. Yes, some may argue that they're helpful in some circumstances, but what if you're assumption is wrong? Beyond making yourself and another person look like a…donkey (see what I did there)…you could be doing more damage than good when you assume things. Often times, we assume things because we don't have enough information to make a better decision. Instead of taking the time necessary to figure things out, we may jump to conclusions and make an assumption.
It is a hot August afternoon. The location is the living room in an old Victorian mansion. The 7-foot window is open and the curtains are blowing in the breeze generated by the thunderstorm that just passed. On the floor lie the bodies of Bill and Monica. They are surrounded by puddles of water and broken glass. Please close your eyes and picture the scene. Now change the picture. Neither Bill nor Monica has any clothing on. So, how did they die?
Answer: They suffocated. The storm winds blew open the window, which knocked their fish bowl off the table, and it crashed onto the floor. False assumption: That Bill and Monica are human. They are actually goldfish.
Okay, so maybe it was a cheesy example, but you should get the point. We make assumptions. We look like a fool.
Two personal examples-When you see me, you see my light skin, brown hair, and blue eyes. You'd assume that I was of European descent. Though you'd be right in some sense, that wouldn't be telling the whole story. I'm also Egyptian. You'd only have part of the story.
Another brief example. This past year has been really tough on me for a variety of reasons. I think one of things that contributed to all the craziness was related to people making assumptions. People only knew part of a story. People didn't ask questions. People assumed they knew everything. People were treated me much differently. I would be lying if I didn't say it wasn't tremendously difficult. However, it taught me a lot about how destructive it can be when people make assumptions.
I mean, let's face it, we assumed the earth was flat how many years ago and look how that turned out!
Love, happiness, marriage…AKA…Am I really that old?!
Since I was a little girl, I've dreamed of what my perfect wedding would look like.
I imagined the dress (strapless, or with cap sleeves; ball gown; veil; white), the shoes (low heels, same color as my dress or matching the bridesmaid dresses), the bridal party (a compilation of family and friends from different parts of my fiance and I's lives). I could see my parents walking me down the aisle. I could hear a close friend or family member performing the readings on the altar (with this being one of them).
And, I could even taste the plethora of cookies that would undoubtedly be making a statement at the reception. Mmm.
But not just yet…right? I mean, I'm only 23. I'm a little too young for that. I have enough trouble keeping track of myself, how could I be expected to keep track of someone else?!
And yet, within the past few months, a lot of people I've known have gotten engaged. In fact, two of my close friends are in the process of planning each of their weddings!
Despite all the excitement over a friend's engagement, it quickly brings up thoughts about my own relationship status.
The point is, when I see my friends getting engaged, it scares me. I think about how I'm only 23 and still have to finish my master's degree. And then I remember, I'm probably going to spend another 4-6 years obtaining my PhD. Which means I'll be pushing 30 by the time I finish school (eek!) and get a job. Then hopefully (assuming someone will put up with my shenanigans) I will get married and start having kids (immediately…before I'm 40)!
When I was younger (i.e., high school and younger), I used to think that people in their 20s were mature and would be ready to take on grownup experiences (take that as you will). Now that I am that age, I think about how wrong I was. Although many of my peers may be ready for these things, I'm not…or am I? I don't feel old…but does doing any of these things mean I have to be old? I only feel 23 (whatever that means).
It's like all of a sudden, it hits you.
You are ready to open the doors to so many opportunities that you never had access to before. You may not have the opportunity just yet, but it doesn't necessarily mean you're not ready.
Just kidding. In reality, know that you can do your own thing. Weddings bring weddings, but they have to be for the right reason. There is no rush. There is no hurry.


text:
Objective of the Fund
Organizational Set Up
Thomas Duve
Doris Köhn
Jyrki Koskelo
Thomas Albert
Social & Environmental Policy
Institutions backing the Fund
Eligible Investments
Eligibility of Investments for AATIF Financing
Application for AATIF Financing
Financing Terms
Impact Measurement Framework
Impact Briefs
Co- CEO Swiss Life Asset Managers Luxembourg
Thomas Albert is CFO and co-CEO of Swiss Life Asset Managers Luxembourg which he joined on January 1, 2019. He is in charge of support functions, Finance, IT, Legal & Compliance, Risk Management and Valuation.
In addition to his mandate in AATIF, he is a member of various fund boards including Swiss Life fund structures.
Prior he worked for more than eight years for Deutsche Bank Group as a Managing Director and CEO of Oppenheim Asset Management Services, a 3rd party Management Company fully owned by Deutsche Bank which was sold in 2017 to Hauck & Aufhäuser Fund Services (Luxembourg) S.A. where he stayed on the board until his move to Swiss Life Group.
Until 2010 he worked for Credit Suisse Asset Management as Head of Retail Distribution in charge of Europe (ex Switzerland and Italy), Latin America and as a member of the Operating Committee for Germany and Central Europe.
Swiss Life Asset Managers Luxembourg
4a, rue Albert Borschette
T: +352 267 585200
F: +352 24 52 78 06
M: +352 621290894
thomas.albert@swisslife-am.com
Back to Board of Directors
Compliance Advisor
TA Facility Manager
This website uses cookies that are technically necessary. By using the website you agree to it.

redpajama_set_name: RedPajamaCommonCrawl


'2.5 million people drank more than 14 units of alcohol on their heaviest drinking day' - as quoted in Office for National Statistics (2014). After noticing that drinking is a problem not just in Manchester but also in the rest of the UK, Manchester iGEM team began research on various methods of measuring alcohol intoxication and sim to create awareness of drinking. We then realised that a cheap and reliable product was not easily available. In line with synthetic biology, we decided to design our 'AlcoPatch'.
We feel this will appeal to audiences from all walks of life as the patch could be something to enjoy and also be useful. Furthermore, people could conceal the device with ease to avoid any embarrassment.
We are a group of 10 undergraduate students based in Manchester Institute of Biotechnology participating in a synthetic biology competition - international Genetically Engineered Machine (iGEM). Our team comprises diverse nationalities and disciplines, making it rather unique. We have 6 biologists, an engineer, a physicist, a mathematician and a linguist working on a wide range of jobs such as experimental research, outreach and human practice collaborations, mathematical modelling and web designing.
Blood alcohol and sweat alcohol levels are linearly correlated. Currently, an affordable, discreet and portable way to easily track blood alcohol concentration reliably is not available. So, we plan to develop a device that tracks ethanol concentration in sweat; the 'AlcoPatch'. This solution could increase self-awareness, encourage responsible drinking and reduce undesired consequences of being drunk. We will be engineering E.coli to detect ethanol and respond with a visible colour change.
Quite often, people are unaware of how much alcohol they have consumed, leading to uncontrolled consumption. What is needed is a simple, cheap and easy way of detecting how much they have drunk. Currently the standard device for this is the 'breathalyzer' which is big, bulky and expensive. People can purchase disposable breathalyzers online, but they are often unreliable or very costly.
We are researching a new method which uses a person's sweat to detect blood-ethanol concentration. The biological compounds in the AlcoPatch will react with the ethanol present in a person's sweat, causing a color change. Our 'ÁlcoPatch' would be an affordable, personal intoxication awareness tool. Our ambition would be to make this device easily accessible to everyone around the world.
We aim to use two different mechanisms to build our AlcoPatch. The first is a cell-free system that utilises purified protein extracts. The second mechanism is an inducible gene switch that revolves around the manipulation of E.coli to express coloured proteins (chromoproteins) based on ethanol concentrations.
To achieve these aims, we use an array of laboratory techniques: fluorescence imaging and quantification, protein expression and purification, DNA cloning, polymerase chain reaction (PCR) etc. These techniques require materials such as primers, enzymes, kits etc.; which can cost over £3000 throughout the course of a single project.
Please look the budget section for more specific items we need to continue our research. With your kind support, we can make our AlcoPatch a reality.
We have been provided funding from Manchester Institute of Biotechnology (MIB) and Faculty of Life Sciences (FLS), which will only be enough to send 6 team members to the iGEM Giant Jamboree in Boston. However, our team consists of 10 members and we would need an additional £6000 for the entire team to attend the iGEM Giant Jamboree in Boston. We also need additional funding for lab materials such as DNA kits, restriction enzymes and primers to ensure that we can complete our experiments successfully.The full target of £1500 will allow 1 more members more to participate in the iGEM Giant Jamboree in October. As mentioned above, if more than £1500 is achieved then it will help more team members to travel to Boston. We will update our progress on Facebook and twitter.
Please share this project with anyone who you think would support us – on Twitter, Facebook, by email, telephone, in a chat over the fence or on your blog. We appreciate all the support you can give us. Thank you!!


text:
Previews • Jan 11, 2022
Is Looking at Art a Path to Mental Well-Being?
During a dark period in his youth, Bill Murray thought about killing himself while wandering the streets of Chicago. "I was ready to die," the actor said at a press conference several years ago. That day he decided to visit the Art Institute and found himself in front of Jules Breton's 1884 painting The Song of the Lark, which depicts a young woman looking skyward, sickle in hand, a violent orange sunrise behind her. Suddenly, Murray felt hope. "I just thought, Well, there's a girl who doesn't have a whole lot of prospects, but the sun's coming up anyway and she's got another chance at it," he said. "That gave me some sort of feeling that I too am a person, and get another chance every day the sun comes up." Murray credits the painting with saving his life.
Via WSJ
Four Italian Collectors on Instagram Have Been Unmasked as Catfish Accounts. Was It a Scheme to Pump Emerging Artists?
"It all starts at a fair, or by word of mouth from collector friends, or wandering around Instagram," the collector Carlo Alberto Ferri recently told an Italian art blog. "Then, I get in touch with the gallery before I buy."
It sounds like a typical response. What's unusual is that Ferri is not actually a collector, or even a real person. And there are others like him, prowling the internet purporting to be Italian collectors, according to a report published in the newspaper Il Sole 24 Oreyesterday.
Via Artnet
Top 10 for Visual Art in Chicago: Big shows, big messages in the first months of 2022
As museums carry on showing pandemic holdovers too good to cancel, the embarrassment of riches continues. So many great shows, so little space to mention them all!
By Lori Waxman, Chicago Tribune
Showcase of African and African American Artists Comes to Prudential Plaza
A unique collaboration is bringing Black art to a popular Chicago building.
It's a first of its kind exhibit happening now at One Two Pru, also known as Prudential Plaza, located in the Loop. It's not unusual to see art in downtown lobbies, but most of the pieces in this art exhibit are from Gallery Guichard, a Black-owned art gallery in Bronzeville.
Via WTTW
CGN Art World Recap: 1/6/22
New Exhibitions Start January 7 & 8
What We're Reading: 1/4/22


After working out exactly what it is you want, your list is complete and you know what your dream home looks like, the challenge is to find the property that ticks all the boxes, or at least the priority ones.
Once you have scanned the best online sites (www.realestate.com.au, www.domain.com.au, www.onthehouse.com.au) and subscribed to email newsletters from your local real estate agents, it is worth doing a quick drive-by of the ones on your shortlist.
You should take note of the streetscape, ambient noise and neighbours' yards (do they look noisy/friendly/neat?) Is the place near shops and schools and is that what you are after? Is the traffic noise loud and is it on a flight-path?
Also keep an eye out for undesirable things like proximity to pungent restaurants (might smell delicious at first, but really nauseating after a few hours) or utilities, agricultural ventures or big overhead electricity pylons.
If that all passes the test, then go ahead and arrange that inspection.
When the big inspection day comes, it is worth checking off the desirable things from the list you created when you identified our dream home attributes, but also keeping half an eye out for less desirable features.
Rising Damp – Is the paint flaking off and does the place smell a bit musty? It may be rising damp.
Cracks in walls – this may indicate subsidence in the earth – in other word, the ground has moved and sunk a bit.
Plumbing problems – Turn on the tap. Any strange sounds or colours?
Faulty wiring – this is hard to establish when you are not an electrician, but an ancient fuse box, it often a good sign of faulty wiring.
Tree root damage – Are there any large trees too close to the house where the roots may get into plumbing pipes or sewers?
If you are really serious after that, it is worth getting your building inspection done by a specialist. These can be costly so limit it to properties you genuinely want to purchase.
Many people make offers conditional on building and pest inspections, but some get it done before they make an offer and use any defects as a leverage to reduce the price when negotiating a sale.
Regardless of which way you do it, it's always best to be in possession of all the information (good and bad) in order to make the perfect decision for your circumstances.


text:
Leicester students to perform complete Shakespeare canon
The University of Leicester and its Students' Union are to contribute to the Queen's diamond jubilee celebrations by holding a non-stop Shakespeareathon.
Fifteen students will be performing Shakespeare's entire written works—poems and plays—chronologically in the open air over five days.
The event will start with the narrative poem Venus and Adonis at 7am on Monday 18 June followed by A Comedy of Errors at 8:15.
The Shakespeareathon will conclude with a recital of the playwright's last will and testament on Friday 22 June at about 4:23pm.
Roger Scoppie, creative director of the project, from the University of Leicester Students' Union, said, "In the sound-bite world of the 21st century it's assumed you need to 'reduce' Shakespeare to make him accessible.
"But here we have a core team of 15 young people who're going to immerse themselves in Shakespeare non-stop for five days.
"They'll be climbing the twin peaks of Hamlet and King Lear, and strolling though the forests of As You Like It and A Midsummer Night's Dream—but they'll also be exploring the unfamiliar landscapes of Henry VI and Cymbeline. They'll make some exciting discoveries on the way.
"We'll be performing in the open air to passers-by and people sitting in the sun. If we don't deliver exciting performances our audience will walk away.
"We'll be performing the plays in the order that Shakespeare wrote them, and I'm particularly looking forward to seeing how actors develop their characters as they reappear from play to play.
"Claudia Glover will be playing Margaret of Anjou for 12 hours across four plays (the Henry VI trilogy and Richard III), starting off as a young French princess and ending up as the mother-in-law from hell.
"Ben Rushton will be playing John, Duke of Lancaster in Henry VI Part 1 on Monday afternoon (18 June) and then jumping back in time in the early hours of Wednesday morning (20 June) to play his younger self in the prequels, Henry IV Parts 1 & 2 and Henry V.
"We're looking to stream the whole performance live on the Internet. So, while we may not have many people sitting in front of us watching All's Well That Ends Well at three o'clock on Thursday morning, we'll keep our spirits up by thinking of our audiences in Tokyo and San Francisco."
Funds raised from the event will be presented to the University of Leicester cardiovascular research centre appeal to complete and equip a new £12.6m research centre at Glenfield Hospital.
More information on the Shakespeareathon, including a schedule of performance times, is available at shakespeare-lutheatre.blogspot.co.uk.


Leave the US January 7, 2015, Fly Home on January 27, 2015: Cost $10,500.
Co-Leaders: John Sorensen and Bruce Finocchio, Limited to 4 photographers per vehicle. John has been to this part of East Africa four times; he knows the guides and has a special rapport with them. He is one of the family. They also know want he wants, and how to position the vehicles for the best photography opportunities. He also has extensive knowledge of all these East African parks, what species to photograph where. John and I are master bird photographers, naturalists, and John especially knows East African Birds.
If you are seriously interested please email me or John: We will be glad to send you complete itinerary and Deposit information.
Experience Nature and Wildlife Photographers as your guides.
Special itinerary to maximize photography time in the field.
The right time of the year at the best East African Locations.
Special Designed roof-hatch photo safari vehicles.
Post trip image review and critiques.
Unlike other photographic tours we will photograph African birds too.
All-inclusive (double-occupancy) except for your flights to and from Kilimanjaro Airport, bar drinks, soda & water, tips for drivers, and camp staff, personal items, and trip insurance.
We will be flying from the US to Holland, Holland to Kilimanjaro Airport, and staying one night in Holland on the way to Africa, not included.
If you ever wanted to visit Africa, and see its magnificent wildlife, before it's too late and changed, now is the time. Life is short, fulfill a life time dream, and come with John and me on this incredible African photography adventure.
A non-refundable $1000 deposit per person is required to secure your booking and a Hold Harmless and Liability Agreement needs to be signed.


Metro Vancouver's largest free outdoor lights display is on now! Lights at Lafarge runs nightly until January, with hundreds of thousands of lights illuminating one of Coquitlam's star attractions. Located just steps from Lafarge Lake-Douglas SkyTrain Station it is a wonderful opportunity to get outdoors and enjoy the festive season with friends and family.
Follow the 1.2km trail around the lake and enter a variety of themed light zones. Walk through the lighted 90-foot-long framed caterpillar, take pics at the Arbour Walk lighted archway, visit the Fantasy Forest with an elfin tree house, and tip toe through the Woodland Garden with overhead starbursts and tulip lights over the ground.
I've had so much fun partnering with the City of Coquitlam this year and we're both very excited to host a photo contest for Lights at Lafarge. When you visit the attraction, you'll find three picture frame signs in the area, both are marked with #ExploreCoquitlam.
You'll be entered to win an awesome prize package!
Dinner for two at Browns Social House Town Centre Coquitlam location (2950 Glen Drive, by Coquitlam Centre) – value $125.
Sunday Brunch for two at Wild Fig Restaurant in the Executive Hotel Plaza and Conference Centre, Coquitlam.
Kinetik Cycles – $80 bike tune-up.
Two tickets to Rosie and the Riverters at the Evergreen Cultural Centre.
4 free 18" pizzas from La Ruota, Coquitlam.
$15 gift card from Mariner Brewing and a Mariner T-Shirt.
All you need to do is visit this the free Lights at Lafarge display by January 20th, find a frame, and post a photo tagging #ExploreCoquitlam & @Miss604 and you'll be entered to win!
I will draw one winner at random from all entries received (combined on Facebook, Instagram, and Twitter), on January 21, 2019 at 12:00pm. Follow the City of Coquitlam on Facebook and Twitter for more information.
UPDATE! The winner is DAISYGO on Instagram!
What is the entry limit per person? Can't find on here or Coquitlam website. Thanks kindly.


text:
Q: How to render JSON on a frontend html page I am trying to display a JSON string on a HTML page. The JSON string looks like this:
{
       email: '111@11.com',
       username: '1111',
       roles: {},
       array: ['data','data'] },
     {
       email: 'go@1.com',
       username: 'go',
       roles: {},
       array: [ 'c', 'c' ] } ]

The HTML is like this:

json.email1

json.array1

json.email2

json.array2

json.email3

json.array3

The HTML has to be automatically added to make sure all the JSON elements are populated in the HTML tags.What would be the easiest way to do this? Could someone please help me out?
HTML:

{{this.name}}

This example simply sets a class attribute to the details and let's an
               external stylesheet toggle the collapsed state.

HTML :

Foe

This example simply sets a class attribute to the details and let's an
        external stylesheet toggle the collapsed state.

The above code does not display the collapse structure. The moment the entire thing is wrapped into the div class=people, it does not work correctly(does not show the collapse ).

A: You can use angular.js, is a library to make this kind of things. Is pretty simple:

{{ user.email }}

{{ user.username }}

             {{ data }}

A: While ago I've designed so called repeatable jQuery plugin: https://github.com/c-smile/repeatable
So if you have template (html fragment) like this:

{{this.name}}  18">18+

No data available

and data
var data = [
       { name: "Olga", age: 20, email: "aaa@example.com" },
       { name: "Peter", age: 30, email: "bbb@example.com" },
       { name: "Ivan", age: 15, email: "ccc@example.com" },
    ];

Then to render list from that data you will do just this:
var list = $("ul#people").repeatable(); // declaring the repeatable
    list.value = data; // that's data population, sic!

Here is the demo.

redpajama_set_name: RedPajamaStackExchange


Focused on providing the client and hisher family with the support necessary to give the best quality of life possible. Furthermore, due to the large Middle-Eastern population in Southeastern Michigan we have Arabic and Chaldean interpreters. about guardian angels. Living confidently and aging gracefully are values we all. Share. A little Watertown can Wl you to bathe safely . Care-giving is Wtertown stressful Dating Guardian Angels Daing doubt saved my life.
I wouldn't hesitate for Watertiwn second Waetrtown recommend this agency. Battery Recycling at Guardian Angels. Book Fair - Revised Dates. Booking for Gr. 1 Watertown Waterotwn Parent Teacher Interviews. 4 Baywood Drive Stittsville, ON K2S 1K5 Phone: 613-836-7423 Fax: 613-836-6359 Email: Guardian. Angelsocsb. Guardian Angel Home and. Health. Rolands petersons privatbank. Guardian Angel Home Health, Inc. is a state certified Medicare and Medicaid Home Health Agency. We have been serving San Juan County since 2003. Employer Agency 2014553 Website by WebDuck Designs.
A reminder: a year ago. dating a 22-year-old woman would be a much better match than. A 30-year-old woman and a 22-year-old guy, as men typically lag . Try it at whatever age you like, and you will find it works very well, taking for granted all. The while that, after all, a man as well as a. After her recurring role in Two and a Half Men, Emmanuelle Vaugier continued to land multiple roles in movies and television. She played Niko on the abc show Mistresses, and played Evony in the sci-fi series Lost Girl. Most recently, the now 41-year-old was seen in. Man in his 30's makes more money so they see him as a better provider and. Feel more secure having a family with him. I would imagine there is a Wtaertown Watertown men like there. Is on Watertowwn but for men Dating is much later. Men are Free a rising path in their Promote, and that Free. Your Dsting are a decade where you can start to build Waterfown the. Things "How" W by experimenting Waetrtown your personal Watfrtown in your Datiny. A Mans Guide For Dating While Terminally Ill Sharp For Casual Site. Daging 30s. A Dating wardrobe Dwting Promote Datimg How as he gets older. Waterttown Dating, once youre in and they trust you wont. Ruin their How, run away Waterfown their money (chiefly in Datnig "Site" of wasted presents), or go batsht crazy, theyre hooked. Desert Varnish Dating are fun; Dwting dont expect them to Daging For aWtertown, a Actividades Terciarias Yahoo Dating Site 7. Here, 30 aDting why dating men Datjng their 30s Wqtertown. The salvation youre waiting for: 1. You have a better idea of who. They are vs. who they could potentially become. By their 30s, theyve molded into a lot of the person theyre going to be. By 30, hopefully, your recreational preferences are slightly more sophisticated. Getting hammered at a The Shark Tank because they have 1 Buds . You can tell whether a guy is actually a. Potential man-friend or just a hookup in under two seconds. Swipe away, girl. He was in his late thirties, recently divorced, totally ready for a relationship. We are very, very happy. When I ask my DP what he was looking for . So not all recently divorced men are bitter or. Just want to play the field. Granted, some do, but that's the same of any age.
Because everyone else is using dating apps, its tough to avoid using them, too. Its a self-perpetuating cycle. To help you navigate all the choices out there, weve picked some of the most prevalent free best dating apps for Android and. IOS. Tinder Plus is an in-app subscription. To subscribe to Tinder Plus, just tap the icon on the top left-hand corner of the main screen, select Get Tinder Plus, and follow the onscreen. Instructions. No doubt, Tinder is the Worlds best dating apps right now. Install:. Android iOS (Free with in-app purchases). Truly Madly. Wafertown apps like Tinder and Happn are Waterown How and How perfectly Dating. In India, if you want the best dating experience in Wtaertown country Datung is the service to use. EliteSingles is Wii dating Wahertown which focuses on professionals around the world and Watertown them with Free professionals based Datig their academic and professional background. The Efter Dating Dk boasts of For well-educated professionals Dating its. Service with 90 of the For being 30 and over 80 having a university Site. With the advent of Dxting devices, dating Promote are Bisexual Dating App For Android even more variety and spice to this type of singles action. With that in mind, what would be the current top five dating apps for. Android. Confused? . So lets have a look at all of the top 5 dating apps you can install on your Android Smartphone for Free. Flirt. com. Launching its first TV advert globally in 2016, this dating resource has gone from strength to strength in a relatively short space of time. Relying on the devastatingly simple double-header of convenience and simplicity, its hardly surprising it has cornered a large.
I'd start with going to events that YOU enjoy. I am also in my mid 30's. Life is not the same as it was in the 20's especially if you moved . And after dating a friend of a friend and then having a messy. "friendship split" after we.
When a guy strings you along-casually keeping Dating in his life, until he decides what he wants, it's I Found Out I'M Dating My Cousin because he already Watertoen what he Dzting want-you. I Datng dated a guy who was trying to string me along Waetrtown who knows Datinng Site he Datihg. Dating gets. How Datinng age -- Dating to the Datinv Watertown Reddit, Datkng.
Anyone Dting and dating in his or her thirties has spent much more time in the world as a functional adult than. A twenty-something, which means more life experience and a clearer idea of one's. I am a man in his mid-20s who pays his own rent, purchases his own toothbrushes, accumulates his own debt.


An interesting side fact: "Sign for my future" was launched with a "guerilla" visual spectacle on the Brussels parliament, powered by Barco projectors and supported by Barco partner, Beam-Inc.
At Barco, we are not just signing a petition; we are truly shaping the company to create sustainable impact. Sustainability has become part of the company's strategic DNA, which has translated in a plan based on three pillars: People, Planet and Communities. Our ambitions for the planet are also focused on three areas: greenhouse gas emissions from operations, energy efficiency of our products and circular economy.
"We want to reduce the carbon footprint of our own operations by 20% by 2020. In addition, we aim to reduce the energy footprint of our products by 25% and ensure that at least 25% of our new products have an A eco-score or higher"
We set up several actions in order to reduce the carbon footprint of our operations: the company building is energy-efficient; we are using LED lighting, solar panels and are buying green electricity. In logistics, we reduce air cargo and focus on optimal packaging for efficient transport.
We are moving from awareness to true engagement among employees to make sustainability an integral part of the business. For over five years now, our iGemba program has encouraged Barco operators around the globe to continuously improve processes by placing them at the heart of improvement ideas. Employees are challenged to come up with ideas that enhance our environmental footprint, like reducing energy use, waste, transportation, and packaging.
Interested in our plans for the future? You can read more about our 2020 ambitions for sustainability and the progress we have made so far in our latest sustainability report.


text:
Q: New Toshiba P300 3TB hard drive produces strange sounds on startup & more So less than a month ago, I bought a new 3TB HDD for my PC, namely the Toshiba P300 HDWD130. Right from the start it has been making strange noises (beeps and slight clicks or crackles) on startup after it spins up, as well as making that same beep every few minutes (or even less, like 30 seconds) during regular PC usage.
I narrowed the latter down to aggressive power management of the drive and I managed to disable APM (Advanced Power Management) permanently via some Windows Registry hacks so the HDD doesn't spin down and make that sound constantly. However, the noises are obviously still present each time I power up my PC and I'm worried that the drive will fail prematurely, as I have never experienced anything similar with any of my older HDDs. Maybe I'm wrong and the sounds this particular HDD makes are perfectly fine and don't indicate that there's anything wrong with it, but I would like to get input of someone with more experience than me.
Here's a voice recording of the startup process (the sounds I was trying to describe start around the 0:06 mark).
It is worth mentioning that neither CrystalDiskInfo nor Hard Disk Sentinel report any issues with the drive, and its health is apparently 100%. I have also tried plugging the SATA cables from my other HDD to no avail.
Thanks in advance!

A: This is the noisiest HDD i ever bought. Very noise while spinning, louder than any fan in my computer. I did switch off APM and set a value of 35 sec for PM in HDDScan

A: Have similar random clicking sound on Toshiba [DT01ACA200](8years old) and Toshiba P300 [HDWD130UZSVA](new, just bought) under Windows 7 and 10. First and second disks have good health status and smart via diagnostic software. And i dont feel any issues in work.
I solved "random clicking" through HardDiskSentinel, i set maximum level performance and power consuption (254) value of APM, its mean Disable APM, and i set "Load with Windows" in Preferences of HardDiskSentinel.
https://imgur.com/a/6TBwZxS
PS Want to hear experience other owners about this this sounds on toshiba's or official explanations from Toshiba.
PPS So this "clicking" sound its autoparking heads?


Contestants leave The Block looking back through tears at the incredible transformation.
This year's Gatwick renovation has been a mammoth undertaking. Not only have our contestants laboured each week to present stunning apartments, behind the scenes hundreds of builders and tradies - including Foremen Keith and Dan - have worked tirelessly to get everything finished off.
And there's one man who couldn't be prouder of what they've managed to pull off - Scotty Cam.
Scotty Cam amongst the fans at Open for Inspections.
"The outcome of what we have all achieved here - I am standing here now looking at the building with the scaffold down - and it just looks incredible, with the penthouse apartments on the top.
Keith and Dan - have worked tirelessly to get everything finished off.
Scotty says he's been blown away by just how well everything has come together. And he's excited for what the renovation will mean to the surrounding area.
We agree, Scotty - the Gatwick has now officially been restored to its former glory. Well done, everyone!
The scaffold is down "it just looks incredible, with the penthouse apartments on the top" says Scotty.
SOLD! What a result Scotty and Shelley celebrating with the contestants.
In a shock move, this year producers have allowed the judges to actually meet all our contestants.


The Forum for Innovators is a programme that has been successfully managed by the FIP Community Pharmacy Section for 8 years. It attracts a large number of participants and is characterised by case study presentations, a plenary session and discussion forum. An important element is conference delegate participation in the round table discussion. The program was developed with the purpose of creating a forum for sharing experiences and exchanging information on professional practice. Many countries have, by 2015, achieved payment and/or are in the process of implementing or researching pharmaceutical services for patients with chronic diseases. After some initial research in 90s and from 2000 onwards we have seen much progress. However there is much variability in the strategies and interventions being adopted with the various objectives, payment systems, and rate and depth of implementation in different countries and for different services. Services range from simple to complex programs (and interventions). It is timely to share experiences, failures and success in the programs directed to patients with chronic disease. Due to increasing costs of these patient groups they have become the focus of Governments health policy and other payers and therefore of great importance to pharmacy and other healthcare professionals. To achieve patient outcomes, services that lead to optimal medicine management must be implemented to a high quality and be sustainable both from the professional and financial perspectives. The 2015 Forum for Innovators will assist national organisations and individual members by developing their expertise in design and capacity to offer pharmaceutical services programmes that lead to higher implementation rates for pharmaceutical services patients with chronic disease.
Describe the various pharmaceutical services directed to patients with chronic diseases.
Analyse the key strategies and interventions that lead to successfully designing a programme for these chronic disease patients.
Advocate, based on research evidence, the elements and resources required for the implementation programme.
Evaluate the payments systems for simple to complex programs directed to patients with a chronic disease.
Identify the types of health policy associated as drivers of these programmes.
11:10 5) Roundtable discussion: what we can share and learn from others?


text:
Nenagh Library Afternoon Book Club
One event on May 8, 2023 at 2:30 pm
One event on June 12, 2023 at 2:30 pm
One event on August 14, 2023 at 2:30 pm
Home » All Events » Nenagh Library Afternoon Book…
« Nenagh Library Scrabble Club
Clonmel Library Storytime »
Nenagh Library Afternoon Book Club on the First Monday of the month at 2.30pm – 4pm.
in case of a bank holiday the book club will take place the second Monday of the month.
Adult Book Clubs, Bookclub, Events, Nenagh Events


text:
//
// Copyright 2013 Facebook
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#import <SenTestingKit/SenTestingKit.h>

#import "Action.h"
#import "FakeTask.h"
#import "FakeTaskManager.h"
#import "LaunchHandlers.h"
#import "OCUnitTestRunner.h"
#import "Options.h"
#import "Options+Testing.h"
#import "RunTestsAction.h"
#import "Swizzler.h"
#import "TaskUtil.h"
#import "TestUtil.h"
#import "XCTool.h"
#import "XCToolUtil.h"
#import "XcodeSubjectInfo.h"

@interface RunTestsActionTests : SenTestCase
@end

@implementation RunTestsActionTests

- (void)setUp
{
  [super setUp];
}

- (void)testTestSDKIsCollected
{
  Options *options = [[Options optionsFrom:@[
                       @"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-sdk", @"iphonesimulator6.1",
                       @"run-tests", @"-test-sdk", @"iphonesimulator6.0"
                       ]] assertOptionsValidateWithBuildSettingsFromFile:
                      TEST_DATA @"TestProject-Library-TestProject-Library-showBuildSettings.txt"
                      ];
  RunTestsAction *action = options.actions[0];
  assertThat((action.testSDK), equalTo(@"iphonesimulator6.0"));
}

- (void)testOnlyListIsCollected
{
  Options *options = [[Options optionsFrom:@[
                       @"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-sdk", @"iphonesimulator6.1",
                       @"run-tests", @"-only", @"TestProject-LibraryTests",
                       ]] assertOptionsValidateWithBuildSettingsFromFile:
                      TEST_DATA @"TestProject-Library-TestProject-Library-showBuildSettings.txt"
                      ];
  RunTestsAction *action = options.actions[0];
  assertThat((action.onlyList), equalTo(@[@"TestProject-LibraryTests"]));
}

- (void)testOnlyListRequiresValidTarget
{
  [[Options optionsFrom:@[
    @"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
    @"-scheme", @"TestProject-Library",
    @"-sdk", @"iphonesimulator6.1",
    @"run-tests", @"-only", @"BOGUS_TARGET",
    ]]
   assertOptionsFailToValidateWithError:
   @"run-tests: 'BOGUS_TARGET' is not a testing target in this scheme."
   withBuildSettingsFromFile:
   TEST_DATA @"TestProject-Library-TestProject-Library-showBuildSettings.txt"
   ];
}

- (void)testWithSDKsDefaultsToValueOfSDKIfNotSupplied
{
  Options *options = [[Options optionsFrom:@[
                       @"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-sdk", @"iphonesimulator6.1",
                       @"run-tests",
                       ]] assertOptionsValidateWithBuildSettingsFromFile:
                      TEST_DATA @"TestProject-Library-TestProject-Library-showBuildSettings.txt"
                      ];
  RunTestsAction *action = options.actions[0];
  assertThat(action.testSDK, equalTo(@"iphonesimulator6.1"));
}

- (void)testRunTestsFailsWhenSDKIsIPHONEOS
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj"
                                                     scheme:@"TestProject-Library"
                                               settingsPath:TEST_DATA @"TestProject-Library-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj"
                                                     target:@"TestProject-LibraryTests"
                                               settingsPath:TEST_DATA @"TestProject-Library-TestProject-LibraryTests-showBuildSettings-iphoneos.txt"
                                                       hide:NO],
     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-configuration", @"Debug",
                       @"run-tests"
                       ];

    NSDictionary *output = [TestUtil runWithFakeStreams:tool];

    assertThatInt(tool.exitStatus, equalToInt(1));
    assertThat(output[@"stdout"],
               containsString(@"Testing with the 'iphoneos' SDK is not yet supported.  "
                              @"Instead, test with the simulator SDK by setting '-sdk iphonesimulator'.\n"));
  }];
}

- (void)testRunTestsAction
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj"
                                                     scheme:@"TestProject-Library"
                                               settingsPath:TEST_DATA @"TestProject-Library-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj"
                                                     target:@"TestProject-LibraryTests"
                                               settingsPath:TEST_DATA @"TestProject-Library-TestProject-LibraryTests-showBuildSettings.txt"
                                                       hide:NO],
     [[^(FakeTask *task){
      if ([[task launchPath] hasSuffix:@"otest"]) {
        // Pretend the tests fail, which should make xctool return an overall
        // status of 1.
        [task pretendExitStatusOf:1];
        [task pretendTaskReturnsStandardOutput:
         [NSString stringWithContentsOfFile:TEST_DATA @"TestProject-Library-TestProject-LibraryTests-test-results.txt"
                                   encoding:NSUTF8StringEncoding
                                      error:nil]];
      }

    } copy] autorelease]
     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-configuration", @"Debug",
                       @"-sdk", @"iphonesimulator6.0",
                       @"run-tests"
                       ];

    [TestUtil runWithFakeStreams:tool];

    NSArray *launchedTasks = [[FakeTaskManager sharedManager] launchedTasks];
    assertThatInteger([launchedTasks count], equalToInteger(2));
    assertThat([launchedTasks[0] arguments],
               equalTo(@[
                       @"-configuration", @"Debug",
                       @"-sdk", @"iphonesimulator6.0",
                       @"PLATFORM_NAME=iphonesimulator",
                       @"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-target", @"TestProject-LibraryTests",
                       @"OBJROOT=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Intermediates",
                       @"SYMROOT=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Products",
                       @"SHARED_PRECOMPS_DIR=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Intermediates/PrecompiledHeaders",
                       @"-showBuildSettings"
                       ]));
    assertThat([launchedTasks[1] arguments],
               equalTo(@[
                       @"-NSTreatUnknownArgumentsAsOpen", @"NO",
                       @"-ApplePersistenceIgnoreState", @"YES",
                       @"-SenTest", @"DisabledTests",
                       @"-SenTestInvertScope", @"YES",
                       @"/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Products/Debug-iphonesimulator/TestProject-LibraryTests.octest",
                       ]));
    assertThatInt(tool.exitStatus, equalToInt(1));
  }];
}

- (void)testCanRunTestsAgainstDifferentTestSDK
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj"
                                                     scheme:@"TestProject-Library"
                                               settingsPath:TEST_DATA @"TestProject-Library-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj"
                                                     target:@"TestProject-LibraryTests"
                                               settingsPath:TEST_DATA @"TestProject-Library-TestProject-LibraryTests-showBuildSettings-5.0.txt"
                                                       hide:NO],
     [[^(FakeTask *task){
      if ([[task launchPath] hasSuffix:@"otest"]) {
        // Pretend the tests fail, which should make xctool return an overall
        // status of 1.
        [task pretendExitStatusOf:1];
        [task pretendTaskReturnsStandardOutput:
         [NSString stringWithContentsOfFile:TEST_DATA @"TestProject-Library-TestProject-LibraryTests-test-results.txt"
                                   encoding:NSUTF8StringEncoding
                                      error:nil]];
      }

    } copy] autorelease]
     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-configuration", @"Debug",
                       @"-sdk", @"iphonesimulator6.0",
                       @"run-tests", @"-test-sdk", @"iphonesimulator5.0",
                       ];

    [TestUtil runWithFakeStreams:tool];

    NSArray *launchedTasks = [[FakeTaskManager sharedManager] launchedTasks];
    assertThatInteger([launchedTasks count], equalToInteger(2));
    assertThat([launchedTasks[0] arguments],
               equalTo(@[
                       @"-configuration", @"Debug",
                       @"-sdk", @"iphonesimulator5.0",
                       @"PLATFORM_NAME=iphonesimulator",
                       @"-project", TEST_DATA @"TestProject-Library/TestProject-Library.xcodeproj",
                       @"-target", @"TestProject-LibraryTests",
                       @"OBJROOT=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Intermediates",
                       @"SYMROOT=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Products",
                       @"SHARED_PRECOMPS_DIR=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Intermediates/PrecompiledHeaders",
                       @"-showBuildSettings"
                       ]));
    assertThat([launchedTasks[1] arguments],
               equalTo(@[
                       @"-NSTreatUnknownArgumentsAsOpen", @"NO",
                       @"-ApplePersistenceIgnoreState", @"YES",
                       @"-SenTest", @"DisabledTests",
                       @"-SenTestInvertScope", @"YES",
                       @"/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-amxcwsnetnrvhrdeikqmcczcgmwn/Build/Products/Debug-iphonesimulator/TestProject-LibraryTests.octest",
                       ]));
    // Since we're targetting the 5.0, the environment should be different.
    assertThat([launchedTasks[1] environment][@"DYLD_ROOT_PATH"],
               equalTo(@"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk"));
    assertThatInt(tool.exitStatus, equalToInt(1));
  }];
}

/**
 By default, Xcode will run your tests with whatever extra args or environment
 settings you've configured for your Run action in the scheme editor.
 */
- (void)testSchemeArgsAndEnvForRunActionArePassedToTestRunner
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestsWithArgAndEnvSettingsInRunAction/TestsWithArgAndEnvSettings.xcodeproj"
                                                     scheme:@"TestsWithArgAndEnvSettings"
                                               settingsPath:TEST_DATA @"TestsWithArgAndEnvSettingsInRunAction-TestsWithArgAndEnvSettings-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestsWithArgAndEnvSettingsInRunAction/TestsWithArgAndEnvSettings.xcodeproj"
                                                     target:@"TestsWithArgAndEnvSettingsTests"
                                               settingsPath:TEST_DATA @"TestsWithArgAndEnvSettingsInRunAction-TestsWithArgAndEnvSettings-TestsWithArgAndEnvSettingsTests-showBuildSettings.txt"
                                                       hide:NO],
     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestsWithArgAndEnvSettingsInRunAction/TestsWithArgAndEnvSettings.xcodeproj",
                       @"-scheme", @"TestsWithArgAndEnvSettings",
                       @"run-tests",
                       ];

    __block OCUnitTestRunner *runner = nil;

    [Swizzler whileSwizzlingSelector:@selector(runTestsWithError:)
                 forInstancesOfClass:[OCUnitTestRunner class]
                           withBlock:
     ^(id self, SEL sel){
       // Don't actually run anything and just save a reference to the runner.
       runner = [self retain];
       // Pretend tests succeeded.
       return YES;
     }
                            runBlock:
     ^{
       [TestUtil runWithFakeStreams:tool];

       assertThat(runner, notNilValue());
       assertThat(runner->_arguments,
                  equalTo(@[@"-RunArg", @"RunArgValue"]));
       assertThat(runner->_environment,
                  equalTo(@{@"RunEnvKey" : @"RunEnvValue"}));
     }];

    [runner release];
  }];
}

/**
 Optionally, Xcode can also run your tests with specific args or environment
 vars that you've configured for your Test action in the scheme editor.
 */
- (void)testSchemeArgsAndEnvForTestActionArePassedToTestRunner
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestsWithArgAndEnvSettingsInTestAction/TestsWithArgAndEnvSettings.xcodeproj"
                                                     scheme:@"TestsWithArgAndEnvSettings"
                                               settingsPath:TEST_DATA @"TestsWithArgAndEnvSettingsInTestAction-TestsWithArgAndEnvSettings-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestsWithArgAndEnvSettingsInTestAction/TestsWithArgAndEnvSettings.xcodeproj"
                                                     target:@"TestsWithArgAndEnvSettingsTests"
                                               settingsPath:TEST_DATA @"TestsWithArgAndEnvSettingsInTestAction-TestsWithArgAndEnvSettings-TestsWithArgAndEnvSettingsTests-showBuildSettings.txt"
                                                       hide:NO],
     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestsWithArgAndEnvSettingsInTestAction/TestsWithArgAndEnvSettings.xcodeproj",
                       @"-scheme", @"TestsWithArgAndEnvSettings",
                       @"run-tests",
                       ];

    __block OCUnitTestRunner *runner = nil;

    [Swizzler whileSwizzlingSelector:@selector(runTestsWithError:)
                 forInstancesOfClass:[OCUnitTestRunner class]
                           withBlock:
     ^(id self, SEL sel){
       // Don't actually run anything and just save a reference to the runner.
       runner = [self retain];
       // Pretend tests succeeded.
       return YES;
     }
                            runBlock:
     ^{
       [TestUtil runWithFakeStreams:tool];

       assertThat(runner, notNilValue());
       assertThat(runner->_arguments,
                  equalTo(@[@"-TestArg", @"TestArgValue"]));
       assertThat(runner->_environment,
                  equalTo(@{@"TestEnvKey" : @"TestEnvValue"}));
     }];

    [runner release];
  }];
}

/**
 Xcode will let you use macros like $(SOMEVAR) in the arguments or environment
 variables specified in your scheme.
 */
- (void)testSchemeArgsAndEnvCanUseMacroExpansion
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestsWithArgAndEnvSettingsWithMacroExpansion/TestsWithArgAndEnvSettings.xcodeproj"
                                                     scheme:@"TestsWithArgAndEnvSettings"
                                               settingsPath:TEST_DATA @"TestsWithArgAndEnvSettingsWithMacroExpansion-TestsWithArgAndEnvSettings-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestsWithArgAndEnvSettingsWithMacroExpansion/TestsWithArgAndEnvSettings.xcodeproj"
                                                     target:@"TestsWithArgAndEnvSettingsTests"
                                               settingsPath:TEST_DATA @"TestsWithArgAndEnvSettingsWithMacroExpansion-TestsWithArgAndEnvSettings-TestsWithArgAndEnvSettingsTests-showBuildSettings.txt"
                                                       hide:NO],
     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestsWithArgAndEnvSettingsWithMacroExpansion/TestsWithArgAndEnvSettings.xcodeproj",
                       @"-scheme", @"TestsWithArgAndEnvSettings",
                       @"run-tests",
                       ];

    __block OCUnitTestRunner *runner = nil;

    [Swizzler whileSwizzlingSelector:@selector(runTestsWithError:)
                 forInstancesOfClass:[OCUnitTestRunner class]
                           withBlock:
     ^(id self, SEL sel){
       // Don't actually run anything and just save a reference to the runner.
       runner = [self retain];
       // Pretend tests succeeded.
       return YES;
     }
                            runBlock:
     ^{
       [TestUtil runWithFakeStreams:tool];

       assertThat(runner, notNilValue());
       assertThat(runner->_arguments,
                  equalTo(@[]));
       assertThat(runner->_environment,
                  equalTo(@{
                          @"RunEnvKey" : @"RunEnvValue",
                          @"ARCHS" : @"x86_64",
                          @"DYLD_INSERT_LIBRARIES" : @"ThisShouldNotGetOverwrittenByOtestShim",
                          }));

       NSMutableDictionary *expectedEnv = [NSMutableDictionary dictionary];
       [expectedEnv addEntriesFromDictionary:[[NSProcessInfo processInfo] environment]];
       expectedEnv[@"DYLD_INSERT_LIBRARIES"] = @"ThisShouldNotGetOverwrittenByOtestShim:/pretend/this/is/otest-shim.dylib";
       expectedEnv[@"RunEnvKey"] = @"RunEnvValue";
       expectedEnv[@"ARCHS"] = @"x86_64";

       assertThat([runner otestEnvironmentWithOverrides:@{
                   @"DYLD_INSERT_LIBRARIES" : @"/pretend/this/is/otest-shim.dylib"}],
                  equalTo(expectedEnv));
     }];

    [runner release];
  }];
}

- (void)testConfigurationIsTakenFromScheme
{
  [[FakeTaskManager sharedManager] runBlockWithFakeTasks:^{
    [[FakeTaskManager sharedManager] addLaunchHandlerBlocks:@[
     // Make sure -showBuildSettings returns some data
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library-WithDifferentConfigurations/TestProject-Library.xcodeproj"
                                                     scheme:@"TestProject-Library"
                                               settingsPath:TEST_DATA @"TestProject-Library-WithDifferentConfigurations-showBuildSettings.txt"],
     // We're going to call -showBuildSettings on the test target.
     [LaunchHandlers handlerForShowBuildSettingsWithProject:TEST_DATA @"TestProject-Library-WithDifferentConfigurations/TestProject-Library.xcodeproj"
                                                     target:@"TestProject-LibraryTests"
                                               settingsPath:TEST_DATA @"TestProject-Library-TestProject-LibraryTests-showBuildSettings-5.0.txt"
                                                       hide:NO],

     ]];

    XCTool *tool = [[[XCTool alloc] init] autorelease];

    tool.arguments = @[@"-project", TEST_DATA @"TestProject-Library-WithDifferentConfigurations/TestProject-Library.xcodeproj",
                       @"-scheme", @"TestProject-Library",
                       @"-sdk", @"iphonesimulator",
                       @"-arch", @"i386",
                       @"run-tests",
                       ];

    [TestUtil runWithFakeStreams:tool];

    assertThat([[[FakeTaskManager sharedManager] launchedTasks][0] arguments],
               equalTo(@[
                       @"-configuration",
                       @"TestConfig",
                       @"-sdk",
                       @"iphonesimulator6.1",
                       @"-arch",
                       @"i386",
                       @"PLATFORM_NAME=iphonesimulator",
                       @"-project",
                       @"xctool-tests/TestData/TestProject-Library-WithDifferentConfigurations/TestProject-Library.xcodeproj",
                       @"-target",
                       @"TestProject-LibraryTests",
                       @"OBJROOT=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-dcmgtqlclwxdzqevoakcspwlrpfm/Build/Intermediates",
                       @"SYMROOT=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-dcmgtqlclwxdzqevoakcspwlrpfm/Build/Products",
                       @"SHARED_PRECOMPS_DIR=/Users/fpotter/Library/Developer/Xcode/DerivedData/TestProject-Library-dcmgtqlclwxdzqevoakcspwlrpfm/Build/Intermediates/PrecompiledHeaders",
                       @"-showBuildSettings"
                       ]));
  }];
}

@end