text:
Trending City Guides
Birthright is meant to strengthen your Jewish identity, here's how it made mine shaky.
Photo: David Spinks
Rebecca Bellan
"Israel is for the Jews. It is a Jewish state," said Anan, our Birthright group leader. I had liked him a lot before he uttered those words. I wasn't prepared for this subtle prejudice, but realized then that I had been overlooking comments like these for ten days.
We were nearing the end of our free trip around Israel. Birthright is considered a "gift" to Jews around the world. It is meant to strengthen our Jewish identity while ensuring solidarity with the state of Israel. What they never outright say, but nonetheless drill into your head, is that they want you to "make Aliyah," to return to the Holy Land and increase Israel's numbers.
The first few days of our trip had me thinking that I could really move to Israel. The nature of the country alone was startlingly beautiful. Every landscape seemed limitless, despite the fact that Israel is such a small country. Immediately off the plane, our group was boarded onto a coach bus and driven to the tip of the Golan Heights. We stood on the border, looking out at Lebanon to our left, listening to bombs going off in Syria to our right.
For ten restless days, we toured the country on that bus, from the Tel Aviv to the Negev Desert, from the Banias Nature Reserve to Jerusalem. We went from stop to stop, climbing mountains before noon and sleeping somewhere different every night. One night in a hostel in Jerusalem, another night in a kibbutz by the Dead Sea, another in a Bedouin tent in the desert. Almost every time I took my seat on the bus, I'd fall asleep, like everyone else, only to be awoken by sweet Anan saying, "Wakey, wakey, everyone. Kosher food and eggs."
My days and nights blended together. We moved around so much that I couldn't keep track of which day we kayaked on the Jordan River and which day we watched the sun rise on the Masada. It didn't matter. I was making close friends and falling in love with the State of Israel.
Of course, I had been to Israel a few times before with my family, but never as a Jew. My father, a Christian Arab, is an Israeli citizen. He is the youngest of eight siblings, and therefore, the only one who can say that he was born in Israel, and not Palestine. Since my American-born mother is Jewish, I am a Jew, and was thus eligible to go on Birthright. When my group arrived at Ben Gurion airport in Tel Aviv, jet lagged and awkward around each other, Israelis all over the airport called out to us. "Hey, Taglit! Welcome home," they said. And I knew they meant it.
I've never been religious, or even a believer in God. However, there's something about being raised Jewish that sticks with you. It's cultural, and unless you're in the tribe, you don't get it. For years I had been the token Jew among my friends, enduring jokes about my curly hair or being cheap with a smirk and an equally racist remark. Now, in Israel, I loved how Jewish everything was. After being raised in a Puritan-based society where citizens question President Obama's Christianity as a condition of his presidency, it was refreshing to suddenly be somewhere where the norm is to party on Thursday night because Friday night is the start of the Shabbat, and Saturday is the day of rest. It was easier to eat kosher than not, and I didn't feel like I was teaching people about my heritage if I referred to anything I learned in Hebrew school.
We all shared an identity, a system of values that is old and traditional and ours. Who knew I was just an online application and an intense airport interrogation away from being stuck on a bus with 40 other Jews, all of us kvetching about the heat and sharing medicines from our personal pharmacies? I felt like I belonged, like I was with family. Who cares that there were packs of young soldiers with machine guns wandering about everywhere we went? There was a war going on, after all, and they were only protecting their country, right?
I was so caught up in enjoying this opportunity to be among "my people" that I almost forgot about my other people, my Arab side. An experience in Jerusalem provided me with a small reminder of just how unacceptable it is to be Arab in a Jewish state.
When our group arrived in the Holy City, an American man who had made Aliyah greeted us. He had a long beard and wore a kippah and was married to a conservative Jewish woman. Her hair and skin were covered and her hands rested on a stroller that carried their little Israeli citizen. I wasn't listening to whatever lesson the man was trying to impart on us anyway, so I strolled to a nearby shop for an iced coffee. Every other time I had been to Israel, I always spoke in Arabic. So when I began to greet the woman behind the counter, who couldn't have been much older than I, in the same tongue, she looked at me with hostility, like I was a terrorist.
"Ma?" She asked. "What?"
"An iced coffee, please?" I tried in English.
Her face broke out into a relieved smile. "Of course," she responded in English. "5 shekel, please."
I walked away feeling uneasy. It was odd to me that this woman would speak English over Arabic, considering that every Arab in Israel most likely speaks Hebrew, and that until 1948, possibly later, the primary language spoken in this region was Arabic. It was also odd to me just how many Israelis spoke English very well. I later learned that Jews begin English lessons in elementary school. Arabs in the same country don't begin their English lessons until middle school.
For the moment, I let that encounter roll off my shoulders. Our Israeli soldiers had arrived to join us for the rest of our trip, a part of the trip called Mifgash, and I was eager to meet them.
I got close to one in particular; he reminded me of family. His name was Noam, he was from Be'er Sheva, and he looked like an Arab — dark skin, black facial hair, hazel eyes. He said his family had lived in Be'er Sheva for centuries, hence his Middle Eastern features. Noam and I became fast friends as he took it upon himself to be my personal translator and haggler at the colorful and humming Machane Yehuda Market. Noam introduced me to a Jerusalem mixed grill, made of chicken hearts, liver and spleen and stuffed lovingly in a pita with salad and other fixings. He led the way into the caves of the archeological site, the City of David, and sang Destiny's Child in the dark to make me laugh. My mother would have nudged me in his direction and told me he was "a nice Jewish boy."
Noam spoke perfect English, but only a little Arabic. He knew enough to say, "Step out of the car, please." "Lift your shirt." And, "Close the door." Things a soldier would say to the enemy. He was also fairly religious for a young, Friends-watching Israeli. On Friday night, we held a Havdalah service, a ceremony that marks the end of the Shabbat and the beginning of the new week. Noam piously explained to me that the ceremony is meant to stimulate all five senses. We light a special havdalah candle to see the flame and feel its heat, we pass a cup of wine around to taste, we smell a bag of spices, and we hear the prayers.
On the day we went to Yad Vashem, the Holocaust museum in Jerusalem, Noam and I cried like babies while we watched videos from survivors. We held hands and walked through the museum a little ways back from the rest of the group.
"I am happy to live in a world where Jews finally have a home," he said.
I pretended to tie my shoe so that I could dislodge my hand from his grasp. I was thinking about my father, my grandmother, my family who call Israel home, yet are not Jewish. This was my first trip to Israel where I noticed a distinguished absence of Arabs, Muslim or Christian, from my prevailing Israeli landscape.
"Right, I'm grateful for that too," I said. "Especially after World War II. But what about the Arabs who lived here peacefully with Jews and Christians for centuries before Great Britain carved up the land with little regard for cultural territories?"
He smiled at me like I was a child who had asked an adorable question with an obvious answer.
"The Arabs have their land," said Noam. "God blessed Ishmael and his sons and promised them that their descendants would have a great nation. But Israel is for the Jews, the chosen people."
"You're quoting the Bible now?" I asked, incredulous.
"Of course," he replied with a furrowed brow. "God has given us the State of Israel. It was prophesied that we would lose Israel for our sins, which we have, but we would have to fight for our land, which would one day be restored to us, which it has. Didn't they teach you anything in Hebrew school?"
"Do you know what we call people who use the Bible as a basis for a social and political argument in my country?" I asked.
He looked at me, waiting.
"Idiots!" I exclaimed. "Don't you have separation of church and state, or whatever?"
"No, we are a Jewish state."
"And my family? All those who remain here, degraded to near second-class citizens?"
"They are not second class," he said, defensively. "Arabs can practice whatever religion they want and live among us. But they will live under our law."
I didn't respond. I didn't know quite how I felt about this conflict inside me. Noam seemed brain washed. Now that I thought about it, many of the Israelis we met seemed ignorantly one-sided. Not necessarily outright hateful, but definitely nationalistic, which history tells us is never a good quality for a population to have. I suppose you might need to feel that way if you were risking your life for your country and there was no way out of it. We had had many group discussions about the importance of the Israeli draft, something Arab citizens are exempt from, and the general consensus among our young Israelis was that they were proud to serve their country and protect their borders.
Noam and I walked silently back to the group, hands at our sides.
After Yad Vashem, our group leaders drove us to Mount Herzl, Israel's national cemetery, named after Theodor Herzl, the founder of modern Zionism. We paid our respects to the thousands of neat, gardened plots and rock-anointed graves that covered military casualties, some very recent. Anan led us over to a large patch of grass among the gravestones.
"Does anyone know why there is so much open space here?" he asked, arms stretched wide.
One of the girls in the group raised her hand and said, "To make room for more bodies."
"Exactly," said Anan. "Our war is far from over."
That day, the Israelis left our group for their respective homes. Noam promised to keep in touch and try to visit me, which to his credit, he did, but I wasn't as interested in being his friend. His views felt like an attack on a large part of me. I was proud to be a Jew, but I was also proud to be an Arab.
On the bus, Anan was on one of his spiels, so I was somewhere between staring out the window and dozing off. I perked up when he said, "Israel is for the Jews. It is a Jewish state."
Again with this? I thought. Anan was sitting on his knees facing the seat behind him across the aisle from me. I don't remember whom he was trying to brainwash.
"Anan," I called. He looked at me from under his cowboy hat. "I've told you about my father before, haven't I? He is a Christian Arab and he and his family have lived here in Israel, well, it was Palestine before, for generations. How do you fit Christians who call this land home into your Jewish state?"
"The Arabs don't want to be a part of the State of Israel," he said, throwing his hands into the air. "They cannot assimilate."
"Why should they have to assimilate? They've lived here longer than all of the European Jews who immigrated here after the War."
He started wagging his forefinger at me, smirked, and said, "Arabs are loyal to Arabs over the State of Israel. You ask your father where he lives, and he will say, 'Israel.' You ask him what he is, what his identity is, and he will say 'I am an Arab.'"
A few days later, Birthright was over, and I had extended my stay in the country to visit my family in Kafr Kanna, an Arab town in lower Galilee, where you're just as likely to be woken up by church bells as by the mosque's call to prayer. My dad moved back home a few years ago, so this would be the first time I saw him. After a tearful reunion, we set off towards the Israel that I was used to.
Kafr Kanna was a lot smaller than I remembered it, and a lot uglier than the beautiful Jewish towns and cities we had visited during our tour. The streets were tight with sand-colored buildings and old cars. Everything from the shops and restaurants to the clothes people in the streets wore seemed like hand-me-downs. After spending time among the snow-white stone temples in Tzfat and the metropolitan haven of Tel Aviv, Kanna felt like kind of a dump. But this dump was home, and I was happy to be back with my family.
Later that night, over a meal of jaaj maashi, stuffed chicken, I asked my father, "Where do you live?"
"I live in Israel," he said, with an indulgent smile.
"And what are you? What is your identity?"
"I am an Israeli citizen, habibti."
More on Israel
From markets to the Masada, these are the most exciting experiences in Israel
Rob Chursinoff
Dear travelers to Israel: please don't visit until you've understood these 11 things
13 signs you've become culturally Israeli
Elena Zakomoldina-Fitoussi
10 customs you should know before studying abroad or traveling in Israel
Tomi Clark
8 American habits I lost when I moved to Israel
Stephanie Kempker
16 differences between a normal friend and an Israeli friend
This Israeli cafe gives half-off for Jews and Arabs who eat together
Matt Hershberger
Long before karaoke came to Israel, there were public sing-alongs
PRI's The World
Watch what happened when one of Israel's biggest soccer teams signed two Muslims
Carlo Alcos
11 things I wish I knew before moving to Tel Aviv
Party like it's the first century: How to celebrate Christmas and Hanukkah in Israel
9+ of the most peculiar spots in Israel
Marta Nightingale-Stycen
More on Student Work
The 17 funniest expressions in Swedish (and how to use them)
Madelaine Triebe
What NOT to do in Memphis
Lauren Hom
On disabled vets, Washington peaks, and dog tags
Joseph Epperson
Photo + Video + Film
Story behind the shot: Isle of Ometepe
Blaze Nowara
What to do when your parents come visit you in Buenos Aires
Talia Samuelson
7 things LGBT travelers are sick of hearing
Ben Lambert
How to piss off a lesbian traveler
Meg Cale
9 things I learned by falling in love with a Spaniard
Dayana Aleksandrova
11 reasons you should never date a Korean guy
Jill Kozak
30 Instagrammers promoting unconventional travel that you can relate to
Sarah de los Cobos
The 20 funniest Portuguese expressions (and how to use them)
Sandra Guedes
Hook yourself up with a last-minute flight upgrade with this new app
Laura Veariel
Be a local. Wherever you go.
Fearless travel in your inbox.
Join our tribe of millions.
Submit your work to Matador!
Matador's growing Creators Community is the place to connect with fellow travel journalists.
We use cookies to understand how you use our site and to improve your experience. This includes personalizing content and advertising. For more information on how we use cookies consult our revised Privacy Policy and Terms of Service.
Disable Cookies I accept


Nilakkal will be made the base camp for pilgrims during the 2018-19 mandalam-makaravilakku pilgrimage season at the Ayyappa Temple in Sabarimala, Devaswom Minister Kadakampally Surendran said on Tuesday.
The decision was formalised at a meeting held to review post-flooding reconstruction of Pampa on the foothills and measures to restore amenities in and around the hill shrine.
Private vehicles will be permitted only till Nilakkal during the season. The Kerala State Road Transport Corporation will operate 250 buses from Nilakkal to Pampa during the season which commences on November 16. During the season, only temporary amenities will be provided at Pampa.
The state government has commenced a reconstruction project in and around Pampa which was battered by the flood last month. Bridges and pilgrim facilities have suffered severe damages. Personnel of Tata Projects Limited, entrusted with the reconstruction works, are in Sabarimala. Power supply in the region is yet to be restored. The Health Department is set to commence restoration work at the government hospital in Pampa.
The government has sanctioned Rs 200 crore for repairing of roads leading to Sabarimala. A meeting of chief ministers and devaswom ministers of south Indian states will be called to review preparedness ahead of the season.


Our Store has hundreds of products and accents for dwelling and backyard, masking every aspect of gardening. Attain these potential new prospects who'll be descending on the Minneapolis Residence + Backyard Present. People in Minneapolis visit the house show to turn out to be inspired, knowledgeable and energized with useful recommendation, hundreds of options and the best new products. The web makes it easy to buy today since websites present photograph of products, with accompanying descriptions and costs. The Minneapolis Dwelling + Garden Present will return February 24-26 & March 3-5, 2017. Should you go all the way down to the local ironmongery store you will be able to choose up this easy gasket for.99c and you will be able to restore the one you have and will probably be good as new.
Folks buy many equipment for the better look of the home and backyard like mattress, lamps, flower vase, aquarium and many others. Folks in Winnipeg go to the home present to turn out to be inspired, knowledgeable and energized with helpful recommendation, thousands of options and the coolest new products.
Meredith's broadcasting division started producing the television program Better within the fall of 2007, which is a life-style show which has a mixture of content material from Meredith's varied magazine titles (included BH&G), client advice and superstar interviews.
Having a timber door on the entrance of your garden and a timber window at the wall behind the backyard offers it a royal eco-pleasant look. Individuals in Oaks visit the house and garden present to turn into inspired, informed and energized with helpful advice, thousands of solutions and the good new merchandise. Attain these potential new customers who'll be descending on the Philly Dwelling + Backyard Show. Attain these potential new prospects who'll be descending on the Winnipeg House + Garden Present. The fundamental finish dimension is a 3/four garden-and-backyard thread where it connects to your backyard faucet.


Subject: Re: How Dangerous is STEAM, really? - moreso than Bill Macher thinks.
> electric element would be.
> question back at Steve.
tun.  That explains why it's a steam-RIMS.  Thanks for the explanation Bill.
> "I'd strongly advise against amateur built pressurized steam systems."
and I just don't see that for amateur built pressurized steam systems.
plumbing holes, added stresses and  no calculation of the strength.
are working to a recognized spec.
>Keep all the safeties in place and you should be fine.
downside is boiler shrapnel in your body or 3rd degree burns ?
carries a b*ttload of BTUs and burn potential.
I'm not being ultra consevative - steam carries serious hazards.
much more amenable to amateur efforts than a steam system.
> possible use of steam in their home-brewing process.
hard knocks which means it's no place for guesswork.
the energy needed to heat water from body temp to 100C.
sleeve near a spinning  PTO would you ?
steeping you are supposed to only bring the water up to 170 degrees."
happens whenever the temperature is high and the pH rises to above 6.0.
Brown's procedure wasn't one that I've  used, it should work fine.
Lou King asked about RIMS cleaning- specifically CIP.
water thru the RIMS after use.  Just before next use, I usually recirc.
>a PID.  Anyone doing this?
>Source for heating elements, relays, PIDs?
bent back on themselves.  Regular elements work fine for the HLT.
Subject: RE:  starch test using iodophor?
iodophor be used to do a starch test when mashing?
said he had no experience using plug hops.
tend to float, I'll just gently stir them in (get thee back, HSA demon!!
smoother, so it doesn't seem like it's more bitter.
water somewhere and this is the only thing of which I can think.
Subject: Re: starch test using iodophor?
gave up on the iodine test years ago -- it just seems unnecessary.
experiment.  Bring a pot of water to a boil on the stove with the lid on.
the digest and tell us how harmless the "low pressure" steam was.
above if you don't believe me.
without getting burned".  That's because there's no steam in a steam room.
is MUCH higher than just simply heating water.
>iodophor be used to do a starch test when mashing?
Yes.  However, allowance must be made for the color of the iodophor.
Use the underside of a white coffee mug or other white ceramic surface.
in the iodophor and used directly.
portion only.  Helps to use a magnifying glass.
1)	Do you recirculate during the entire mash?
2)	Does your system heat the grist with hot water?
If you can answer "yes" to both of these questions, then you have a RIMS.
If you answer "no" to either one, you do not.  Plain and simple.
no matter how you heat it.
and no way to introduce heat once the initial mashin has occurred.
associate with a RIMS system.
>43 pounds of grain in mine, but I wouldn't reccomend much over 35 pounds.
How much water are you using Steve?
I thought mine was full with 22 lbs!
I had about 1.25 quarts of water per lb.
burns because, on top of the fact that pressurized steam is "superheated,"
its latent heat of vaporization to your skin when it hits it.
that fits right into the welded valve port.
And I bet I saw the gadget somewhere else, too.
a way to use the valve port.
43 pounds of grain in mine, but I wouldn't recommend much over 35 pounds."
We make the beer we drink!!!!
Subject: Why can steam be safe?
Assumptions...assumptions...always gotta be careful when making assumptions!
Modification of the pressure cooker is NOT necessary.
steam will get hot though...be careful of hot piping!
providing steam to your brewing process.
her...and after heating up for a while it did just that very thing!
Believe me, that can put the fear of steam into ya' !
stand...certainly scares me a lot more than my pressure cooker!
sure how it ranks against homebrewing stuff like StarSan and Iodophor).
thorough rinse, you could end up with some off flavors.
At least he pushed for plain, unscented stuff.
any of your brewing texts.
Lou King  asked if his new temp controller would work for a RIMS setup.
> 'simple setpoint/deadband'.  The BB&MB folks said this should work.
> My question is, did I make a mistake or will this work 'just fine'?
> simply fiddling with the deadband (snip)?
ETC sensor  to avoid short cycling with the differential set to the minimum.
is used to switch the heating element.
ETC will control to your target temp.
>and I just don't see that for amateur built pressurized steam systems.
>plumbing holes, added stresses and  no calculation of the strength.
they should not be made!
A moot point since no modifications need to be made.
>are working to a recognized spec.
> >Keep all the safeties in place and you should be fine.
>downside is boiler shrapnel in your body or 3rd degree burns ?
>carries a b*ttload of BTUs and burn potential.
since no modification of the pressure cooker is required or desired.
>I'm not being ultra consevative - steam carries serious hazards.
>much more amenable to amateur efforts than a steam system.
Good advice, but don't just limit this advice to the application of steam.
> >you will be fine.
>hard knocks which means it's no place for guesswork.
>the energy needed to heat water from body temp to 100C.
energy from one place to the other..that is the beauty of steam.
one. At least under real world conditions.
>sleeve near a spinning  PTO would you ?
buy those tractors, don't we?
if it burns enough of you.
the professional with experience. Leave all the original safeties in place.
HOT. 240 degrees F or thereabouts.
and totally believe, and follow to the letter Steve's advice!
For what it's worth, this is my experience speaking.
how to make this usable again???


At Stress Free Junk Removals, we specialize in all forms of junk removal and cleanout. No job is too big or too small, and whether you need assistance with a small residential cleanout or estate job or a large corporate project like an office building or apartment complex, we stand ready and able to help.
No matter what the situation or size of your residential property, Stress Free Junk Removals will quickly and professionally handle all of your waste and rubbish removal needs, at a reasonable price.
Whether you need assistance at a single site or are in need of a massive corporate clean-up operation, Stress Free Junk Removals can help. Their professional removal specialists get the work done quickly and at a reasonable cost.
Custom Site Rubbish Removals – Even if you need junk removal or clean-out service in a non-standard location, Stress Free Junk Removals can still help. We can accommodate you if you are in need of regular scheduled service as well, and will design a custom removal solution that fits your needs, circumstances, and budget for any problem you may face. Contact them today to speak with one of their expert staff about your removal and clean out needs, or to request a free quotation on your project.


In any family matter, whether you mediate, collaborate, or go to trial, the attorneys at Griffith & Kelly, LLC will make sure you are making an informed decision about the many difficult issues that will affect you and your family.
We work to achieve a good result for you and your family, utilizing our investigative and discovery techniques to ensure all financial information is disclosed. We will address all of your questions and issues concerniing child custody issues, health insurance rights and the proper valuation of businesses, assets, and debts.
Child custody is determined based upon the best interests of the child. Most family courts in Connecticut presume that it is in the child's best interest to have parental guidance and support from both parents. Therefore, joint custody is commonly awarded in child custody disputes. However, joint custody is more complicated than many parents believe.
Joint physical custody: Physical custody pertains to the actual residence of the child. While one parent will typically have primary physical custody, the child may still reside much of the time with the other parent, such as on weekends, holidays, and other times designated in a custody agreement.
Joint legal custody: Decision making powers are essential to the welfare of a child and the involvement of the parents. Joint legal custody enables both parents to be involved in making major decisions, such as those involving healthcare, education, religion, and other life decisions. Daily decisions are typically made by the parent with primary physical custody.
Sole custody: While sole custody is not common in Connecticut, it is occasionally in the child's best interest. If there is a history of abuse, neglect, drug abuse, alcohol dependence, or other serious problems, it may be necessary to fight for sole physical and legal custody.
We help our clients understand the applicable laws. We are supportive of their needs and concerns while working to negotiate an effective child custody agreement which is in the child's best interest as well as yours. Our first consultation in your case is always free.


Invite the traditional Americana colors of red, navy blue and tan intro your home or retreat with the quilted Patriotic Patch Sham. Eye-catching with assorted patchwork blocks, this euro sham is sure to be enjoyed for years to come.
The Patriotic Patch Shams are 100% cotton shell and batting. Machine pieced, hand stitched quilting. Backing has 3" overlap with 3-button closure to conceal pillow insert, plus extra button sewn to inseam for maintenance.
The Euro Fabric Sham is square with knife-edge finish. Back features 3" overlap and 3 buttons to conceal pillow insert, plus an extra button sewn to the inside lining for maintenance.
Euro Fabric Sham 26" x 26"


text:
import { Template } from 'meteor/templating';
import { $ } from 'meteor/jquery';
import { _ } from 'meteor/erasaur:meteor-lodash';
import { ReactiveVar } from 'meteor/reactive-var';
import { AcademicPlans } from '../../../api/degree-plan/AcademicPlanCollection';
import { Courses } from '../../../api/course/CourseCollection';
import { CourseInstances } from '../../../api/course/CourseInstanceCollection';
import { Opportunities } from '../../../api/opportunity/OpportunityCollection';
import { OpportunityInstances } from '../../../api/opportunity/OpportunityInstanceCollection';
import { Reviews } from '../../../api/review/ReviewCollection';
import { Semesters } from '../../../api/semester/SemesterCollection';
import { sendEmailMethod } from '../../../api/analytic/Email.methods';
import { Slugs } from '../../../api/slug/SlugCollection';
import { StudentProfiles } from '../../../api/user/StudentProfileCollection';
import { Users } from '../../../api/user/UserCollection';

const iceMap = {
  i: {
    name: 'Innovation', color: '#80ad27',
    low: 'You are lacking in Innovation! Consider adding some research opportunities or other'
      + ' innovation-related activities to strengthen this area.',
    med: 'You are showing growth in Innovation. Consider adding some research opportunities or other'
      + ' innovation-related activities to strengthen this area.',
    high: 'You are close to achieving 100 points in Innovation! Add a few more innovation-related opportunities'
      + ' to top this area off.',
  },
  c: {
    name: 'Competency', color: '#26407c',
    low: 'You are lacking in Competency. Go to your Degree Planner and flesh out your academic plan by adding'
      + ' more courses to strengthen this area.',
    med: 'You are showing some Competency in your degree plan. Go to your Degree Planner and flesh out your'
      + ' academic plan by adding more courses.',
    high: 'You are showing great Competency! Add a few more courses to get to 100 points.',
  },
  e: {
    name: 'Experience', color: '#952263',
    low: 'You are lacking in Experience! Add some profession-related opportunities to show'
      + ' that you are ready to work in a professional environment.',
    med: 'You have some professional development in your degree plan. To increase your Experience points'
      + ' and show that you are ready to work in a professional environment, add some profession-related'
      + ' opportunities.',
    high: 'You are showing a great amount of Experience in your degree plan! Add a few more'
      + ' profession-related opportunities to top this area off and reach 100 Experience points!',
  },
};

const levelMap = {
  1: 'You are currently level 1. To get to level 2, finish your first semester of ICS'
    + ' coursework and then go see your advisor to confirm the completion of your courses and pick up'
    + ' a new laptop sticker!',
  2: 'You are currently level 2. To get to the next level, complete your second semester of ICS'
    + ' coursework, though that alone may not be enough! Venture out and complete some opportunities, get them'
    + ' verified by your advisor, and then you may find yourself at the next level.',
  3: 'Now that you are well into your academic career, it\'s time to plan further'
    + ' ahead. Complete your degree plan by adding enough courses and opportunities to reach 100 ICE points. Finish'
    + ' a bit more coursework and get a few more verified opportunities, and you\'ll get to level 4! Don\'t forget'
    + ' to update your RadGrad profile too... That new sticker depends on it.',
  4: 'At level 4, you have not only shown great competency through your coursework, but you have also shown'
    + ' innovation and experience through your opportunities. Continue with your curriculum, focus on verifying even'
    + ' more opportunities, and help your peers out by leaving reviews for courses and opportunities'
    + ' that you have completed. By doing so, you may find yourself at a rare level.',
  5: 'You are a veteran in the ICS community. The finish line is in sight, at least for your undergraduate career.'
    + ' But don\'t slow down! Take part in more opportunities to really show that you are ready for a professional life'
    + ' after college, and don\'t forget to leave more reviews to help guide your peers to the next level. There is a'
    + ' possibility that at the end of all this, you will achieve the rarest RadGrad honor.',
  6: 'You have reached the level of ICS elites. At level 6, you have shown that there is little holding you back'
    + ' from a successful future in computer science, whether it\'s joining the workforce or entering Graduate School.'
    + ' Congratulations on your journey! If you have not already done so, pick up your new RadGrad sticker and show it'
    + ' off proudly!',
};

function iceRecHelper(student, value, component) {
  let html = '';
  if (value >= 100) {
    html += `Congratulations! You have achieved 100 ${iceMap[component].name} points!`;
    return html;
  } if (value < 30) {
    html += iceMap[component].low;
  } else if (value < 60) {
    html += iceMap[component].med;
  } else {
    html += iceMap[component].high;
  }
  const studentInterests = Users.getInterestIDs(student.userID);
  if (component === 'c') {
    if (studentInterests.length === 0) {
      html += ' '
        + ' Add some interests so we can provide course recommendations!';
      return html;
    }
    const relevantCourses = _.filter(Courses.findNonRetired(), function (course) {
      if (_.some(course.interestIDs, interest => _.includes(studentInterests, interest))) {
        return true;
      }
      return false;
    });
    const currentCourses = _.map(CourseInstances.find({ studentID: student.userID }).fetch(), 'courseID');
    const recommendedCourses = _.filter(relevantCourses, course => !_.includes(currentCourses, course._id));
    if (recommendedCourses.length === 0) {
      html += ''
        + ' Add more interests so we can provide course recommendations!';
      return html;
    }
    const recCourse = recommendedCourses[0];
    html += ' Check out';
    html += '<a style="color: #6FBE44; font-weight: bold;"'
      + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}`
      + `/explorer/courses/${Courses.getSlug(recCourse._id)}"> ${recCourse.shortName}</a>`;
  } else {
    if (studentInterests.length === 0) {
      html += ' '
        + ' Add some Interests to your profile so we can provide opportunity recommendations!';
      return html;
    }
    const opps = _.filter(Opportunities.findNonRetired(), function (opp) {
      return opp.ice[component] > 0;
    });
    const relevantOpps = _.filter(opps, function (opp) {
      if (_.some(opp.interestIDs, interest => _.includes(studentInterests, interest))) {
        return true;
      }
      return false;
    });
    if (relevantOpps.length === 0) {
      return ' '
        + ' Add more Interests to your profile so we can provide opportunity recommendations!';
    }
    const currentOpps = _.map(OpportunityInstances.find({ studentID: student.userID }).fetch(), 'opportunityID');
    const recommendedOpps = _.filter(relevantOpps, opp => !_.includes(currentOpps, opp._id));
    let recOpp;
    if (recommendedOpps.length === 0) {
      recOpp = relevantOpps[0];
    } else {
      recOpp = recommendedOpps[0];
    }
    html += ' Check out';
    html += '<a style="color: #6FBE44; font-weight: bold;"'
      + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}`
      + `/explorer/opportunities/${Opportunities.getSlug(recOpp._id)}"> ${recOpp.name}</a>`;
  }
  return html;
}

function iceRecommendation(student) {
  const ice = StudentProfiles.getProjectedICE(student.username);
  if (ice.i >= 100 && ice.c >= 100 && ice.e >= 100) {
    return '';
  }
  const html = {};
  html.header = 'Finish Your Degree Plan';
  html.info = '
To achieve a complete degree plan, obtain 100 points in each ICE component!
';
  _.each(ice, function (value, component) {
    let iceLevel = '';
    if (value < 30) {
      iceLevel = 'NEEDS WORK';
    } else if (value < 60) {
      iceLevel = 'NEEDS WORK';
    } else {
      iceLevel = 'GOOD';
    }
    html.info += `
${iceMap[component].name} (${value} points)
      : ${iceLevel}
`;
    html.info += `<ul><li>${iceRecHelper(student, value, component)}</li></ul>`;
  });
  return html;
}

function levelRecommendation(student) {
  if (student.level > 5) {
    return '';
  }
  const html = {};
  html.header = 'Level Up and Upgrade Your RadGrad Sticker';
  html.info = '<img src='
    + `"https://radgrad.ics.hawaii.edu/images/level-icons/radgrad-level-${student.level}-icon.png"`
    + ' width="100" height="100" style="float: left; margin: 0 10px;">';
  html.info += `<p style="color: #6FBE44;"><strong>Current Level: ${student.level}</strong></p>`;
  html.info += '
Swing by your advisor\'s office or POST 307 to pick up a laptop sticker for'
    + ' your current level if you haven\'t already!
';
  html.info += `<p>${levelMap[student.level]}</p>`;
  if (student.level < 6) {
    html.info += '
View your <a style="color: #6FBE44; font-weight: bold" '
    + `href="https://radgrad.ics.hawaii.edu/student/${student.username}/home/levels">Level Page</a>`
      + ' to view specific level requirements.
';
  }
  return html;
}

function verifyOppRecommendation(student) {
  const unverifiedOpps = OpportunityInstances.find({ studentID: student.userID, verified: false }).fetch();
  const currentUnverifiedOpps = _.filter(unverifiedOpps, function (unverifiedOpp) {
    const { semesterID } = unverifiedOpp;
    const { semesterNumber } = Semesters.findOne({ _id: semesterID });
    if (semesterNumber <= Semesters.getCurrentSemesterDoc().semesterNumber) {
      return true;
    }
    return false;
  });
  if (currentUnverifiedOpps.length === 0) {
    return '';
  }
  const html = {};
  html.header = 'Verify Your Opportunities';
  html.info = '
You have unverified opportunities. To verify them, visit your RadGrad Degree Planner and'
    + ' click on the opportunity with the red question mark.'
    + '  Select '
    + 'the opportunity you want to verify in your planner'
    + ' and it should be displayed in the Details tab, along with an option at the bottom to request verification.'
    + ' You must supply a brief explanation of how you participated. There may be additional requirements in addition '
    + 'to requesting the verification. Here is a list of'
    + ' past or current opportunities that you have not yet verified:
';
  html.info += '
';
  _.each(currentUnverifiedOpps, function (unverifiedOpp) {
    const { semesterID } = unverifiedOpp;
    const semesterName = Semesters.toString(semesterID, false);
    const opp = Opportunities.findOne({ _id: unverifiedOpp.opportunityID });
    const oppSlug = Opportunities.getSlug(opp._id);
    html.info += '
<a style="color: #6FBE44; font-weight: bold"'
      + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}`
      + `/explorer/opportunities/${oppSlug}">${opp.name} (${semesterName})</a></li>`;
  });
  html.info += '
';
  return html;
}

// This is messy code, but is more accurate than the current implementation in the planner.
function completePlanRecommendation(student) {
  const studentPlan = student.academicPlanID;
  if (!studentPlan) {
    return '';
  }
  // the course list for the student's academic plan
  let reqList = _.map(AcademicPlans.findOne({ _id: studentPlan }).courseList, function (course) {
    let courseSlug;
    // remove dashes at end of each course element
    if (_.includes(course, '-')) {
      courseSlug = course.substring(0, course.indexOf('-'));
      return courseSlug;
    }
    return course;
  });
  // divide choices within an array
  reqList = _.map(reqList, function (choices) {
    const parensChoices = choices.match(/(?:\()[^]*?(?:\))/g);
    let nonParensChoices = choices;
    _.each(parensChoices, function (choice) {
      nonParensChoices = nonParensChoices.replace(choice, '');
    });
    nonParensChoices = _.filter(nonParensChoices.split(','), course => !(course === ''));
    if (parensChoices) {
      return parensChoices.concat(nonParensChoices);
    }
    return nonParensChoices;
  });
  // partition courseList into two arrays: one with 00+ electives and the other without
  const reqListPartition = _.partition(reqList, function (choices) {
    let hasElec = false;
    _.each(choices, function (choice) {
      if (_.includes(choice, '00+')) {
        hasElec = true;
      }
    });
    return !hasElec;
  });
  const studentCourseList = _.map(CourseInstances.find({ studentID: student.userID }).fetch(), function (instance) {
    return Courses.getSlug(instance.courseID);
  });
  const remainingStudentCourses = [];
  _.each(studentCourseList, function (course) {
    const duplicateChoiceIndices = [];
    _.each(reqListPartition[0], function (choices, index) {
      if (_.some(choices, choice => _.includes(choice, course))) {
        duplicateChoiceIndices.push(index);
      }
    });
    if (duplicateChoiceIndices.length > 1) {
      _.each(duplicateChoiceIndices, function (index) {
        _.remove(reqListPartition[0][index], function (choice) {
          return _.includes(choice, course);
        });
      });
      _.pullAt(reqListPartition[0], duplicateChoiceIndices[0]);
    } else if (duplicateChoiceIndices.length === 1) {
      _.pullAt(reqListPartition[0], duplicateChoiceIndices[0]);
    } else {
      remainingStudentCourses.push(course);
    }
  });
  _.each(remainingStudentCourses, function (course) {
    const electified = course.replace(/\d(?=\d?$)/g, '0');
    let choiceIndex;
    _.each(reqListPartition[1], function (choices, index) {
      if (_.some(choices, choice => _.includes(choice, electified))) {
        choiceIndex = index;
        return false;
      }
      return true;
    });
    if (choiceIndex >= 0) {
      _.pullAt(reqListPartition[1], choiceIndex);
    }
  });
  const remainingReqs = _.flatten(reqListPartition);
  if (remainingReqs.length === 0) {
    return '';
  }
  const html = {};
  html.header = 'Complete Your Academic Plan';
  const planDoc = AcademicPlans.findOne({ _id: student.academicPlanID });
  const planName = planDoc.name;
  const slugName = Slugs.getNameFromID(planDoc.slugID);
  html.info = '
Your Current Academic Plan: <a style="color: #6FBE44; font-weight: bold"'
    + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}/explorer/plans/${slugName}">`
    + `${planName}</a></p>`;
  html.info += '
Your degree planner shows that you do not'
    + ' have all required coursework planned out yet. Head over to your'
    + ' <a style="color: #6FBE44; font-weight: bold;"'
    + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}/degree-planner">RadGrad degree planner</a>`
    + ' to complete your academic plan, or click on your plan above to find out more information.'
    + ' Provided below is a list of required coursework that you are currently missing.'
    + ' Make sure to double-check the requirements with your advisor!
';
  if (remainingReqs.length > 0) {
    html.info += '
Missing Requirements:
';
    html.info += '
';
    _.each(remainingReqs, function (req) {
      const requirement = (req.toString().toUpperCase()).replace(/,/g, ' or ').replace(/_/g, ' ');
      html.info += `<li style="color: red;">${requirement}</li>`;
    });
    html.info += '
';
  }
  return html;
}

function reviewCourseRecommendation(student) {
  const completedCourses = _.map(CourseInstances.find({ studentID: student.userID, verified: true }).fetch(),
    function (instance) {
      return instance.courseID;
    });
  const nonReviewedCourses = _.filter(completedCourses, function (courseID) {
    return !(Reviews.findOne({ studentID: student.userID, revieweeID: courseID }));
  });
  if (nonReviewedCourses.length === 0) {
    return '';
  }
  let suggestedReviewCourses = [];
  const remainingCourses = [];
  _.each(nonReviewedCourses, function (courseID) {
    if (Reviews.findOne({ revieweeID: courseID }) === undefined) {
      suggestedReviewCourses.push(courseID);
    } else {
      remainingCourses.push(courseID);
    }
  });
  suggestedReviewCourses = suggestedReviewCourses.concat(remainingCourses);
  const html = {};
  html.header = 'Review Courses You Have Completed';
  html.info = '
Contribute to the ICS community by providing reviews for courses you have completed.'
    + ' Here are some suggested courses to review:
';
  html.info += '
';
  _.each(suggestedReviewCourses, function (courseID, index) {
    if (index === 3) {
      return false;
    }
    const courseSlug = Courses.getSlug(courseID);
    const courseName = Courses.findDocBySlug(courseSlug).shortName;
    html.info += '
<a style="color: #6FBE44; font-weight: bold"'
      + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}`
      + `/explorer/courses/${courseSlug}">${courseName}</a></li>`;
    return true;
  });
  html.info += '
';
  return html;
}

function reviewOppRecommendation(student) {
  const completedOpps = _.map(OpportunityInstances.find({ studentID: student.userID, verified: true }).fetch(),
    function (instance) {
      return instance.opportunityID;
    });
  const nonReviewedOpps = _.filter(completedOpps, function (oppID) {
    return !(Reviews.findOne({ studentID: student.userID, revieweeID: oppID }));
  });
  if (nonReviewedOpps.length === 0) {
    return '';
  }
  let suggestedReviewOpps = [];
  const remainingOpps = [];
  _.each(nonReviewedOpps, function (oppID) {
    if (Reviews.findOne({ revieweeID: oppID }) === undefined) {
      suggestedReviewOpps.push(oppID);
    } else {
      remainingOpps.push(oppID);
    }
  });
  suggestedReviewOpps = suggestedReviewOpps.concat(remainingOpps);
  suggestedReviewOpps = _.uniq(suggestedReviewOpps);
  const html = {};
  html.header = 'Review Opportunities You Have Completed';
  html.info = '
Contribute to the ICS community by providing reviews for opportunities you have completed.'
    + ' Here are some suggested opportunities to review:
';
  html.info += '
';
  _.each(suggestedReviewOpps, function (oppID, index) {
    if (index === 3) {
      return false;
    }
    const oppSlug = Opportunities.getSlug(oppID);
    const oppName = Opportunities.findDocBySlug(oppSlug).name;
    html.info += '
<a style="color: #6FBE44; font-weight: bold"'
      + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}`
      + `/explorer/opportunities/${oppSlug}">${oppName}</a></li>`;
    return true;
  });
  html.info += '
';
  return html;
}

function visitMentorRecommendation(student) {
  const html = {};
  html.header = 'Visit The Mentor Space';
  html.info = '
Connect with RadGrad mentors to learn more about future opportunities and careers, or if you simply'
    + ' have questions regarding your current degree track. Visit the <a style="color: #6FBE44; font-weight: bold"'
    + ` href="https://radgrad.ics.hawaii.edu/student/${student.username}/mentor-space">Mentor Space</a>`
    + ' page to get started!
';
  return html;
}

const recList = [iceRecommendation, verifyOppRecommendation, levelRecommendation, completePlanRecommendation,
  reviewCourseRecommendation, reviewOppRecommendation, visitMentorRecommendation];

/*
 * Each recommendation function returns html. If '' is returned, then that recommendation will not be
 * included in the recommendation list. There is currently no catch for when there are fewer than three
 * recommendations, which is the amount listed in the newsletter. If there are fewer than three (which is
 * extremely rare, and only for very accomplished RadGraduates), then only those recommendations will be listed,
 * with blank table rows in the newsletter. There is at least one guaranteed recommendation, which is the
 * mentor space recommendation.
 */
function getRecList(student) {
  const suggestedRecs = [];
  _.each(recList, function (func) {
    const html = func(student);
    if (html) {
      suggestedRecs.push(html);
    }
  });
  return suggestedRecs;
}

Template.Generate_Newsletter_Widget.onCreated(function generateNewsletterWidgetOnCreated() {
  this.testEmailStatus = new ReactiveVar('');
  this.levelEmailStatus = new ReactiveVar('');
  this.sendAllEmailStatus = new ReactiveVar('');
  this.adminMessage = new ReactiveVar('');
  this.adminWorking = new ReactiveVar(false);
  this.studentsWorking = new ReactiveVar(false);
  this.allStudentsWorking = new ReactiveVar(false);
});

Template.Generate_Newsletter_Widget.helpers({
  testEmailStatus() {
    return Template.instance().testEmailStatus.get();
  },
  levelEmailStatus() {
    return Template.instance().levelEmailStatus.get();
  },
  sendAllEmailStatus() {
    return Template.instance().sendAllEmailStatus.get();
  },
  adminMessage() {
    return Template.instance().adminMessage.get();
  },
  levelCount(level) {
    return StudentProfiles.find({ level, isAlumni: false }).count();
  },
  adminWorking() {
    return Template.instance().adminWorking.get();
  },
  studentsWorking() {
    return Template.instance().studentsWorking.get();
  },
  allStudentsWorking() {
    return Template.instance().allStudentsWorking.get();
  },
});

Template.Generate_Newsletter_Widget.events({
  'submit .preview': function previewMarkdown(event, instance) {
    event.preventDefault();
    const message = event.target.message.value;
    instance.adminMessage.set(message);
  },
  'submit .test': function sendTestEmail(event, instance) {
    event.preventDefault();
    instance.adminWorking.set(true);
    const emailList = event.target.text.value;
    const emailListArray = _.map(emailList.split(','), email => email.trim());
    if (emailListArray.length === 1 && emailListArray[0] === '') {
      instance.testEmailStatus.set('Please input at least one email');
      instance.adminWorking.set(false);
      return;
    }
    const bccList = $('#bcc-list').val();
    const bccListArray = _.map(bccList.split(','), email => email.trim());
    const adminMessage = $('.markdown').html();
    if (!(adminMessage.match(/[a-z]/i))) {
      instance.testEmailStatus.set('Please input an admin message');
      instance.adminWorking.set(false);
      return;
    }
    instance.testEmailStatus.set('Sending emails...');
    const sendToStudents = event.target['student-checkbox'].checked;
    _.each(emailListArray, function (email) {
      const student = StudentProfiles.findByUsername(email);
      if (student) {
        const suggestedRecs = getRecList(student);
        const sendList = [];
        sendList.push('radgrad@hawaii.edu');
        if (sendToStudents) {
          sendList.push(email);
        }
        const emailData = {};
        emailData.to = sendList;
        emailData.bcc = bccListArray;
        emailData.from = 'RadGrad Administrator <donotreply@mailgun.radgrad.org>';
        emailData.replyTo = 'radgrad@hawaii.edu';
        emailData.subject = `Newsletter View For ${student.firstName} ${student.lastName}`;
        emailData.templateData = {
          adminMessage,
          firstName: student.firstName,
          firstRec: suggestedRecs[0],
          secondRec: suggestedRecs[1],
          thirdRec: suggestedRecs[2],
        };
        emailData.filename = 'newsletter2.html';
        sendEmailMethod.call(emailData, (error) => {
          if (error) {
            console.log('Error sending email.', error);
          }
        });
      }
    });
    instance.testEmailStatus.set('All emails sent!');
    instance.adminWorking.set(false);
  },
  'submit .level': function sendToAdmin(event, instance) {
    event.preventDefault();
    instance.studentsWorking.set(true);
    // console.log('submit .level %o', instance.studentsWorking.get());
    const adminMessage = $('.markdown').html();
    if (!(adminMessage.match(/[a-z]/i))) {
      instance.levelEmailStatus.set('Please input an admin message');
      instance.studentsWorking.set(false);
      return;
    }
    const subject = $('#subject-field').val();
    if (!subject) {
      instance.levelEmailStatus.set('Please input a subject line');
      instance.studentsWorking.set(false);
      return;
    }
    if (!event.target['confirm-checkbox'].checked) {
      instance.levelEmailStatus.set('Please check the send confirmation box');
      instance.studentsWorking.set(false);
      return;
    }
    const level = parseInt(event.target['level-dropdown'].value, 10);
    if (!level) {
      instance.levelEmailStatus.set('Please select a level');
      instance.studentsWorking.set(false);
      return;
    }
    $('.ui.dropdown').dropdown('clear');
    const studentsByLevel = StudentProfiles.find({ level, isAlumni: false }).fetch();
    const lastIndex = studentsByLevel.length - 1;
    const bccList = $('#bcc-list').val();
    const bccListArray = _.map(bccList.split(','), email => email.trim());
    _.each(studentsByLevel, function (profile, index) {
      setTimeout(function () {
        const student = profile;
        const email = student.username;
        instance.levelEmailStatus.set(`Level ${level}: Sending newsletter for ${email}...`);
        if (student) {
          const suggestedRecs = getRecList(student);
          const emailData = {};
          console.log(`Sending email to ${email}`);
          emailData.to = email;
          emailData.bcc = bccListArray;
          emailData.from = 'RadGrad Administrator <donotreply@mailgun.radgrad.org>';
          emailData.replyTo = 'radgrad@hawaii.edu';
          emailData.subject = subject;
          emailData.templateData = {
            adminMessage,
            firstName: `${student.firstName}`,
            firstRec: suggestedRecs[0],
            secondRec: suggestedRecs[1],
            thirdRec: suggestedRecs[2],
          };
          emailData.filename = 'newsletter2.html';
          sendEmailMethod.call(emailData, (error) => {
            if (error) {
              console.log('Error sending email.', error);
            }
          });
        }
        if (index === lastIndex) {
          instance.levelEmailStatus.set(`Level ${level}: All emails sent!`);
          instance.studentsWorking.set(false);
        }
      }, index * 1000);
    });
  },
  'submit .all': function sendToAllStudents(event, instance) {
    event.preventDefault();
    instance.allStudentsWorking.set(true);
    const adminMessage = $('.markdown').html();
    if (!(adminMessage.match(/[a-z]/i))) {
      instance.sendAllEmailStatus.set('Please input an admin message');
      instance.allStudentsWorking.set(false);
      return;
    }
    const subject = $('#subject-field').val();
    if (!subject) {
      instance.sendAllEmailStatus.set('Please input a subject line');
      instance.allStudentsWorking.set(false);
      return;
    }
    if (!event.target['confirm-checkbox'].checked) {
      instance.sendAllEmailStatus.set('Please check the send confirmation box');
      instance.allStudentsWorking.set(false);
      return;
    }
    $('.ui.dropdown').dropdown('clear');
    const students = StudentProfiles.find({ isAlumni: false }).fetch();
    const lastIndex = students.length - 1;
    const bccList = $('#bcc-list').val();
    const bccListArray = _.map(bccList.split(','), email => email.trim());
    _.each(students, function (profile, index) {
      setTimeout(function () {
        const student = profile;
        const email = student.username;
        instance.sendAllEmailStatus.set(`Sending newsletter for ${email}...`);
        if (student) {
          const suggestedRecs = getRecList(student);
          const emailData = {};
          console.log(`Sending email to ${email}`);
          emailData.to = email;
          emailData.bcc = bccListArray;
          emailData.from = 'RadGrad Administrator <donotreply@mailgun.radgrad.org>';
          emailData.replyTo = 'radgrad@hawaii.edu';
          emailData.subject = subject;
          emailData.templateData = {
            adminMessage,
            firstName: `${student.firstName}`,
            firstRec: suggestedRecs[0],
            secondRec: suggestedRecs[1],
            thirdRec: suggestedRecs[2],
          };
          emailData.filename = 'newsletter2.html';
          sendEmailMethod.call(emailData, (error) => {
            if (error) {
              console.log('Error sending email.', error);
            }
          });
        }
        if (index === lastIndex) {
          instance.sendAllEmailStatus.set('All emails sent!');
          instance.allStudentsWorking.set(false);
        }
      }, index * 1000);
    });
  },
});

Template.Generate_Newsletter_Widget.onRendered(function generateNewsletterWidgetOnRendered() {
  this.$('.ui.dropdown').dropdown();
  this.$('.ui.checkbox').checkbox();
});

redpajama_set_name: RedPajamaGithub


This course is a fully interactive training course aimed at any person who comes into contact with food, from basic food handling and food preparation to food service. Training is set by the trainee at a pace to suit, there are multiple pre-test questions throughout the Food Hygiene course, with interactive missions to test your progress. The Food Hygiene Online Health and Safety Training Course is both engaging and educational.
This is an ideal course for induction or refresher training and suitable for anyone who works or comes into contact with food.
Easy to navigate, well put together online course.


text:
Forever I
Death Anniversary of Hazur Baba Sawan Singh
Taking Leave Of The Sangat
Third World Tour
Punjab Programme in October 1973
Unity of Man Conference
In one and a half months I will be healthy
After August 21, 1974
What is Saarsathi?
Master's Mission brought into the Golden Age
To All my Brothers and Sisters
Chapter from book "Forever with Master, vol. 1" by Dr Harbhajan Singh
In Dehra Dun – April 2 – 4, 1974
Master planned to celebrate the death anniversary of His Master Baba Sawan Singh Ji Maharaj in Manav Kendra from April 2 – 4, 1974. More than twenty thousand people gathered there on April 2. In spite of heavy rain, the Sangat did not move and continued listening to the Satsang.
The canopy started leaking and the water could enter into the Pandal. While holding Satsang in the sweet remembrance of His Master, Master wept bitterly like a child and spoke to the Sangat,
'For how long will you hear the Satsang from this throat,
the sun is going to set.'
Many Rishis and Munis and religious leaders of different religions participated in the Bhandara. At the end of the Satsang, Master told all to put in some minutes for meditation in sweet remembrance of the Master. He said,
'Everyone should sit in meditation.
There is no non-initiate,
as it is our turn to meet God.'
After about twenty minutes Master asked all to leave the meditation. He asked for the different experiences they could get during the sitting, like, 'Who saw the brilliant light within? Who saw the Golden light? Who saw the moon, sun and star? And who saw Master's form within?' After counting, there were more than five thousand people who got that contact within. One of the religious leaders sitting on the stage requested the Master to allow him to speak. Master agreed and he said, 'Master, your disciples are capable to see what we did never see so far. We feel shame sitting on the stage.'
Master said, 'I have given you examples of a living Master and the competency of the Master.'
April 3, 1974 at midnight
More than forty persons were sitting in Master's room in Dehra Dun; most of them were from Chandigarh, from Amritsar, from Delhi, and some were from other centres. It was midnight. I said, 'Master, I have a question.' Master made a sign which meant, not to speak. I said, 'Master, if the disciple does not tell about the competency of His Master, then who else will tell?' Master allowed me to speak. I said, 'Master, I have read the book Godman, written by You. There I have read that in the Iron Age only fourteen Masters and seventy Bhagats would come. After reading I got sad and thought: Then my Master is not a Master. Because up to Baba Sawan Singh, there are all in all 14 Masters who have already passed.' Master said, 'That I have not written.' I agreed and said, 'Master, but it was written by Bhai Bala during the time of Guru Nanak, and you confirmed it in Your book Godman.' Master told, 'Bring the book.' The book was brought by Devi Dass Patwari, the cashier of Amritsar-Centre. When I opened the book. Master said, 'Well, tell, who were those Masters?' I answered, 'Master, You made one sitting in Srinagar. There You told about the fourteen Masters.' — 'You go on and tell', Master said and I continued. 'After reading the book that night I became very sad; I did not sit in meditation, but You withdrew me above the body consciousness. The sound became very strong, and soon I saw a brilliant and shining gold-like list bearing the names of all the 14 Masters.' I asked Master to confirm whether this meditation was positive. Master asked, 'How did it look like?' I answered, 'Master, it was shining like gold, and seeing to it my sight would not withstand, and then the sound current became very loud and I was able to read it.' Master confirmed, 'Your experience was positive, tell further!'
I said, 'Master, I came to know that the name of Kabir was not there. Whereas I did not know why I thought of Kabir.' Raising His hand Master said,
'What to say of Him (Kabir) — He was the Creator.
He came in all the four Ages:
In Golden Age He was Satsukrat.
In Silver Age He was Munindar.
In Copper Age He was Karuname.
In Iron Age He was Kabir.
He did not come through the womb of a mother.'
I said,
'Master, from Guru Nanak to Guru Gobind there are ten Masters.
Guru Gobind Singh, after leaving Punjab, initiated one,
Ratnagar Rao, who further initiated Tulsi Sahib.
So the 11th was Tulsi Sahib,
the 12th was Swami Shiv Dayal Singh Ji,
the 13th was Baba Jaimal Singh Ji,
the 14th was Baba Sawan Singh Ji,
but I did not find Your name there.
I wept bitterly, and then I saw Your name (Kirpal)
along with Kabir's at the top of the list,
and it looked like Guru Nanak and Kabir being one.'
Then Master facing all said,
'Mind, that the Golden Age is approaching.
Everyone has to go back now. No one will be spared.
Those who disobey the order of the Master
will have to travel a very long road
for the completion of their journey.'
This was the most important declaration during His tenure of twenty-six years.
(Note: Master has written further in that book that many fragrant Saints would follow afterwards.)
Master at 7.00 a.m. sent me a message through Hyat, the cook of the Master. He told me, 'Maharaj Ji remembers you.' I went to Master and Master asked me, 'What is your programme?' I said, 'Master, the Sangat from Amritsar has come by a hired bus and we all have to go back to Amritsar.' Master said, 'But you cannot go today. I have something very important for you.'
Never in the past Master had spoken such words of emergency to me, so this gave me a special vibration to accept at once I remained with Master from 7.00 a.m. to 5.00 p m and Master even provided me with food during the day.
Being with Master the whole day, I felt like an ignorant and illiterate person sitting along with a chancellor of a university. Master told me a lot of things about the Satsang, about the Mission and about the Satsang in the West. By hearing all that I felt more and more little as I never thought that ever I would be worthy of hearing such things.
Afterwards, Master gave me an initiation chart in English and told me, 'This you will need.' I said, 'Master, why do I need it, since it is Your work?', and I started weeping. Master asked 'Have you any wish or do you want to say something?' I said, 'Yes, Master, since initiation I am carrying a wish with me, a part of which you already fulfilled.' — 'What was that part?', Master asked.
(Dr Harbhajan Singh answered…)
'Some years ago in Rajpur I requested You »May I meditate or not, but my wife must meditate!« And Your Good Self answered, »Once this was also my wish, which was never fulfilled. I told my Hazur that He may use me in the Mission, but that my wife did not cooperate with me. You are the first one who put me this question, so it will be fulfilled.« In Srinagar You asked the experience of my wife after sitting in Pahalgam, in 1973. She answered that she put in thirteen hours a day, and she was very happy. But Your Holiness said, that you were not happy. So she accepted happily to meditate more since it was not difficult for her to put in more time. During Your illness she even was able to put in 22 hours a day. Now she puts in more and more time, and the inner Master tells many things, which, if told, do not help a disciple who is not receptive to the Master and the teaching. You confirm her experiences and You always devote much time to us when we stay with You while others are sleeping.
And now with all Your Grace, You helped us to know, that very few people would believe us, others would not surrender to the inner Master.
You have shown the very dreadful time between the Iron and Golden Age, when lots of brothers and sisters would start to depend on others and would not follow the inner Master. So I have two things to place before Your Holiness. Either to awake all brothers and sisters, and show them what will happen in future, or You help us to work with You till it finishes and You ask all of us to go back with You.'
Master happily agreed to the latter and said:
'Master is not the physical body. He will guide you both
and you guide then all.'
Master once wrote me a letter:
'You are blessed with right understanding, rather rare right
understanding of its special significance which will help
you and all your brothers and sisters.'
I told Master, 'This we are doing already and we tell more about the competency of the Master than about other things.' I further told that during this time between Iron and Golden Age, no Master is needed and the Power from Agam (seventh plane) has to take the test to bring the new Age into the world and It works inside and outside as well. And we cannot tell about all that without Your due permission; like on June 1, 1973 in Srinagar, when I wanted to say a lot about Your competency, which could spread all over the world till now, but at that time you did not permit me. Weepingly I said, 'How can we help to separate us from You. Can You tell the way?' Master's eyes flushed with tears and He said, 'You are my borrowed servant, you have to obey. Be silent, if the heat goes out of the brick kiln, the brick cannot be used for building.'
We both (I and my wife) only with Ranjir Singh from Amritsar and one disciple of the Master went back to Amritsar. My heart and head was burdened like anything.
I and my wife started to visit Master every week in spite of being very much engaged in Amritsar with my practice and the Satsang work.
Read next chapter: "In one and a half months I will be healthy"

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Как получить переменную вне цикла? Имеется функция следующего вида. Цикл в ней не возвращает переменную
public function actionCheckqiwipayment(){
    if(\Yii::$app->request->isAjax){
        $data = Yii::$app->request->post();
        $wallet = $data['wallet']; //QIWI кошелек
        $amount = $data['qiwi'];
        $currency = $data['currency'];
        $crawler = new QiwiCrawler;
        //Получаем 10 последних платежей
        $payments = $crawler->getPaymentsHistory('number','api-key');
        //var_dump($payments);
        //Проверяем каждый платёж
        for($i=0; $i>=9; $i++){
            $qiwiWallet = $payments['data']["$i"]['account']; //QIWI номер отправителя
            $qiwiAmount = $payments['data']["$i"]['sum']['amount']; //QIWI сумма платежа
            $qiwiCurrency = $payments['data']["$i"]['sum']['currency']; //QIWI Валюта
            $qiwiPaymentType = $payments['data']["$i"]['type']; //Тип платежа
            $qiwiPaymentStatus = $payments['data']["$i"]['status']; //Статус платежа (IN / OUT)

            //Коды валют в API переводим в использующиеся на сайте

            if($qiwiWallet == $wallet && $qiwiAmount == $amount && $qiwiCurrency == $currency && $qiwiPaymentType == 'IN'){
                if($qiwiPaymentStatus == 'SUCCESS'){

                }
                $result = 1;

            }
            else{
                $result = 0;
                break;
            }
        }
        return $result;

    }
  }

A: Конструкция return используется для возврата значения в функции. В Вашем случае, Вы через цикл for, в зависимости от условий, переписываете переменную $result.
И есть подозрение, что цикл не будет выполнен. Начальное значение переменной $i меньше указанного значение в условии цикла.
for($i=0; $i>=9; $i++){
}

Если идет вызов скрипта через ajax, нужно выводить значение а не возвращать:
// return $result;
echo $result;

redpajama_set_name: RedPajamaStackExchange


" Second Life's Economic Architecture. Gene Yoon, the VP of Business Affairs for Linden Lab (the maker of Second Life), spoke about his controversial perspectives on the nature of the Second Life economy (of which he is often called "the architect.").
Gene Yoon handles a variety of business matters for Linden Lab, including international market development, corporate and business development, and external developer programs. He was also previously the company's general counsel and provided interim leadership for finance.
Prior to Linden Lab, he was general counsel and corporate secretary at Airespace, a wireless LAN equipment company, where he negotiated key strategic relationships, including the sale of the company to Cisco Systems. Before joining Airespace, Gene was a principal at KTB Ventures, leading the firm's investments in wireless communications, networking equipment and semiconductors. He worked with the Airespace founders prior to joining KTB, while consulting with portfolio companies of Storm Ventures. He practiced law at Venture Law Group, advising many technology startups and venture capital firms, and at Kirkland & Ellis in New York, where his practice focused on leveraged buyouts and other complex corporate transactions.
This page was last modified on 11 June 2009, at 04:25.


text:
'use babel'

import {Emitter} from 'atom'
import _ from 'underscore-plus'

import {Side, OurSide, TheirSide, BaseSide} from './side'
import {Navigator} from './navigator'

// Public: Model an individual conflict parsed from git's automatic conflict resolution output.
export class Conflict {

  /*
   * Private: Initialize a new Conflict with its constituent Sides, Navigator, and the MergeState
   * it belongs to.
   *
   * ours [Side] the lines of this conflict that the current user contributed (by our best guess).
   * theirs [Side] the lines of this conflict that another contributor created.
   * base [Side] the lines of merge base of this conflict. Optional.
   * navigator [Navigator] maintains references to surrounding Conflicts in the original file.
   * state [MergeState] repository-wide information about the current merge.
   */
  constructor (ours, theirs, base, navigator, merge) {
    this.ours = ours
    this.theirs = theirs
    this.base = base
    this.navigator = navigator
    this.merge = merge

    this.emitter = new Emitter()

    // Populate back-references
    this.ours.conflict = this
    this.theirs.conflict = this
    if (this.base) {
      this.base.conflict = this
    }
    this.navigator.conflict = this

    // Begin unresolved
    this.resolution = null
  }

  /*
   * Public: Has this conflict been resolved in any way?
   *
   * Return [Boolean]
   */
  isResolved() {
    return this.resolution !== null
  }

  /*
   * Public: Attach an event handler to be notified when this conflict is resolved.
   *
   * callback [Function]
   */
  onDidResolveConflict (callback) {
    return this.emitter.on('resolve-conflict', callback)
  }

  /*
   * Public: Specify which Side is to be kept. Note that either side may have been modified by the
   * user prior to resolution. Notify any subscribers.
   *
   * side [Side] our changes or their changes.
   */
  resolveAs (side) {
    this.resolution = side
    this.emitter.emit('resolve-conflict')
  }

  /*
   * Public: Locate the position that the editor should scroll to in order to make this conflict
   * visible.
   *
   * Return [Point] buffer coordinates
   */
  scrollTarget () {
    return this.ours.marker.getTailBufferPosition()
  }

  /*
   * Public: Audit all Marker instances owned by subobjects within this Conflict.
   *
   * Return [Array<Marker>]
   */
  markers () {
    const ms = [this.ours.markers(), this.theirs.markers(), this.navigator.markers()]
    if (this.base) {
      ms.push(this.base.markers())
    }
    return _.flatten(ms, true)
  }

  /*
   * Public: Console-friendly identification of this conflict.
   *
   * Return [String] that distinguishes this conflict from others.
   */
  toString () {
    return `[conflict: ${this.ours} ${this.theirs}]`
  }

  /*
   * Public: Parse any conflict markers in a TextEditor's buffer and return a Conflict that contains
   * markers corresponding to each.
   *
   * merge [MergeState] Repository-wide state of the merge.
   * editor [TextEditor] The editor to search.
   * return [Array<Conflict>] A (possibly empty) collection of parsed Conflicts.
   */
  static all (merge, editor) {
    const conflicts = []
    let lastRow = -1

    editor.getBuffer().scan(CONFLICT_START_REGEX, (m) => {
      conflictStartRow = m.range.start.row
      if (conflictStartRow < lastRow) {
        // Match within an already-parsed conflict.
        return
      }

      const visitor = new ConflictVisitor(merge, editor)

      try {
        lastRow = parseConflict(merge, editor, conflictStartRow, visitor)
        const conflict = visitor.conflict()

        if (conflicts.length > 0) {
          conflict.navigator.linkToPrevious(conflicts[conflicts.length - 1])
        }
        conflicts.push(conflict)
      } catch (e) {
        if (!e.parserState) throw e

        if (!atom.inSpecMode()) {
          console.error(`Unable to parse conflict: ${e.message}\n${e.stack}`)
        }
      }
    })

    return conflicts
  }
}

// Regular expression that matches the beginning of a potential conflict.
const CONFLICT_START_REGEX = /^<{7} (.+)\r?\n/g

// Side positions.
const TOP = 'top'
const BASE = 'base'
const BOTTOM = 'bottom'

// Options used to initialize markers.
const options = {
  invalidate: 'never'
}

/*
 * Private: conflict parser visitor that ignores all events.
 */
class NoopVisitor {

  visitOurSide (position, bannerRow, textRowStart, textRowEnd) { }

  visitBaseSide (position, bannerRow, textRowStart, textRowEnd) { }

  visitSeparator (sepRowStart, sepRowEnd) { }

  visitTheirSide (position, bannerRow, textRowStart, textRowEnd) { }

}

/*
 * Private: conflict parser visitor that marks each buffer range and assembles a Conflict from the
 * pieces.
 */
class ConflictVisitor {

  /*
   * merge - [MergeState] passed to each instantiated Side.
   * editor - [TextEditor] displaying the conflicting text.
   */
  constructor (merge, editor) {
    this.merge = merge
    this.editor = editor
    this.previousSide = null

    this.ourSide = null
    this.baseSide = null
    this.navigator = null
  }

  /*
   * position - [String] one of TOP or BOTTOM.
   * bannerRow - [Integer] of the buffer row that contains our side's banner.
   * textRowStart - [Integer] of the first buffer row that contain this side's text.
   * textRowEnd - [Integer] of the first buffer row beyond the extend of this side's text.
   */
  visitOurSide (position, bannerRow, textRowStart, textRowEnd) {
    this.ourSide = this.markSide(position, OurSide, bannerRow, textRowStart, textRowEnd)
  }

  /*
   * bannerRow - [Integer] the buffer row that contains our side's banner.
   * textRowStart - [Integer] first buffer row that contain this side's text.
   * textRowEnd - [Integer] first buffer row beyond the extend of this side's text.
   */
  visitBaseSide (bannerRow, textRowStart, textRowEnd) {
    this.baseSide = this.markSide(BASE, BaseSide, bannerRow, textRowStart, textRowEnd)
  }

  /*
   * sepRowStart - [Integer] buffer row that contains the "=======" separator.
   * sepRowEnd - [Integer] the buffer row after the separator.
   */
  visitSeparator (sepRowStart, sepRowEnd) {
    const marker = this.editor.markBufferRange([[sepRowStart, 0], [sepRowEnd, 0]], options)
    this.previousSide.followingMarker = marker

    this.navigator = new Navigator(marker)
    this.previousSide = this.navigator
  }

  /*
   * position - [String] Always BASE; accepted for consistency.
   * bannerRow - [Integer] the buffer row that contains our side's banner.
   * textRowStart - [Integer] first buffer row that contain this side's text.
   * textRowEnd - [Integer] first buffer row beyond the extend of this side's text.
   */
  visitTheirSide (position, bannerRow, textRowStart, textRowEnd) {
    this.theirSide = this.markSide(position, TheirSide, bannerRow, textRowStart, textRowEnd)
  }

  markSide (position, sideKlass, bannerRow, textRowStart, textRowEnd) {
    const description = this.sideDescription(bannerRow)

    const bannerMarker = this.editor.markBufferRange([[bannerRow, 0], [bannerRow + 1, 0]], options)

    if (this.previousSide) {
      this.previousSide.followingMarker = bannerMarker
    }

    const textRange = [[textRowStart, 0], [textRowEnd, 0]]
    const textMarker = this.editor.markBufferRange(textRange, options)
    const text = this.editor.getTextInBufferRange(textRange)

    const side = new sideKlass(text, description, textMarker, bannerMarker, position)
    this.previousSide = side
    return side
  }

  /*
   * Parse the banner description for the current side from a banner row.
   */
  sideDescription (bannerRow) {
    return this.editor.lineTextForBufferRow(bannerRow).match(/^[<|>]{7} (.*)$/)[1]
  }

  conflict () {
    this.previousSide.followingMarker = this.previousSide.refBannerMarker

    return new Conflict(this.ourSide, this.theirSide, this.baseSide, this.navigator, this.merge)
  }

}

/*
 * Private: parseConflict discovers git conflict markers in a corpus of text and constructs Conflict
 * instances that mark the correct lines.
 *
 * Returns [Integer] the buffer row after the final <<<<<< boundary.
 */
const parseConflict = function (merge, editor, row, visitor) {
  let lastBoundary = null

  // Visit a side that begins with a banner and description as its first line.
  const visitHeaderSide = (position, visitMethod) => {
    const sideRowStart = row
    row += 1
    advanceToBoundary('|=')
    const sideRowEnd = row

    visitor[visitMethod](position, sideRowStart, sideRowStart + 1, sideRowEnd)
  }

  // Visit the base side from diff3 output, if one is present, then visit the separator.
  const visitBaseAndSeparator = () => {
    if (lastBoundary === '|') {
      visitBaseSide()
    }

    visitSeparator()
  }

  // Visit a base side from diff3 output.
  const visitBaseSide = () => {
    const sideRowStart = row
    row += 1

    let b = advanceToBoundary('<=')
    while (b === '<') {
      // Embedded recursive conflict within a base side, caused by a criss-cross merge.
      // Advance beyond it without marking anything.
      row = parseConflict(merge, editor, row, new NoopVisitor())
      b = advanceToBoundary('<=')
    }

    const sideRowEnd = row

    visitor.visitBaseSide(sideRowStart, sideRowStart + 1, sideRowEnd)
  }

  // Visit a "========" separator.
  const visitSeparator = () => {
    const sepRowStart = row
    row += 1
    const sepRowEnd = row

    visitor.visitSeparator(sepRowStart, sepRowEnd)
  }

  // Vidie a side with a banner and description as its last line.
  const visitFooterSide = (position, visitMethod) => {
    const sideRowStart = row
    const b = advanceToBoundary('>')
    row += 1
    sideRowEnd = row

    visitor[visitMethod](position, sideRowEnd - 1, sideRowStart, sideRowEnd - 1)
  }

  // Determine if the current row is a side boundary.
  //
  // boundaryKinds - [String] any combination of <, |, =, or > to limit the kinds of boundary
  //   detected.
  //
  // Returns the matching boundaryKinds character, or `null` if none match.
  const isAtBoundary = (boundaryKinds = '<|=>') => {
    const line = editor.lineTextForBufferRow(row)
    for (b of boundaryKinds) {
      if (line.startsWith(b.repeat(7))) {
        return b
      }
    }
    return null
  }

  // Increment the current row until the current line matches one of the provided boundary kinds,
  // or until there are no more lines in the editor.
  //
  // boundaryKinds - [String] any combination of <, |, =, or > to limit the kinds of boundaries
  //   that halt the progression.
  //
  // Returns the matching boundaryKinds character, or 'null' if there are no matches to the end of
  // the editor.
  const advanceToBoundary = (boundaryKinds = '<|=>') => {
    let b = isAtBoundary(boundaryKinds)
    while (b === null) {
      row += 1
      if (row > editor.getLastBufferRow()) {
        const e = new Error('Unterminated conflict side')
        e.parserState = true
        throw e
      }
      b = isAtBoundary(boundaryKinds)
    }

    lastBoundary = b
    return b
  }

  if (!merge.isRebase) {
    visitHeaderSide(TOP, 'visitOurSide')
    visitBaseAndSeparator()
    visitFooterSide(BOTTOM, 'visitTheirSide')
  } else {
    visitHeaderSide(TOP, 'visitTheirSide')
    visitBaseAndSeparator()
    visitFooterSide(BOTTOM, 'visitOurSide')
  }

  return row
}


For the third consecutive year, ARTBA has issued a detailed analysis of the U.S. Department of Transportation's updated "National Bridge Inventory" database.
ARTBA found 58,500 of the nation's bridges—about 10 percent—are structurally deficient. If placed end-to-end, the deck surface of these bridges would stretch from New York City to Miami, or 1,340 miles.
The latest total is 2,574 fewer structurally deficient bridges than in 2014. But at the current pace of bridge investment—it would take at least 21 years before they were all replaced or upgraded.
The recently-enacted, five-year federal highway and transit law (FAST Act) provides a modest increase in funding for highway and bridge repairs, but not nearly enough, noted ARTBA Chief Economist Dr. Alison Premo Black, who conducted the analysis.
While these bridges may not be imminently unsafe, ARTBA wants to help educate the public and policymakers that they have structural deficiencies that need repair.
As in previous years, media outlets are quickly seizing ARTBA's analysis to report about the nation's underinvestment in transportation infrastructure. USA Today and The Washington Post have already produced stories, and other newspapers, websites, and radio and television stations are lining up to interview Black.
State specific bridge information from the analysis—including rankings and the locations of the 250 most heavily travelled structurally deficient bridges in the nation and top 25 most heavily travelled in each state—is available at www.artbabridgereport.org.


I cannot even begin to tell you how stoked I was when Chelsea and Nick asked me to be a part of their wedding. Chelsea and I knew each other since we were little kids so to be a part of this adventure was something I couldn't pass up.
So these two are pretty damn adventurous. Chelsea grew up in a small off-grid hamlet in the Adirondack Mountains that can only be accessed by boat in the summer, sea plane, or snowmobile in the winter! It's a gorgeous little wilderness oasis tucked into the deep woods of upstate New York so when they told me this is where they would also be having their wedding I couldn't wait!
With such a badass backstory, you know that their engagement had to be pretty epic too. These two took a trip to Scotland last year and he popped the question right on Isle of Skye!
Queue all of the awesome details! Prep started in the historic Beaver River Hotel, a pre-1900's railroad hotel that has been in Chelsea's family for decades. Old staircases, high tin ceilings, and wood everything? Yes yes yes.
This custom ring box from ArtFunctionalwood is one of the most beautiful ones I've ever seen.
I couldn't get over how gorgeous these dusty florals were. Each type of stem was ordered from Fifty Flowers but the bridal party put all of the bouquets, centerpieces, and floral details together the day before the wedding! Talk about impressive!
I've gotta admit, their dreamy first look couldn't have gone anymore perfectly. Misty morning light under the who-knows-how-old pines?
I'm still just so blown away by how beautiful these florals came out. More bride made bouquets!
Putting on this wedding was something for the books. This was only the third wedding that had ever happened in Beaver River at the Norridgewock Lodge, the first two were for Chelsea's mom and aunt!
Can we just talk about how cool this scavenged arbor is? The groomsmen found all of the materials in the woods and made it the day before the ceremony!
Because of the secluded nature of where this was all happening, it was a real all hands on deck event! The dance floor was laid and the tent was raised by the groomsmen and just about everyone they could get their hands on. And because everything had to be brought in by boat (including guests!) everyone became a part of the big day. Friends and family catered the reception, their wedding cake was made my mom, and every little detail had to be calculated.
Our evening ended with a gorgeous sunset session complete with rock skipping.


Looking for a budget Muslim-friendly holiday destination in Asia? Look no further than Vietnam! If you wish to travel abroad to a location that offers the most relaxing as well as thrilling vacation, you might want to consider evaluating why travel to Vietnam with these packages. There are so many reasons to why is Vietnam a popular Muslim-friendly travel destination and HalalTrip guarantees that you will not be disappointed by the many wondrous surprises the country has in store for those who arrive longing for a memorable holiday experience.
and shopping tour. Check in at the hotel and free at leisure, enjoy the rest of the day.
18:30: transfer to a Halal restaurant for dinner. After dinner transfer back to the hotel and free time to explore the city by night. Overnight at hotel.
along Mekong river. The days visiting/sightseeing places will be: coconut candy workshop, rowing boat in a small canal, bee farm, handicraft workshop to enjoy some honey-tea and see how people make things from coconut wood. Taking horse-carts along the country road to visit fruit orchards, enjoy seasonal tropical fruits and listen to traditional music by local inhabitants.
Lunch at a Halal restaurant. Transfer back to the hotel in Ho Chi Minh city. Then free at leisure in the evening, transfer to Halal restaurant for dinner. After dinner transfer back to the hotel and free time to explore the city by night Overnight at hotel.


Ali and Mark Lewis migrated to Australia from the UK in 2014 settling in picturesque township of Piccadilly in the Adelaide Hills. The property needed to accommodate Ali's equestrian love and as a bonus, a small vineyard producing quality Chardonnay fruit was already well-established.
What started as a whimsical pipe-dream of producing boutique wines under their own label has become a reality with the birth of their own Piccadilly Vineyards brand. Their first offering is a delicious Blanc de Blancs aptly named Piccadilly Circus - the very place they met in London and ties in perfectly with their new home in the Piccadilly Valley.
Piccadilly Circus Blanc de Blancs holds the promise of something festive and a guaranteed good time. The label is symbolic of the location, with the circle referencing the famous roundabout. It also represents a wedding band to demonstrate the enduring love between our clients. The coloured rings on the label represent the layers of complexity and flavour profile of the wine...derived from a collaborative quasi-synesthesia. It was essential that the packaging developed be distinctive amongst other Blanc de Blancs in local and international markets and challenge the more traditional offerings in this product space.
The Piccadilly Vineyard brandmark reflects the linear nature of the vineyards, revealing a serif PV that acknowledges our clients' traditional English heritage .


Long time spacer, turned sculptor, turned non-builder, Felix Greco has returned to the brick, and now he's building castle creations. He's built a cute little cottage, with some stone work that I think adds a nice touch of realism. I'm also a fan of the way he made the lattice windows on the first floor. The fact that it's home to the "ice cream knocker over-er" just adds to my delight.
Thanks for the nod, Dan. TBB was the one site I visited regularly over the last two years. Very cool that you would highlight me when I came back.


Diy ladder plant stand for making a compact garden fall. Wall mounted plant shelves diy.
38 best living room re do images on pinterest. Outdoor plant shelves house mix.
Bathroom corner shelving unit white vintage shabby / chic. 1000 ideas about plant shelves on pinterest small. Best 25 outdoor shelves ideas on pinterest diy outdoor. Diy outdoor plant shelf for fences and walls. 1000 ideas about indoor plant stands on pinterest house. Diy window plant shelf dont be lazydiy. Plant stand outdoor multi tier plant stand tiered stands. Easy grow light stand for seedlings. Diy 20 ideas of window herb garden for your kitchen. Diy pallet garden wall planter / shelving unit 99 pallets. 25 best ideas about plant shelves on pinterest cultivo. Diy garden shelf outdoor plant shelves plant shelves diy. 31 diy hanging shelves perfect for every room in your home. 17 best ideas about window shelves on pinterest kitchen. Bookshelf: free standing shelving units 2017 design 18. Best 25 plant shelves ideas on pinterest small shelves. Inspiration plant shelves i spy diy bloglovin. 513 best bedroom inspiration images on pinterest. Diy window shelves for plants diy show off diy. Diy window shelves for plants diy show off diy. Diy window shelves for plants diy show off diy. Diy plant stand indoor jyyg diy plant stand wire shelving. Party junk 201 diy rustic shelving ideasfunky junk interiors. Build plant shelf woodworking projects plans. 25 best ideas about outdoor shelves on pinterest garden. 3/4 tier wooden ladder shelf corner shelves bookcase plant. Best 25 glass shelves ideas on pinterest glass shelves. Indoor plant shelving home design. Kitchen plant shelving outdoor: plant shelving outdoor. Bring the outdoors inside by installing an unobtrusive. Outstanding storage ideas with a ladder shelving unit.


Bullying is nothing new. Bullying has been around for hundreds of years, nevertheless with the development of technology, bullying has advanced to a new damaging stage. Children, teenagers, and even adults can be victims of a vicious kind of bullying called cyberbullying. Cyberbullying could be devastating to the people being affected. This paper will discover cyber bullying by looking at the differences and similarities between 'common' bullying and cyber, the types of cyberbullying, statistics, and the differences between the bullies and the victims in regard to the consequences of cyberbullying. Typical examples of software program functions are phrase processors , spreadsheets , and media gamers A number of functions bundled collectively as a package are sometimes referred to as an software suite. Microsoft Workplace and LibreOffice , which bundle together a word processor, a spreadsheet, and several different discrete functions, are typical examples. The separate functions in a set usually have a user interface that has some commonality making it easier for the consumer to learn and use each utility. Often, they could have some capability to work together with each other in methods useful to the consumer; for example, a spreadsheet would possibly be capable of be embedded in a word processor doc even though it had been created in the separate spreadsheet application.
Principally, if you happen to go to any computer store, you will discover that nearly all of the merchandise are refined sufficient to be judged pretty much as good PCs. There shall be outstanding ones and there will be acceptable ones, with their attributes influencing the value range. To be able to select the perfect laptop though, it's worthwhile to know two things: what you will use it for and how you'll use it.
From a perspective perspective, a hybrid computer has the speed of an analog computer and the accuracy and reminiscence of a digital computer. Additional, while each country on this planet researches and finds technology that contributes to its army fearing safety, Japan has fully devoted its vitality in technology that assist its economic system and not it's army. The first focus of computer forensics is to recuperate proof of legal activity. The authorized time period is: Actus reus in authorized parlance. There's an assortment of data within digital units that's beneficial to other areas of inquiry.
We help all of the manufacturers of Expedia with tech help, infrastructure, meta-services, and transaction companies. If a fellow employee needs assist better using an current system, we're there. MIDORI is an offshoot of Microsoft Research's Singularity working system. On this the instruments and libraries are utterly managed code. MIDORI is designed to run directly on native hardware (x86, x64 and ARM), will likely be hosted on the Home windows Hyper-V hypervisor, and even be hosted by a Home windows course of.
It's tougher to appreciate, however, that the computer hardware can hardly be helpful without the program or system that tells what the computer machine ought to do. This is additionally referred to as the software. Sunday evening, and Monday evening, which was part of the earlier streaming deal inked between Verizon and the NFL. Hilbert's program proceeded on not less than two fronts. On the first front, logicians created logical programs that tried to show Hilbert's necessities either satisfiable or not.


Working on a script and in need of thoughtful feedback from an experienced filmmaker? Naomi will read script your script, provide thorough thoughtful notes in a 1-hour feedback and discussion session.
Naomi will provide specific and thorough notes and feedback on film, television, and web scripts.
Naomi reads scripts from a holistic perspective: assessing big-picture structural issues, character depth/truth/honesty, overall impact, themes, and messages, as well as detail work on things like dialogue, scene structure, writing, and, if desired, assessing elements for budgetary impact.
Naomi brings, not only her own experience as a professional writer - having had 7 plays and 2 feature films produced, written for The New Yorker Presents for Amazon, and sold a TV pilot/show bible - but also her 4 years as the Artistic Director of Theater Masters, during which she gave notes on hundreds of scripts and engaged in feedback discussions with writers.


A scuba diver giant strides into the ocean off a dive boat in Key Largo, Florida.
This is the most common dive entry taught and used by scuba divers worldwide. It is designed to allow divers to safely enter the water with their equipment and allow them to prepare to start their dive quickly and easily.
This diver has excellent technique, with a long stride combines with one arm across their gauges and another holding their mask. Also the diver is looking out, rather than down at the water which will stop them falling forward into the water.


text:
@class NSNumber, NSString;

@interface IDETestResultMessage : NSObject
{
    NSString *_text;
    unsigned long long _messageType;
    NSString *_filePath;
    NSNumber *_lineNumber;
}

@property(readonly, copy) NSNumber *lineNumber; // @synthesize lineNumber=_lineNumber;
@property(readonly, copy) NSString *filePath; // @synthesize filePath=_filePath;
@property(readonly) unsigned long long messageType; // @synthesize messageType=_messageType;
@property(readonly, copy) NSString *text; // @synthesize text=_text;
- (id)initWithText:(id)arg1 messageType:(unsigned long long)arg2 filePath:(id)arg3 lineNumber:(id)arg4;

@end


Noteworthy Characteristics. Lobelia siphilitica, commonly called great lobelia or blue cardinal flower, is a Missouri native perennial which typically grows in moist to wet locations along streams, sloughs, springs, swamps, meadows and in low wooded areas.... Fountain Blue is a great improvement over earlier Lobelia varieties. Make this fine performer a mainstay of your cool-season flower display, and you will not be disappointed! Packet is 100 seeds. Make this fine performer a mainstay of your cool-season flower display, and you will not be disappointed!
Great Blue Lobelia Facts This plant is native to the United States and some regions of Canada. This plant has been used by the native Americans for treating numerous ailments, especially, syphilis and hence, the name Lobelia siphilitica . how to get rid of wrinkles on your feet Fountain Blue is a great improvement over earlier Lobelia varieties. Make this fine performer a mainstay of your cool-season flower display, and you will not be disappointed! Packet is 100 seeds. Make this fine performer a mainstay of your cool-season flower display, and you will not be disappointed!
Lobelia Plants. Attractive, dark-green to reddish bronze leaves and showy, 3-5' spikes of brilliant red or blue flowers that bloom from late summer to early fall. how to grow a planet episode 1 worksheet answers Great blue lobelia is a perennial in zones 4-9 (down to -30F/-34C) . To keep the plant healthy, divide clumps in spring. It can also self-seed where it's happy but isn't generally invasive. To keep the plant healthy, divide clumps in spring.
WashingtonGardener Great Blue Lobelia You Can Grow That!


The Iowa Area Development Group (IADG) was organized in 1985 to create jobs, to increase investment in rural areas, and to stabilize electric rates for Rural Electric Cooperatives through the increased sales of electric power. It has succeeded, assisting in 1,700 successful expansions or new industries. This growth represents capital investment of more than $6 Billion and 40,000 new and retained jobs in the state of Iowa.
To find out more, visit www.iadg.com.


Live In or Near Venice and Single? - Yo! Venice!
Home Abbot Kinney Blvd Live In or Near Venice and Single?
Live In or Near Venice and Single?
Single and looking for something to do this weekend? Check out HowAboutWe.com. "How About We" is a new sponsor at Yo! Venice! and they want to help connect west side daters! The website is an experience-driven dating and relationship site, where the emphasis is to get off of the internet and actually get out and about meeting other singles.
The "How About We" concept is simple: participants add a "how about we" suggestion like "how about we ride bikes to the Venice Ale House", "how about we meet up for drinks at Gjelina" or "how about we go ride the ferris wheel at the pier". Other daters that like the proposed idea respond, and the date is set. When you sign up, you can see what others want to go out and do too!