text:
Do you remember Vineland's Two Guys?
In April 1965, in an effort to free Delsea Drive for highway business, the city's Planning Board voted to stymie proposed rural and residential zones along the route.
Consequently, just 12 days later, officials from the Two Guys retail chain confirmed they had taken options on parcels of land with plans to build a department store here.
The chain, originally known as Two Guys From Harrison, had begun during the early post-World War II era when brothers Herb and Sid Hubschman opened their first store in North Jersey.
It was followed by 26 more before the firm opened its Vineland location built on an L-shaped plot near the Route 47 traffic circle which began business on June 15, 1966.
Sharply at 9:30 a.m. that day, crowds of early-bird shoppers streamed through the doors. Tearing past waiting store officials, they were eager to get at $70 hi-fi stereos, $10 backyard swing sets and other grand-opening specials with which to fill the cavernous trunks of their Ford Galaxies and Chevy Impalas.
Equally cavernous was the store itself. Long before words like "supercenter" came into usage, the new Two Guys included amusement areas, snack bars and a full-line grocery store as well as Vineland's largest single retail sales space under one roof at that time.
A part of the city for the next 14 years, Vineland's Two Guys was one of three New Jersey locations to remain when other outlets were sold and converted into Jefferson Ward stores in 1980.
The end, however, came just a year later when Vornado Inc., parent company of Two Guys, transformed from its retailing roots into a real estate business.
As for Vineland's Two Guys, its going-out-of-business sale sparked a giant traffic jam requiring the efforts of local police to keep things moving.
After the doors closed for good on a December night in 1981, a group of employees, some of whom had worked at the local Two Guys since day one, gathered at Pizza Hut to toast the end of an era.
The Two Guys building later became the site of Jamesway and Rickel Home Center, both of which closed in the 1990s.
The shopping center then sat largely vacant until 2007, when the building was demolished in preparation for the construction of the Vineland Wal-Mart, which now occupies the site.

redpajama_set_name: RedPajamaCommonCrawl


text:
Eucalyptus medialis is a synonym of Eucalyptus hebetifolia.

See also
List of Eucalyptus species

References

Eucalypts of Western Australia
Trees of Australia
medialis
Myrtales of Australia
Plants described in 1991
Taxa named by Ian Brooker
Taxa named by Stephen Hopper

redpajama_set_name: RedPajamaWikipedia


text:
Iron Deficiency and Arm and Leg Tingling
By Destiny Simmons Updated October 1, 2018
Destiny Simmons
Destiny Simmons has worked as a professional health writer since 2005. She specializes in health and nutrition articles. Her work has appeared in various health Web sites. Destiny holds a Bachelors of Science in nursing from Boston University and a Master of Public Health Nutrition from Tufts University.

Iron is an essential mineral that is part of all cells in your body. The iron in red blood cells is located in hemoglobin, which is a protein that carries oxygen from the lungs to other parts of the body. Having too little iron leads to anemia because your body lacks enough hemoglobin to transport oxygen. Iron deficiency can also cause tingling of your arms and legs.
Tingling of the arms and legs is an abnormal sensation that can result from low levels of iron, according to MedlinePlus. When you have low iron levels, the bone marrow is not able to make enough red blood cells, which leads to low blood volume and decreased blood flow to tissues. Reduced blood supply to your hands and feet causes the tingling sensations. Contact your doctor if you are experiencing tingling sensations in your extremities. The doctor will assess your general health to determine the cause. If she determines the sensations result from iron deficiency, she may prescribe iron supplements and also advise you to eat more iron-rich foods.
Natural Sources of Iron
Daily consumption of iron-rich foods can prevent iron deficiency. Animal foods contain a well-absorbed form of iron than plant foods. Increase intake of iron-rich meats such as beef liver, lean red meat, lamb, pork, chicken, fish and turkey. Non-meat iron-rich foods include cereals, beans and fresh vegetables such as spinach, kale, beans and peas. If you are a woman of child-bearing age, increase intake of iron-rich foods to compensate for iron lost in heavy menstrual periods.
Take iron supplements only under the supervision of your doctor. Iron is best absorbed when taken on an empty stomach. However, if you experience stomach discomfort, you may take the supplements with food. Avoid taking iron supplements with milk, dairy products, tea and coffee. These foods interfere with the absorption of iron. Take liquid iron supplements using a straw to prevent staining your teeth.
Iron supplements may cause common side effects such as metallic taste, heartburn, upset stomach, constipation, diarrhea, nausea, vomiting, dizziness and headache. Adverse effects of iron supplements include breathing problems, skin rashes and hives, swelling of the face, mouth and throat, chest pain, backache, chills, fever and fainting, according to MayoClinic.com. Seek immediate medical attention if you experience these adverse effects.
Office of Dietary Supplements: Iron
MayoClinic; Iron Supplements; February 2011
MedlinePlus; Numbness and Tingling; April 2011
Prune Juice for Iron Deficiency
Is Drinking Milk With Meals Decreasing My Iron Absorption?
What Are the Side Effects of Iron Pills?
Foods High in Vitamin D & Iron
When Is the Best Time of Day to Take Iron Supplements?
How to Increase Iron Levels in Blood


text:
Africa, Europe, Energy, Energy Efficiency
The Wonderbag was developed to ease the social, economic and environmental impacts of the current global circumstances.
The Wonderbag is a non-electric, heat-retention cooker that allows food that has been brought to a boil on a stove fire, to continue cooking for hours after it has been removed from the fuel source.
It's taken years of passion, energy, and perseverance to get Sarah and the brand where it is today – 600,000 bags distributed in South Africa, first round of carbon credits registered and issued, production capabilities in Rwanda and Turkey, pilots poised to launch in Kenya, Nigeria and Somaliland, and over 4,500 bags sold in the UK, with a buy-one-give-one model to support getting Wonderbags into humanitarian relief.
We live in a world that desperately needs low carbon alternatives. Wonderbag ticks the box.
Every Wonderbag helps the environment by reducing a family's consumption of fuels like electricity, gas, paraffin and wood. Research shows that when families use a Wonderbag regularly, it can reduce CO2 emissions by 0.5 carbon tonnes per home, per year. That's the same amount produced by a small car every four months.
African carbon offset market benefits from Wonderbag
Natural Balance has launched its Wonderbag product in Rwanda and the social enterprise has distributed around 700,000 in South Africa in the last 4 years. Communities in the region will benefit from the cooker that assists carbon offsetting by reducing fuel consumption.
enquiries@nb-wonderbag.com
http://nb-wonderbag.com/
Africa, Agriculture, Circular Economy
Sarah Collins: Wonderbag's founder explains how her invention is changing lives
climate-leader-interviews


BENGALURU: In 2019 the Swachh Survekshan is underway as the ministry of housing and urban affairs (MoHUA) has already barred the Bruhat Bengaluru Mahanagara Palike (BBMP) from ranking itself a 3-star and above as the city has not yet been certified to be open defecation (ODF) free.
A survey is being conducted to identify the garbage-free cities and also to promote public participation in making urban agglomerations a better place to live in, the Swachh Survekshan 2019 covers 4,000 cities, but Bengaluru has been outclassed.
The poor rating of Bengaluru in Swachh Survekshan 2019 is because of the many diseases that plague through the waste management and disposal system. Mysore city, which holds the top Swachh ranking for two consecutive times, has declared itself a seven-star garbage-free city.
However, in the year 2018, Mysore has dropped to the 8th position from the 5th slot in 2017. Mysore city corporation commissioner KH Jagadeesh said they are confident that the ranking of the city will improve this time.
According to the officials of the Palike, the corporation has approved 2,995 applications for the purpose of constructing individual toilets in households since October last year and, of them, 1,639 toilets have been built.
MoHUA will be carrying out a third-party verification and the certification will be done for 3-star, 5-star and 7-star garbage-free ratings.


text:
Chennai civic polls: Madras HC strikes down order granting over 50% quota for women
The petitioner argued that 105 of the 200 seats in the Chennai corporation were allotted to women and said that it was unconstitutional and against the law.
Image: Wikimedia Commons/Yogi Balaji
news Court Wednesday, January 12, 2022 - 09:09
The Madras High Court on Tuesday, January 11, struck down an order providing reservation for women over and above the 50% cap in the Greater Chennai Corporation (GCC) elections. The first bench of the Madras High Court represented by Acting Chief Justice Munishwar Nath Bhandari and Justice PD Adikesavalu struck down the order while hearing a petition by Advocate R. Parthiban, challenging the validity of the Government Order (GO).
The petitioner argued that 105 of the 200 seats in the Chennai corporation were allotted to women and said that it was unconstitutional and against the law. The court has directed the state election commission to provide reservation to only 50% of the seats to women for the urban local body elections. The petitioner was represented by senior advocate S. Prabhakaran who argued that in 2016, municipal laws were amended to provide 50% reservation for the women in the local body seats.
He argued that of the 200 seats in the Chennai Corporation, 105 were reserved for women, both in Scheduled Caste and General category. He said that as per the general reservation policy, only 84 seats would have been allocated to women in the general category, and said that flouting norms, 89 seats were allocated to women in the general category.
He said: "The phrase not less than 50% should not be construed to mean that reservation for women can be provided beyond 50%." The senior advocate pointed out that through a Government Order (GO) issued in 2019, 16 seats of the corporation have been reserved for Scheduled Caste women, 16 seats for Scheduled Tribe women, and 89 seats for General category women, and argued that this was unconstitutional and amounts to discrimination against men.
Read: Tamil Nadu extends COVID curbs till Jan 31, night curfew to continue


text:
Places to go / Normandy /
Rendez-vous at the Fondation Monet in Giverny
© Fondation Claude Monet, Giverny
Welcome to Giverny in Normandy, the home of Claude Monet! Come and discover all the secrets of this French master of impressionism and his works, including the house he lived in for 43 years, the lily pond which inspired his most prominent paintings, and his wonderful flowering gardens.
The Water Garden boasts a stunning array of flowers and willow trees. It was here, facing this very pond that Claude Monet painted his famous Nymphéas (Water Lilies), which you can see on display at the Musée de l'Orangerie in Paris.
Monet actually grew the flowers himself. He was a gardener as well as an artist, arranging his gardens by using his creative eye.
The small green bridge, peony bushes and bamboo plants all demonstrate the love Monet had for Japan. The garden really bursts with colour and light, something which Monet loved to recreate in his paintings.
The Clos Normand and the House of Claude Monet
With its pink plaster and surrounding flowers and trees, the house of Claude Monet is truly a charming place.
The Radiant Clos Normand
Outside of the house, lining the pathways beneath the metal arches, flowers bloom in the garden known as the Clos Normand. Daffodils, irises, peonies, nasturtiums, roses and narcissuses are just a few of the many beautiful flowers that fill these flowerbeds with colour. Spring is definitely the best time to visit!
Ground Floor: The Studio, The Blue Room, Dining Room and Kitchen
The interior design remains true to how the rooms were in Monet's time. On the ground floor you'll enter Monet's studio with numerous reconstructed works of his on display, the Blue Room (reading room) and also the kitchen.
The Dining Room showcases Monet's magnificent collection of Japanese prints, including some notable pieces by artists such as Katsushika Hokusai.
The Bedrooms
All of the bedrooms are on the first floor, namely Claude Monet's bedroom itself, displaying reproductions of paintings from other impressionist artists of his time.
The other bedrooms include those of his second wife Alice Hoschedé and her daughter, Blanche Hoschedé, who was one of Monet's students and also the wife of his son. In 2014 Blanche's room was restored and refurnished as close to its original state as possible, featuring several floral tapestries and pitch pine furniture.
Monet lived here with his loved ones and worked in these rooms for 43 years of his life, until his death in 1926.
Fondation Monet
84 Rue Claude Monet
27620 Giverny
© Aterrom - AdobeStock
Visit the Fondation Monet (External link)
Opening Hours and Prices (External link)
Organise your stay in Normandy (External link)
FACEBOOK - Fondation Claude Monet Giverny (External link)
FLICKR - Fondation Claude Monet Giverny (External link)
VIMEO - Fondation Monet Giverny (External link)
db.videoAccessibility
Normandy Impressionist Festival
Until April 6
Discover Normandy
84 Rue Claude Monet, 27620 Giverny
Autumn on Normandy's Cider Route
In autumn, Normandy smells great. The scent of cider apples and the first wafts from distilleries…
Discover a rich heritage along the cycle route…
The 450-kilometre cycle route which connects Notre-Dame de Paris to the island of Mont Saint-Michel…
Glamour, cider and beach
Normandy puts on a show at Galeries Lafayette
Normandy's iconic heritage has taken up summer residence at Galeries Lafayette in Paris (5 July to…
4 spots to say 'I love you'
Love is in the air in Normandy this summer!
Lovers of poetry, fantasy, nature, fresh air, flavours and cheerfulness – basically, lovers in…
Here are our francefr fan-favorites!
5 incredibly instagrammable places in France
From its natural beauty (wild and cultivated) to the wide boulevards of Paris and the charming…
48 hours to remember on the D-Day Landing Beaches
On 6 June 2019, Normandy celebrates the 75th anniversary of the landing of Allied troops on its…


Costa Adeje holidays take you to the southern coast of Tenerife. The Canary Islands are a very popular destination as holidays can be enjoyed there at any time of year, as the archipelago enjoys long hot summers and pleasantly mild winters, with no extremes of temperature. Costa Adeje is a modern purpose built resort that has been carefully planned and offers great facilities.
Playa de las Americas on your doorstep.
With Mount Teide forming a dramatic back drop, this attractive resort just a mile or so from Playa de las Americas, has wide appeal. Families and couples of all ages are its main visitors but young singles wishing to relax by day and party through the night, can find their evening entertainment in the bars and discos of their gregarious neighbour.
The sandy beach is coarse as it is volcanic in nature and has a gentle gradient into clear Atlantic waters. A variety of water sports are available for the more energetic holidaymaker. The clarity of the water is ideal for diving and snorkelling. A range of tourist attractions include a couple of water parks, and a golf course. Popular excursions include big game fishing, and whale and dolphin spotting.
Cheap holidays to Costa Adeje.
Cheap Costa Adeje holidays take you to a resort that was built to high standards and the quality of the accommodation is excellent. Remember to check the price of the all-inclusive option as it can often be the best deal for those with ever hungry and thirsty offspring. Numerous restaurants cater for all palates but if a greater variety is wanted, take a bus to Playa de las Americas which has umpteen more. Nightlife is fairly low key reflecting the family nature of the resort. Again, if you want to spend a lively evening, visit your party-loving neighbour.
If you fancy a sunny break in Costa Adeje but find the thought of trawling through web page after web page looking for the best deal a little daunting, try our simple search facility. You'll find over three dozen travel companies, including leading brands, competing for your custom. It is simple to use, and remember, competition brings out the best bargains. Our search facility enables you to see, at a glance, the Costa Adeje holiday that is the cheapest, and the one that offers the best value for money. It couldn't be easier. All you have to do to secure the holiday is make a phone call. As offers change daily, in order to avoid disappointment, you should ring today.


text:
VC, Chancellor and Provost to address internal symposium
The Vice Chancellor and Chancellor of the University of Cambridge and the Provost of the Gates Cambridge Trust will speak at this week's internal symposium for the first time.
The Vice Chancellor and Chancellor of the University of Cambridge and the Provost of the Gates Cambridge Trust will speak at a Gates Cambridge internal symposium for the first time next week.
The Vice-Chancellor Sir Leszek Borysiewicz will talk about his role, the Chancellor Lord Sainsbury will speak about his charity the Gatsby Foundation and the Provost Professor Barry Everitt will talk about his neuroscience research, specifically memory plasticity, at the symposium on 28th November.
Also making presentations on their research will be three Gates Cambridge Scholars.
Matthew Timothy Shafer [2013], who is doing an MPhil in Political Thought and Intellectual History, will speak about how definitions of democracy usually rest on the idea of a government being able to be changed without violence. However, he will argue that that definition relies on a narrow concept of physical violence and ignores structural violence embodied in particular kinds of social processes. He says this structural violence can shape the unfolding of government transitions even in the absence of physical violence and bloodshed. He argues: "If we want to be able to identify 'democracy' with non-violent domestic political arrangements, we must reject the minimalist conception in favour of some much fuller theory of well-ordered social institutions."
Kavita Ramakrishnan [2009], who is doing a PhD in Geography, will talk about her research on a resettlement colony in Delhi which came about after people were forcibly evicted from slums in the city and resettled at its margins. Although the resettlement began in 2004, the colony grew substantially in the lead-up to the 2010 Commonwealth Games. She says those who have been resettled suffer from lack of infrastructure and insecure employment opportunities. She says: "My research critiques the ongoing eviction of the poor from cities such as Delhi and provides valuable insights into the heightened forms of poverty developing on the urban margins."
Luning Sun [2010], who is doing a PhD in Social and Developmental Psychology, will talk about his research into emotion recognition impairment in patients who have suffered brain injury. His study is based on a large sample consisting of 194 brain injury patients and 194 normal controls collected in the UK and Ireland and aims to investigate how brain injury affects patients' ability to recognise basic emotions in facial expressions, with fear being the hardest to identify. The research suggests different mechanisms may be involved in recognising emotions and looks at how adaptive testing can be developed to improve brain function in this area.
*The internal symposium takes place on 28 November from 3:00-5:00 in the Gates Cambridge Scholars Common Room. It is open to Gates Cambridge Scholars and their guests.
Picture credit: renjith krishnan and www.freedigitalphotos.net.


text:
Oak Park Eats
Inside Wednesday Journal
Big Week | June 15-22
Eats Newsletter
Where to buy a newspaper
Growing Community Media Team
A hyperlocal news site committed to in-depth reporting on issues concerning Oak Park and River Forest, Illinois.
Boulevard Arcade to become shared workspace
Landmark South Blvd. building's beauty and character will be preserved
by Stacey Sheridan January 31, 2020
Built in 1906, the historic Boulevard Arcade building has a new purpose.
An exciting new shared workspace is set to launch later this year in the landmark Boulevard Arcade building, 1033 South Blvd., in Oak Park. While similar, CrossFunction plans to offer greater charm and sense of community than other co-working office space companies, such as WeWork and Convene.
When looking for spaces out of which to launch CrossFunction, founder Trent Stoner found the perfect place in the beautiful Boulevard Arcade.
"What we were wanting to do was first find a place with a unique design and a rich history," said Stoner.
Built in 1906, Boulevard Arcade is already almost perfectly laid out for a shared office space. With the addition of a second floor in 1922, it operated as a multi-tenant women's shopping mall.
The building has its original exquisite tin ceilings and staircases and many of its rooms have the original hardwood floors and doors. Boulevard Arcade even has a spectacular working metal vault door. During the building's days as a mall, the resident furrier would use the door to safely secure furs.
Boulevard Arcade received landmark status in 2008.
"There is no space like this in Oak Park," said David King, president of Oak Park-based David King & Associates, the firm that brokered the lease.
"There's also hardly anything like this in the shared office co-working space," said Stoner. "Most of the places occupy an entire floor, sometimes two floors, of a high rise in downtown areas. You might have some smaller operations in the suburbs that maybe were a storefront, maybe a few thousand square feet."
CrossFunction Stoner calls a "boutique shared office space," not dissimilar to the trendy boutique hotel concept.
"Here we have 11,300 square feet, spread over two stories in a classic building with a very rich history, which is exactly what we were looking for," he said.
History is important to Stoner who intends to preserve the building's history and character. The next few months will be spent renovating.
"It's Boulevard Arcade and it will remain that," he said. "We'll be CrossFunction at the Boulevard Arcade."
CrossFunction at the Boulevard Arcade boasts designer ceiling sound baffles, 25 office spaces of various sizes, 17 parking spots, three work lounges, two conference rooms, a café and up to four small multi-use private "huddle" rooms, "where you could go take a phone call."
"If you were a nursing mother, you could nurse. Maybe if you were really tired or had a bad headache, you could take a nap," said Stoner.
The huddle rooms could also be used for conducting job interviews and private one-on-one conversations.
"It's totally comfortable for two people to be in these small huddle rooms."
The building will also have high speed internet, privacy lockers, a coffee bar and beer taps, as well as a business center with printing and copying.
"All spread out over two stories, it's the entire building, which you're not going to find in many office share, co-working establishments," Stoner said. "We're really excited to be able to share that with our members."
CrossFunction will furnish the offices for tenants, but tenants may also bring in their own furniture, should they wish to personalize the space.
For those whose needs do not require the use of a private office, CrossFunction will offer memberships that allow people to work out of the lounges. Those renters will still have access to conference rooms.
Fees and rents have yet to be determined but the website, which will launch within the next few weeks, will have some preliminary pricing.
In addition to Boulevard Arcade's historic appeal, the building is in close proximity to the Green Line and the Metra– a quality that was very important to Stoner.
"We didn't want to be in the city, but we wanted to be completely connected to the city," Stoner said.
Clients of tenants can hop on the train, making travel from Chicago to CrossFunction easy.
Stoner was also looking for an area that was a "robust, cool, bustling village or downtown area."
"Here in Oak Park, the train stops right in the middle of this great downtown that's going through its own economic boom," he said.
Boulevard Arcade and Oak Park in general satisfied everything Stoner was looking for to start CrossFunction.
"There was truly a fit here," said King. "CrossFunction will be a great addition to the greater downtown Oak Park area and community."
Stoner and his wife had previously wanted to move to Oak Park but were unable to because it was too far away from where Stoner worked at the time.
"Now that we're doing this, we're just really excited to be here," he said. "We love it. We love its access to the city, love the village and the town and all it has to offer."
Join the discussion on social media!
A fresh take on 'historic'
Concordia men's basketball coach no longer with university
Sports roundup: All-conference honors for three Trinity basketball players
OPRF bowler first ever state qualifier for boys program


For someone who had never heard of pickleball, Kyle Yates sure took to the sport quickly.
The first time Yates entered a national tournament, he walked out with a gold medal the same day. Just two years later, the 21-year-old Fort Myers native is one of the best pickleball players in the country.
At the U.S. Open Pickleball Championships, starting Wednesday at East Naples Community Park, Yates hopes to take home the tournament's top prize and the winner's check. One of the youngest players on the national circuit, he's also hoping to show the local crowd that pickleball isn't just for retirees.
"Pickleball gets a bad rap," Yates said. "When I started playing (nationally), I realized it wasn't an old person's game. The guys I play against are in their mid-20s and former college tennis players."
Yates has won more than a dozen titles at pickleball tournaments from California to the Midwest to the East Coast, all before he could crack a cold adult beverage to celebrate. Yates turned 21 just last week.
For once, Yates won't have to get on a plane or drive overnight to get to a national event. With more than 800 players, the U.S. Open in Naples is the biggest organized pickleball tournament is the sport's history. Yates expects to be on center stage just down the road from his hometown.


text:
Listing: \toolbox\GraphicalModels\cpd

Revision Date: 24-Oct-2010

Auto-generated by generateSynopsisTable

Some files are tagged as follows:

<TABLE BGCOLOR=grey ALIGN=left CELLPADDING=9 VALIGN=top

S

stats toolbox needed

I

interactive (user input required)

B

bioinformatics toolbox needed

M

matlab  needed (will not work in octave)

O

optimization toolbox needed

W

windows needed (will not work in linux)

X

currently broken

*

slow (two stars indicates very slow)

<TABLE BGCOLOR=grey ALIGN=left CELLPADDING=9 VALIGN=top

FILE

DESCRIPTION

TAGS

condDiscreteProdCpdCreate

Create a conditional discrete product distribution

condGaussCpdCreate

Create a conditional Gaussian distribution for use in a graphical model

condMixGaussTiedCpdCreate

Create a local CPD representing a tied mixture of Gaussians

condStudentCpdCreate

Create a conditional student distribution for use in a graphical model

noisyOrCpdCreate

Create a noisy OR CPD

sub\cell2CondGauss

Convert a cell array of gauss models to a condGaussCpd

sub\computeEquivClasses

Return a cell array of equivalence classes corresponding to pointers

sub\condGauss2Cell

Convert a condGaussCpd to a cell array of gauss structs, one per state.

sub\cpdClamp

Clamp a CPD to a particular value for the child

sub\cpds2Factors

Convert a cell array of CPDs to tabular factors

sub\cpt2Factor

Convert a CPT to a tabularFactor

sub\dispcpt

Display a conditional probability table

sub\dispjoint

Display the entries in a joint probability table

sub\findEquivClass

Return the equivalence class for representative i

sub\insertClampedBels

Insert clamped belief nodes.

sub\insertUnitBels

We insert unit factors for the clamped vars to maintain a one-to-one

sub\localEvToSoftEv

Convert local evidence to soft evidence

sub\mkRndTabularCpds

Create a cell array of tabular CPDs with random parameters

sub\mkSoftEvidence

Make a soft evidence matrix logB(j, t) = log p(X(:, t), S(t) = j)

sub\noisyOrCpd2Cpt

Convert a noisyOr CPD to a CPT

sub\softEvToFactors

Create a tabular factor for each column of B

tabularCpdCreate

Conditional probability density function p(y|x) for use in a DGM

tabularCpdSample

Draw a random sample from P(Xi | x(pi_i), theta_i)  (discrete)

redpajama_set_name: RedPajamaGithub


text:
3666 Holman eller 1979 HP är en asteroid i huvudbältet som upptäcktes den 19 april 1979 av den argentinska astronomen Juan C. Muzzio vid Cerro Tololo. Den har fått sitt namn efter den amerikanska astronomen Matthew J. Holman.

Asteroiden har en diameter på ungefär 20 kilometer och den tillhör asteroidgruppen Themis.

Referenser

Huvudbältesasteroider
Themis-asteroider
Småplaneter namngivna efter personer
Astronomiska upptäckter av Juan C. Muzzio
Astronomiska upptäckter 1979


Hi Everyday Foodies and Happy Fourth of July! What better way to celebrate our nation's Independence than BBQ. I'm not talking about any old BBQ, I'm talking about ribs. The ribs I made I smoked for 6 hours until they were so juicy they were nearly falling off the bone. Nearly?!?! Yes nearly. The perfect rib stays on the bone with a little bite to it and with the recipe I used, that is exactly what it did.
I happen to own one of the best smokers out there; the Big Green Egg. It's a ceramic egg shaped smoker that seals in heat for hours allow your meat to become mind blowing tender. There are many ways people suggest to cook their ribs but the one I found to be best for me is the 3-2-1 method. Let me explain.
I used a rub I borrowed from Bobby Flay and adjusted it a little for our tastes. Here's his recipe. Here's ours.
Heat your smoker to 225 - 250 degrees.
Add your favorite wood chips or chunks. (I used hickory chunks soaked in water for 30 minutes about a half pound.) It should start smoking in a couple minutes.
Allow your smoker to get back to 225-250 degrees.
I have a rib rack that I place my ribs on and then on top of the grill.
Place the ribs on the rack and DO NOT open for 3 hours. (This is the "3" in the 3-2-1 method. I think you know where I'm going with this).
Periodically check the temperature gauge to ensure it's the right temp.
When the 2 hours are up, remove ribs from smoker and remove the foil. The ribs should start to show a little receding off the bone. Place ribs back on the rack for another hour.
Remove ribs and they should be nearly falling off the bone as long as you kept your temperatures in the correct range. If your smoker was a little hot, you may want to remove the ribs sooner than an hour.
I have had a lot of ribs in my life and these are the best I have ever ate. The wife normally can't stand ribs but these make her mouth water just thinking about ti. Happy Smoking and enjoy the holiday!


5-LO XIN® Shows Improvement in Joint Comfort and Flexibility within 7 days!
5-LOXIN® is a new, patented, clinically-studied† dietary supplement ingredient. In human studies, 5-LOXIN® promotes joint health and function and protects against collagen degradation, an important component of connective tissues.
5-LOXIN® inhibits an enzyme called 5-lipoxygenase. 5-LOX inhibitors follow a distinctly different pathway than COX-2 inhibitors, and while both are involved in the breakdown of arachidonic acid, 5-LOX inhibitors do not exhibit the potentially negative effects that have been associated with COX-2 inhibitors. And 5-LOXIN® is a selective, non-redox 5-LOX inhibitor, which means that its action is very targeted, not affecting other systems.
5-LOXIN®'s safety is supported by historic usage, published human studies, and extensive safety and toxicity studies.
5-LOXIN® is presented in alliance with Laila Nutra, a division of Laila Impex, one of the leading producers of herbal extracts in India. The center is recognized by the Indian Government's Department of Scientific and Industrial Research (DSIR), is affiliated with numerous university Ph.D. programs, and actively collaborates with Georgetown University and the Ohio State University Medical Center.
Laila Nutra is a leader in process development for standardized herbal extracts and phytochemicals, as well as the isolation and characterization of marker compounds. In addition, the Center creates custom synthesis and process development for pharmaceuticals, semi-synthetic natural products, and supports this work with patents and publications.
Roy S, Khanna S, Shah H, Rink C, Phillips C, Preuss H, Subbaraju GV, Trimurtulu G, Krishnaraju AV, Bagchi M, Bagchi D, Sen CK, Human genome screen to identify the genetic basis of the anti-inflammatory effects of Boswellia in microvascular endothelial cells. DNA Cell Biol. 2005; 24: 244-55.
Roy S, Khanna S, Krishnaraju AV, Subbaraju GV, Yasmin T, Bagchi M, Sen CK, Inducible matrix metalloproteinase-3 expression in human microvascular endothelial cells is sensitive to anti-inflammatory Boswellia. Antioxidants & Redox Signaling, 8, 3 & 4, 2006.
Lalithakumari K, Krishnaraju AV, Subbaraju GV, Yasmin T, Chatterjee A, Safety and toxicological evaluation of a novel, standardized 3-acetyl-11-keto-beta-boswellic acid (AKBA)-enriched Boswellia serrata extract (5-LOXIN®). Toxicology Mechanisms and Methods 16: 199–226, 2006.
Krishanu Sengupta, Krishnaraju V Alluri, Andey Rama Satish, Simanchala Mishra, Trimurtulu Golakoti, Kadainti VS Sarma, Dipak Dey and Siba P Raychaudhuri, A double-blind, randomized, placebo controlled study of the efficacy and safety of 5-LOXIN® for treatment of osteoarthritis of the knee, Arthritis Research & Therapy, Vol 10 (4): R85, 2008.


text:
District Office: 4200 James Ave, Castro Valley, CA 94546
Elementary School serving grades TK-5
Middle and High School serving grades 6-12
"Inspiring Futures"
Superintendent's Welcome
RCS Highlights
2019-20 Year in Review
Aligned Curriculum
TK – Kindergarten
Crossover Basketball
Eagles Care (Extended Care)
Ways to Support RCS
Jog-A-Thon / Eagle Dash
"ALL IN" CELEBRATION
Elementary Waiver
RenWeb for Parents
Meet Our Administration
Subscribe to our Highlights
Follow our channel on YouTube
RCS Blog
Christian Schools Preview Week of May 2
Submitted by RCS Staff in RCS News & Events on April 29, 2016
Our 8th graders left for their historical study tour of Washington D.C. at ~4am yesterday. Please hold them up in prayer, for traveling mercies, safety, and most importantly, that they truly learn how the hand of God helped to mold and shape our great country. Be sure to check the RCS Facebook page to see pictures of their adventures.
Come out and see the last RCS drama performance of the year! High school Drama II students are presenting "Fools," by Neil Simon, next Friday (5/6) and Saturday (5/7) at 7pm. $5 tickets may be purchased in the RCMSHS office or from any Drama II student. We hope to see you there!
I have a request for all current RCS parents. RCS is in need of your opinion regarding how we are doing as a school. One of the accreditation requirements for 2018 from the Association of Christian Schools International and the Western Association of Schools and Colleges is that we solicit feedback from our parents. For the next four weeks, as part of the Week in Preview, we ask that you complete a series of four short surveys regarding specific aspects of RCS. Please click here to provide your thoughts regarding Staff, Faculty, and Administration. (If the link does not work, you can cut and paste this link http://goo.gl/forms/1wVllyehke.)
Al Hearne II, MSHS Principal
Assistant Superintendent of Instruction
1000 Paseo Grande, San Lorenzo, CA 94580
The Week of May 2 – May 8
April 28 – May 7
2B, 2H, 2/3C Field Trip to Lindsay Wildlife Center
School to 12pm for MSHS ONLY
1M, 1O, 1C Field Trip to the Oakland Zoo
May 4 – May 6
Chapel – RCE Campus – 9:10am
Grades 4-5 Girls' Family Life class at RCE – 7:00pm
Summer EDC Enrollment Due – Fees increase after this date!
5th Grade Girls Bible Study – 12:35pm
HS Play at the MSHS Campus – 7:00pm
Upcoming School Events in May
MS Athletic Awards at the MSHS Campus – 7:00pm
5th Grade MDTP Assessment
UC Berkeley Diagnostic Math Test – Grades 6 thru 12
Liberty Concert at Redwood Chapel – 7:00pm (see more information below)
New Parent Information Meeting – K-12 and Home School at RCE, Williams Chapel – 7:00pm
3rd grade Manners Lunch
Rowell Ranch Rodeo Parade
HS Athletic Awards at the MSHS Campus – 7:00pm
Senior Finals
Grades 4-5 Math League Contest
Senior Chapel and Tea – MSHS Campus – 8:15am
Last Day of Elementary Band and Classroom Music
LAST DAY OF SCHOOL for Grades K-8
8th Grade Banquet
EDC Open at the RCE Campus
Senior Trip
EDC Open at RCE Campus
Hours vary on Wednesday, April 25/not open all day/please verify times with RCE Campus Office
HS Finals, Grades 9 – 11
Kindergarten Graduation – Redwood Chapel – 7:00pm
MS Awards – Redwood Chapel – 9:00am
8th Grade Graduation Practice at Redwood Chapel (following Awards)
8th Grade Graduation at Redwood Chapel – 7:00pm
Grades 1 – 4 Awards at Redwood Chapel -9:00am
5th Grade Graduation at Redwood Chapel – 11:10am
EDC Open – Please confirm EDC Hours with the Redwood Elementary Campus Office
HS Awards at Redwood Chapel – 9:00am
HS Graduation Practice at Redwood Chapel (following Awards)
International Student Family Reception – 5pm
HS Graduation at Redwood Chapel – 7:00pm
Faculty paperwork day
EDC Closed; Offices Closed
Summer EDC Begins at RCE
Home School Meeting – 7:00pm
PLEASE VOTE NOW!
Bay Area Parent, (a publication that reaches roughly 200,000 parents throughout seven Bay Area counties, and promotes education and enrichment, family health and development, and various opportunities for families), is providing us a wonderful opportunity to tell others that Redwood Christian Schools is the 'Best of the Best.' DEADLINE TO VOTE IS MAY 5TH, an online vote is underway that gives you a voice to help promote our school.
Your vote will help us spread the word that Redwood Christian Schools is the 'BEST OF THE BEST'in all three categories. We know this is true because of our combined commitment to our Lord and Savior Jesus Christ and the involvement of our parents and the community associated with Redwood Christian Schools.
PLEASE CLICK HERE TO VOTE
You will be able to vote for your favorite school (us!) on the second web page.
All fines for MS and HS students should be paid at the MSHS before the day of the Award Ceremonies which will be held at Redwood Chapel.
Final report cards will not be distributed until all outstanding fines are paid.
Support RCS When You Shop!
Amazon Donates When You Shop At
https://smile.amazon.com/ch/23-7069060
************************************************************************************ Reminder: Please know that unsubscribing from ONE RCS email will remove you from receiving ALL school emails, including significant announcements that will benefit your child(ren) and you. We strongly recommend that you do not unsubscribe from receiving RCS emails. Thank you. ************************************************************************************
District Office: 510-889-7526
Elementary Campus Office: 510-537-4288
MSHS Campus Office: 510-317-8990
Athletic Department Office: 510-317-8988
The Education You TRUST for the Children You Love
Redwood Christian Schools District Office
4200 James Avenue
Redwood Christian Elementary
19300 Redwood Road
Redwood Christian Middle & High School
1000 Paseo Grande
San Lorenzo, CA 94580
Redwood Christian School Aligned Curriculum
iLearn@RCS
Academic Benchmarks
Biblical Integration
Why Redwood Christian Schools?
RCS Athletics
Re-enroll
Prospective Parent Night Events
2020 © Redwood Christian Schools. All Rights Reserved. | Privacy Statement
Redwood Christian Schools is a nonprofit, tax-exempt charitable organization under Section 501(c)(3) of the Internal Revenue Code. Donations are tax-deductible as allowed by law.


H.A. Hellyer is Fellow of the University of Warwick (UK) and Director of the Visionary Consultants Group (VCG) (Egypt/UK) a Muslim world – West consultancy. A United Nations 'Global Expert', Dr Hellyer's research interests include Muslim world – West relations, the interaction between Islam and modernity, and the dynamics of Muslim Western communities. Formerly of the Brookings Institution (USA) with extensive policy experience with the British and American government establishments, Dr. Hellyer was previously Visiting Professor at the Law Department at the American University in Cairo (Egypt), and Visiting Fellow at the Institute of Strategic and International Studies (ISIS Malaysia).
He received degrees in Law and International Political Economy from the University of Sheffield, before completing a multi-disciplinary PhD at the University of Warwick on the subject of Islam in Europe; he has also lived and travelled extensively in the Muslim world, studying with noted authorities in fiqh, kalam and tasawwuf.
Widely published in academic journals and presses, he is a regular commentator in mediums such as the Guardian (UK), the Washington Post (USA), the National (UAE), the Daily Beast (USA) and speaks to forums such as the Organisation for Security and Co-operation in Europe (OSCE), the Azhar University in Cairo and the BBC Doha Debates.
As a guest of HAKIM, Dr Hellyer will speak on his recent work "The Negotiation of Modernity through Tradition in Contemporary Muslim Intellectual Discourse: The Neo-Ghazalian, Attasian Perspective", written with the Oxford University don and Malay 'alim, Shaykh Dr Muhammad Afifi al-Akiti.
Islamic Medicine, at core, is like what can be called an Integrative Medical Conceptual Framework (IMCF), or an Integrative Medical Principle (IMP), allowing it to systemically identify, appropriate and incorporate into its own medical theory and clinical practice, what is proven to be experientially and empirically good in all medical systems, modern or ancient, without compromising its own vision of what it means to be human and to be healthy. This Colloquium will try to flesh out this conceptualization in further detail in a way that people in the medical profession can find to be conceptually and empirically generative and fruitful.
The revival of Islamic Medicine in the present context can provide a conceptually rich and yet practical medical alternative to modern medicine, a parallel medical pardigm that engages and interacts with the modern system and yet remain autonomous, with a great potential to critically and proactively identify, appropriate and integrate positive aspects of the modern system into its holistic vision and practice.
Medical research is not only medical, empirical or clinical, but also philosophical, historical and cross-cultural (e.g., as in ethnomedicine), for there is so much of time-tested traditional medical methods, remedies and ideas that have been lost to our collective intellectual and cultural memory due to systemic, reductionist medical westernization, and hence, for the Islamic Medicine Research Program (IMRP) to move forward, historical and cross-cultural research is also important. This does not mean that all doctors and medical academics and professionls have to do the actual ardous research, but that all of them should be aware of such research as has been done, know how to access it and render it accessible to other practitioners and to their students and patients, and the lay public in general.
"One commonality between the Eastern medical traditions and Prophetic medicine is their concept of holism, a view documented well over 1,000 years ago explaining the value of the mind-body-spirit connection—discussions modern science seriously begun to explore only in the past 20 years. Taking Chinese medicine as an example, other shared practices also demonstrate the similarities. Both these systems place emphasis on procedures such as cupping, herbal therapy, and dietary modification, with fundamental reliance on prevention, balance, and non-physical forces such as energy and prayer."
The colloquium draws on this time-tested, cosmopolitan heritage and invites the relevant parties to revive it in the context of a contemporary conceptual and empirical Islamic Medicine Research Program (IMRP), one major component of which is a systemic evidence-based reinvestigation of the clinical practices, remedies and therapies documented in the classical Islamic medical texts, including Tibb Nabawi texts, and another of which is a systemic critical survey of contemporary medical approaches from East & West, including indigenous ethnomedical oral traditions, which are in accord for the most part with Islamic medical philosophy and axiology, e.g., naturopathy, homeopathy, kampo, acupuncture, food therapy, sleep therapy, indigenous ethnomedical traditions, etc., even aspects of modern western secular allopathic and technological approaches that can be critically integrated into the Islamic Medical framework.
3. Dr Suriyakhatun Osman ( Department of Homeopathy Cyberjaya University College of Medical Science (CUCMS) "Homeopathy: God's gift to mankind"
8.00 am—9.00 am: Arrival of participants & Registration.
9.00 am—9.30 am: Welcoming speech by Dr. Farid Shahran, HAKIM Chairman.
9.30 am—10.30 am: International Keynote Talk & Presentation by Dr. Rehan Zaidi (naturopathist), Sunnipath Academy.
10.30 am—11.00 am: Q/A session.
11.00 am—11.30 am: Light refreshments break & networking session.
12.30 noon—1.00 pm: Q/A session.
1.00 pm—2.00 pm: Lunch, Zuhr solat & networking.
Dr. Nurdeng Dueraseh (historian of Islamic Medicine).
Dr. Adi Setia (historian & philosopher of Islamic Science).
Mr. Fayhsal (postgraduate researcher/forum moderator).
3.45 pm—4.50 pm: Q/A & Dialogue Session.
4.50 pm—5.30 pm: 'Asr solat, adjournment & post-colloquium networking.


This sink from Kraus adds a nice touch of elegance to any bathroom. You'll be impressed at how well its stylish ceramic design holds up against everyday wear and tear. You'll be glad you chose this top-grade sink for your next home renovation project.
This elegant sink from Kraus combines top-notch style and efficiency to elevate the look of any bathroom. Manufactured using high quality ceramic, it can withstand all kinds of everyday wear without losing its stylish appearance. Clean up in style with this top-of-the-line sink, perfect for a wide variety of bathroom designs.
From the expert craftsmen at Kraus, this vessel sink combines timeless style and modern efficiency into an elegant unit. It's been designed with ultra-durable ceramic, capable of keeping its beautiful appearance even after years of wear and tear. When it comes to improving the overall look and utility of your bathroom, this sink is a top-grade choice.
This elegant sink from Kraus combines top-notch style and efficiency to elevate the look of any bathroom. It is manufactured with ultra-durable ceramic, so you can enjoy its stylish appearance even after years of wear and tear. Perfect for all kinds of bathroom styles, this sink is fantastic choice for your next home improvement project.
The perfect combination of style and lasting durability, this sink from Kraus is just the upgrade your bathroom needs. It's been designed with ultra-durable ceramic, capable of keeping its beautiful appearance even after years of wear and tear. When it comes to improving the overall look and utility of your bathroom, this sink is a top-grade choice.
ElavoWhite 16.50-inch x 6.60-inch x 16.50-inch Square Ceramic Bathroom Sink with Drain in Chrome This sink from Kraus adds a nice touch of elegance to any bathroom. You'll be impressed at how well its stylish ceramic design holds up against everyday wear and tear. You'll be glad you chose this top-grade sink for your next home renovation project.
ElavoWhite 16.50-inch x 6.60-inch x 16.50-inch Square Ceramic Bathroom Sink with Drain in Chrome is rated 4.7 out of 5 by 9.
Rated 5 out of 5 by Reno2019 from This sink is gorgeous and it was easy to install! Love it! This sink is gorgeous and it was easy to install! Love it!
Rated 5 out of 5 by Pamc2424 from This vessel sink is beautiful. I have already gotten a lot of compliments on it and it has only ... This vessel sink is beautiful. I have already gotten a lot of compliments on it and it has only been installed a week.
Rated 5 out of 5 by dbbb from looks great Replaced existing sinks. Looks great. Works well. Installed easily.


"This kangaroo cartoon drawing guide is a great resource for turning a unique looking animal into a cartoon format. Through analysis of the drawing steps, the process will be explored in depth to create a neat cartoon kangaroo in digital format."... "This kangaroo cartoon drawing guide is a great resource for turning a unique looking animal into a cartoon format. Through analysis of the drawing steps, the process will be explored in depth to create a neat cartoon kangaroo in digital format."
Educational printable game for kids. How to draw cute cartoon kangaroo. Drawing with grid. Worksheet for class or at home with the kids. A4 size.
how to draw a kangaroo drawing tutorial will teach you step by step 'how to draw a kangaroo' in no time. Best of all, it's FREE!


Regardless of one's perspective on climate change, Thoughtwell believes that we can all agree that our current natural environment in Ohio is beautiful, and provides amazing opportunities to enjoy the great outdoors. Nature has an dangerous side, however, in the form of extreme weather events. To mark World Environment Day on Monday, 5th June, Community Research Partners presents an infographic on tornadoes reported in Ohio since the year 2000, with the reminder that nature is to be respected and treated with caution, as well as enjoyed.


text:
Stories and advice on living good and green from Frank And Oak.
The Handbook / Culture / Easy zero-waste tips for beginners
Easy zero-waste tips for beginners
Zero to hero: A beginner's guide to living "zero waste"
Words— Jillian Vieira
Now that the Earth's declining state can no longer be ignored, the zero-waste lifestyle has swelled outside its niche community to the increasingly eco-conscious mainstream. But what does this major step towards personal responsibility actually look like in practice? Here, a seven-step primer on adopting waste-free habits (that means no recycling, no packaging, no need for garbage bins at all) so you can start to make an impact now.
Resist the temptation to purge
Switching to the zero-waste mindset starts with what zero-wasters call a "trash audit", an in-depth review of what you're actually throwing away. Prepare for it to be an eye-opening exercise (you toss how many paper towel sheets in a week?), and though the urge to start fresh will be strong, it's important to spare your existing culprits—for now. "You shouldn't pitch something in the beginning just because it's not eco-conscious," says Michelle Genttner, co-owner of Unboxed Market, a Toronto-based zero-waste store that sells food and home goods. "You already spent the money, you already created the carbon footprint—use it, or upcycle it. That one item can live a lot of other lives." Basically, going waste-free won't happen overnight; instead, Genttner suggests using the time it takes to finish that jar of moisturizer or all-purpose cleaner to figure out exactly how you'll replace them.
Take stock of what you've got
Any big lifestyle change comes with an eagerness to get equipped (see: every new gym membership and the subsequent activewear spree), but if there was ever a time to reject our ingrained consumerist habits, it's now. Before your next grocery shop, do an inventory of what's already in your house: a pickle jar is ideal for procuring dried goods, shoe bags make for perfect produce pouches, and that Tupperware stack living in the graveyard that is the back of your cupboard? Hello, new takeout vessels. One of Genttner's customers even uses a clean pillowcase to bring home loaves of bread. "It's about looking at your household items a little differently and getting creative with how you shop," she says.
Get resourceful
Unlike the one-stop shop experience at big box marts, buying with the zero waste lens on is like one big scavenger hunt. Farmers' markets and their locally sourced, packaging-free bounties are a given, as are a growing number of refill depots and plastic bag-less bulk stores. But other eco-friendly alternative retailers might not be advertised as such, especially in communities where the movement hasn't quite caught on. Tool libraries let you rent out a whole host of home improvement equipment with a membership, while thrift shops are good options for gently used (and sometimes brand-new) cookware, utensils and decor.
Practice saying no to waste
Our voracious consumption of single-use everything happens so often—and so inconsequentially—that we've become blind to it. Think about all the instances you're offered a throwaway in your day-to-day life: your takeout order of steaming-hot dumplings comes housed in tinfoil and a styrofoam box. The cheesemonger places a chunk of taleggio on a sheet of wax paper whose lifespan is as long as it takes you to reach home. Curbing this excess is simple: identify the spots where you can reduce needless waste and intercept with a more green alternative. Preparing for these situations requires a well-stocked kit stashed in your bag at all times (think: a set of utensils, a reusable napkin, a mug and a container big enough to hold a meal). Disrupting the cultural norms will feel a little awkward at first, but Genttner suggests being straightforward—and unapologetic. "Try saying, 'I brought my own container. I'm really trying to have an impact on what's happening in the world and this is the way I'm doing it. Are you able to help by filling it up?'"
Learn what you can make vs. buy
If you want something, anything, you buy it—it's the way we're wired in this instant gratification world. Diving into this new life will require you to call on your craftier side. You'll quickly learn that most of those "must haves" are just a project in the making, but even if you're not DIY savvy, most waste-free substitutes don't require a ton of ingenuity. Whip up some homemade toothpaste (seriously, it's three ingredients), try an anti-inflammatory body scrub made from this morning's coffee grounds or grow your own windowsill herbs in upcycled jars.
Find your zero waste community
You've made this commitment. The rest of your family and friends? Not so much. Stave off the remote island feeling by building a like-minded group to rally behind you. Lean on the imaginative hacks cooked up on forums or Instagram accounts like @zerowastehome and @_wastelandrebel_. Pop-ups also serve as a meeting point for newbies and more seasoned zero-wasters who are chock-full of been-through-it solutions. You might just get a new friend out it.
Remember that there's no perfection in zero waste
A fair warning: breaking up with our consumerist culture is incredibly hard work. Being mindful of your every purchase, your every interaction with the world is tedious, and if we're being real, it'll get tiresome. It's in these moments where you might find yourself slipping up; maybe your pals are insisting on ordering in, or after a ton of research, there's an item that doesn't have the greenest alternative. But don't beat yourself up if every good intention doesn't go as planned—at the very least, you're trying. "We need everybody doing everything imperfectly," says Genttner. "Nobody has to live the perfect zero-waste lifestyle if only five or 50 or 100 people can do it—that's not sustainable. We need everybody in. Even if you only remember your reusable mug today, it's one less cup you've put in the world."
Classic visions of a brighter tomorrow
The most binge-reading (and watching) worthy science-fiction out there to pass the time and help envision a brighter tomorrow.
The constant traveller: Manila
From edgy art exhibits to more traditional open-air markets, Manila has something to offer all kinds of travellers.
For the record: How to take care of your vinyls
A vinyl collection requires a little more TLC than your Apple Music library, here is how to keep it in mint condition.
Designed in Canada. Made for good living. We're dedicated to providing you with purposefully designed products, made ethically and sustainably.


text:
Q: Get keys that are also in the value in defaultdict I am trying to extract keys that are also currently present in the values within a defaultdict.
For example,
a = {1: [1,3,5], 2: [1,3], 3: [3], 4:[5]} should give 1 and 3 since those values were in the value - i.e. 1 was in 1,3,5
I wrote this code, but it isn't printing the duplicate key:
c = set():
for k, v in a.items():
if a[k] == v
c.add(k)

But it doesn't work, I think because it doesn't compare EACH individual item in the list, i.e. 1: [1,3,5]
How to fix?

A: You're almost there; you just need to modify your condition a bit:
a = {1: [1,3,5], 2: [1,3], 3: [3], 4:[5]}
c = set()
for k, v in a.items():
    if k in v:
        c.add(k)

This can be simplified to a set comprehension:
a = {1: [1,3,5], 2: [1,3], 3: [3], 4:[5]}
c = {k for k, v in a.items() if k in v}

A: You can use a nested set comprehension that iterates over the sub-lists in the dict values and outputs the list items that are keys of the dict:
{k for l in a.values() for k in l if k in a}

This returns:
{1, 3}

redpajama_set_name: RedPajamaStackExchange


text:
package com.parseexception.model;

import java.io.Serializable;
import java.util.*;

import com.parseexception.*;

public class User implements Serializable {
	/************************************************************************************
	 * Initialization
	 ************************************************************************************/
	private static final long serialVersionUID = -3932073187541562192L;
	private int uid = -1;

	Column username;
	Column join_date;
	Column is_mod;
	Column karma;
	Column oid_identity;
	Column oid_server;
	Column login_cookie;

	private Date lastPost = null;

	private static transient StatementHandle get_solutions[];

	/* Static initialization block */
	static
	{
		newUserStmt = new StatementHandle();
		populate_user = new StatementHandle();

		set_username = new StatementHandle();
		set_join_date = new StatementHandle();
		set_is_mod = new StatementHandle();
		set_karma = new StatementHandle();
		inc_karma = new StatementHandle();
		dec_karma = new StatementHandle();
		set_oid_identity = new StatementHandle();
		set_oid_server = new StatementHandle();
		set_login_cookie = new StatementHandle();

		get_solutions = new StatementHandle[4];
		for(int i = 0; i < get_solutions.length; i++)
			get_solutions[i] = new StatementHandle();

		get_liked_solutions = new StatementHandle();
		get_filtered_liked_solutions = new StatementHandle();

		get_comments = new StatementHandle();

		add_friend = new StatementHandle();
		remove_friend = new StatementHandle();
		get_friends = new StatementHandle();
		get_is_friend = new StatementHandle();

		get_received_messages = new StatementHandle();
		get_sent_messages = new StatementHandle();

		set_saved_solution = new StatementHandle();
		remove_saved_solution = new StatementHandle();
		get_saved_solutions = new StatementHandle();
		get_filtered_saved_solutions = new StatementHandle();
	}

	/*
	 * Method Name: User
	 * Description: Creates a new user in the database
	 */
	private static transient StatementHandle newUserStmt;
	public User(    String oid_identity,
					String oid_server)
	{
		try
		{
			String query = "INSERT INTO users (username, oid_identity, oid_server) " +
						   "VALUES (?, ?, ?)";
			ArrayList<Object> args = new ArrayList<Object>();
			args.add("newuser");
			args.add(oid_identity);
			args.add(oid_server);

			uid = DataAccess.createEntry(newUserStmt, query, "uid", args);
			if(uid >= 0){
				Log.log("Created new user: " + username, Log.DEBUG);

				// Create default settings
				Settings.createSettings(uid);
				populateUser();

				setUsername("user" + uid);
			}else{
				Log.log("Unable to create user: " + username, Log.NONFATAL_ERROR);
			}
		}catch(Exception e){
			Log.log(e, Log.FATAL_ERROR);
		}
	}

	/*
	 * Method Name: User
	 * Description: Instance of an existing user
	 */
	private User(int uid)
	{
		this.uid = uid;
		populateUser();
	}

	private static transient StatementHandle populate_user;
	private void populateUser(){
		String query = "SELECT * FROM users WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));

		username = new Column("username", Column.STRING);
		join_date = new Column("join_date", Column.TIMESTAMP);
		is_mod = new Column("is_mod", Column.BOOLEAN);
		karma = new Column("karma", Column.INTEGER);
		oid_identity = new Column("oid_identity", Column.STRING);
		oid_server = new Column("oid_server", Column.STRING);
		login_cookie = new Column("login_cookie", Column.INTEGER);

		ArrayList<Column> results = new ArrayList<Column>();
		results.add(username);
		results.add(join_date);
		results.add(is_mod);
		results.add(karma);
		results.add(oid_identity);
		results.add(oid_server);
		results.add(login_cookie);

		DataAccess.queryReturnColumns(populate_user, query, args, results);

		// Add to cache
		ObjectCache cache = ObjectCache.getInstance();
		cache.addObject(this, uid, "users");
	}

	public static User getUser(int uid)
	{
		if(uid <= 0)
			return null;

		ObjectCache cache = ObjectCache.getInstance();
		User u = (User) cache.lookupObject(uid, "users");
		if(u != null)
		{
			return u;
		}else
		{
			u = new User(uid);
			return u;
		}
	}

	/************************************************************************************
	 * Getter & Setter methods for user fields
	 ************************************************************************************/
	/* uid */
	public int getUid()
	{
		return uid;
	}

	public boolean setUid(int uid)
	{
		return false;
	}

	/* username */
	public String getUsername()
	{
		return username.getString();
	}

	private static transient StatementHandle set_username;
	public boolean setUsername(String uname)
	{
		String query = "UPDATE users SET username = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(uname);
		args.add(uid);
		boolean ret = DataAccess.update(set_username, query, args);

		if(ret)
		{
			this.username.setString(uname);
		}
		return ret;
	}

	/* join_date */
	public String getJoinDate()
	{
		return join_date.getTimestamp();
	}

	private static transient StatementHandle set_join_date;
	public boolean setJoinDate(Date d)
	{
		String query = "UPDATE users SET join_date = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(d);
		args.add(new Integer(uid));
		boolean ret = DataAccess.update(set_join_date, query, args);

		if(ret)
		{
			this.join_date.setTimestamp(d);
		}
		return ret;
	}

	/* is_mod */
	public boolean getIsMod()
	{
		return is_mod.getBool();
	}

	private static transient StatementHandle set_is_mod;
	public boolean setIsMod(boolean is_mod)
	{
		String query = "UPDATE users SET is_mod = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Boolean(is_mod));
		args.add(new Integer(uid));
		boolean ret = DataAccess.update(set_is_mod, query, args);

		if(ret)
		{
			this.is_mod.setBool(is_mod);
		}
		return ret;
	}

	/* karma */
	public int getKarma()
	{
		return karma.getInt();
	}

	private static transient StatementHandle set_karma;
	public boolean setKarma(int i)
	{
		String query = "UPDATE users SET karma = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(i));
		args.add(new Integer(uid));
		boolean ret = DataAccess.update(set_karma, query, args);

		if(ret)
		{
			this.karma.setInt(i);
		}
		return ret;
	}

	private static transient StatementHandle inc_karma;
	public boolean incrementKarma()
	{
		String query = "UPDATE users SET karma = karma + 1 WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		boolean ret = DataAccess.update(inc_karma, query, args);

		if(ret)
		{
			this.karma.setInt(this.getKarma() + 1);
		}
		return ret;
	}

	private static transient StatementHandle dec_karma;
	public boolean decrementKarma()
	{
		String query = "UPDATE users SET karma = karma - 1 WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		boolean ret = DataAccess.update(dec_karma, query, args);

		if(ret)
		{
			this.karma.setInt(this.getKarma() - 1);
		}
		return ret;
	}

	/* oid_identity */
	public String getOidIdentity()
	{
		return oid_identity.getString();
	}

	private static transient StatementHandle set_oid_identity;
	public boolean setOidIdentity(String ident)
	{
		String query = "UPDATE users SET oid_identity = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(ident);
		args.add(uid);
		boolean ret = DataAccess.update(set_oid_identity, query, args);

		if(ret)
		{
			this.oid_identity.setString(ident);
		}
		return ret;
	}

	/* oid_server */
	public String getOidServer()
	{
		return oid_server.getString();
	}

	private static transient StatementHandle set_oid_server;
	public boolean setOidServer(String server)
	{
		String query = "UPDATE users SET oid_server = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(server);
		args.add(uid);
		boolean ret = DataAccess.update(set_oid_server, query, args);

		if(ret)
		{
			this.oid_server.setString(server);
		}
		return ret;
	}

	/* login_cookie */
	public int getLoginCookie()
	{
		return login_cookie.getInt();
	}

	private static transient StatementHandle set_login_cookie;
	public boolean setLoginCookie(int i)
	{
		String query = "UPDATE users SET login_cookie = ? WHERE uid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(i));
		args.add(new Integer(uid));
		boolean ret = DataAccess.update(set_login_cookie, query, args);

		if(ret)
		{
			this.login_cookie.setInt(i);
		}
		return ret;
	}

	/************************************************************************************
	 * Advanced user operations
	 ************************************************************************************/
	/* submitted solutions (newest ones first) */

	public ReturnList<Solution> getSubmittedSolutions(int pageNum, User curUser, String tagstr)
	{
		String query;
		StatementHandle hndl;
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));

		if(curUser != null && curUser.getUid() == this.getUid())
		{
			if(tagstr == null)
			{
				query = "SELECT sid FROM solutions WHERE submitter = ? ORDER BY sid DESC";
				hndl = get_solutions[0];
			}else
			{
				query = "SELECT s.sid FROM solutions s, tags t WHERE s.submitter = ? " +
						"AND s.sid = t.sid AND t.tag LIKE ? ORDER BY s.sid DESC";
				args.add(tagstr);
				hndl = get_solutions[1];
			}
		}else
		{
			if(tagstr == null)
			{
				query = "SELECT sid FROM solutions WHERE submitter = ? AND ispublic = true ORDER BY sid DESC";
				hndl = get_solutions[2];
			}else
			{
				query = "SELECT s.sid FROM solutions s, tags t WHERE s.submitter = ? AND s.ispublic = true " +
						"AND s.sid = t.sid AND t.tag LIKE ? ORDER BY s.sid DESC";
				args.add(tagstr);
				hndl = get_solutions[3];
 			}
		}

		int curUid = (curUser != null)? curUser.getUid() : 0;
		return DBQueries.getSolutions(hndl, query, args, pageNum, curUid, false);
	}

	/* liked solutions (newest ones first) */
	private static transient StatementHandle get_liked_solutions;
	private static transient StatementHandle get_filtered_liked_solutions;
	public ReturnList<Solution> getLikedSolutions(int pageNum, User curUser, String tagstr)
	{
		String query;
		StatementHandle hndl;
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));

		if(tagstr == null)
		{
			query = "SELECT DISTINCT sid FROM votes WHERE uid = ? " +
					   "AND upvote = '1' ORDER BY sid DESC";
			hndl = get_liked_solutions;
		}else
		{
			query = "SELECT DISTINCT v.sid FROM votes v, tags t WHERE v.uid = ? " +
					"AND upvote = '1' AND v.sid = t.sid AND t.tag LIKE ? ORDER BY v.sid DESC";
			hndl = get_filtered_liked_solutions;
			args.add(tagstr);
		}

		int curUid = (curUser != null)? curUser.getUid() : 0;
		return DBQueries.getSolutions(hndl, query,
									args, pageNum, curUid, true);
	}

	/* comments posted (newest ones first) */
	private static transient StatementHandle get_comments;
	public ReturnList<Comment> getComments(int pageNum)
	{
		String query = "SELECT id FROM comments WHERE uid = ? " +
					   "ORDER BY id DESC";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		return DBQueries.getComments(get_comments, query, args, pageNum);
	}

	/* friends */
	private static transient StatementHandle add_friend;
	public boolean addFriend(int friend_id)
	{
		String query = "INSERT INTO friends (uid, friend_id) VALUES (?, ?)";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		args.add(new Integer(friend_id));
		return DataAccess.createEntry(add_friend, query, "id", args) > 0;
	}

	private static transient StatementHandle remove_friend;
	public boolean removeFriend(int friend_id)
	{
		String query = "DELETE FROM friends WHERE uid = ? and friend_id = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		args.add(new Integer(friend_id));
		return DataAccess.update(remove_friend, query, args);
	}

	private static transient StatementHandle get_friends;
	public ReturnList<User> getFriends(int pageNum)
	{
		String query = "SELECT DISTINCT f.friend_id AS uid FROM friends f, users u " +
					   "WHERE f.uid = ? AND f.friend_id = u.uid " +
		   			   "ORDER BY u.username ASC";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));

		return DBQueries.getUsers(get_friends, query, args, pageNum);
	}

	private static transient StatementHandle get_is_friend;
	public boolean getIsFriend(int friendid)
	{
		String query = "SELECT id FROM friends WHERE uid = ? AND friend_id = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		args.add(new Integer(friendid));
		int res = DataAccess.queryReturnInt(get_is_friend, query, args, "id");
		return (res > 0);
	}

	/* votes */
	public int getVote(int sid)
	{
		Vote v = Vote.getVote(uid, sid);
		return v.getUpvote();
	}

	public boolean setVote(int sid, int upvote)
	{
		Vote v = Vote.getVote(uid, sid);
		return v.setUpvote(upvote);
	}

	/* messages */
	private static transient StatementHandle get_received_messages;
	public ReturnList<Message> getReceivedMessages(int pageNum)
	{
		String query = "SELECT id FROM messages WHERE to_id = ? AND " +
					   "deleted = 'false' ORDER BY id DESC";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		return DBQueries.getMessages(get_received_messages, query, args, pageNum, true);
	}

	private static transient StatementHandle get_sent_messages;
	public ReturnList<Message> getSentMessages(int pageNum)
	{
		String query = "SELECT id FROM messages WHERE from_id = ? " +
					   "ORDER BY id DESC";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));
		return DBQueries.getMessages(get_sent_messages, query, args, pageNum, true);
	}

	/* saves */
	private static transient StatementHandle set_saved_solution;
	public boolean setSavedSolution(int sid)
	{
		String query = "INSERT INTO saved (uid, sid) VALUES (?, ?)";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(this.getUid());
		args.add(sid);
		return DataAccess.createEntry(set_saved_solution, query, "id", args) > 0;
	}

	private static transient StatementHandle remove_saved_solution;
	public boolean removeSavedSolution(int sid)
	{
		String query = "DELETE FROM saved WHERE uid = ? AND sid = ?";
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(this.getUid());
		args.add(sid);
		return DataAccess.update(remove_saved_solution, query, args);
	}

	/* saved solutions (newest ones first) */
	private static transient StatementHandle get_saved_solutions;
	private static transient StatementHandle get_filtered_saved_solutions;
	public ReturnList<Solution> getSavedSolutions(int pageNum, String tag)
	{
		StatementHandle hndl;
		String query;
		ArrayList<Object> args = new ArrayList<Object>();
		args.add(new Integer(uid));

		if(tag == null)
		{
			query = "SELECT DISTINCT sid FROM saved WHERE uid = ? ORDER BY id DESC";
			hndl = get_saved_solutions;
		}else
		{
			query = "SELECT DISTINCT s.sid FROM saved s, tags t WHERE s.uid = ? AND " +
					"s.sid = t.sid AND t.tag LIKE ? ORDER BY s.id DESC";
			args.add(tag);
			hndl = get_filtered_saved_solutions;
		}

		return DBQueries.getSolutions(hndl, query, args, pageNum, this.getUid(), false);
	}

	/************************************************************************************
	 * Runtime stats
	 ************************************************************************************/
	public Date getLastPost()
	{
		return lastPost;
	}

	public void setLastPost(Date d)
	{
		lastPost = d;
	}
	/************************************************************************************
	 * Test Driver
	 ************************************************************************************/
	public static void main(String[] args) {

		User u = new User("a", "c");
		//u.setEmail("test@example.com");
		int uid = u.getUid();

		u = new User(uid);
		System.out.println("uid: " + u.getUid());
		System.out.println("username: " + u.getUsername());

		/*
		User u = new User(1);
		ReturnList<User> list = u.getFriends(0);
		System.out.println("Size = " + list.list.size());
		*/

	}

}


Jim shows how to write methods with built-in defenses that allow you to quickly find the fault underlying a failure.
Chess grandmaster Vladimir Kramnik famously used the Berlin Defense in his victory over Gary Kasparov in 2000. Such standard chess openings employ a combination of moves that strengthen a player's defensive posture and provide a sound foundation for the attack. Novice players often neglect such defensive techniques, a failing immediately apparent to more experienced opponents. As programmers, we too can neglect our defenses, allowing defects to gain the upper hand. And defects wreak havoc: effort is devoted to eliminating errors rather than creating new functionality, schedules slip, projects are canceled. No opponent shows less mercy.
However, several mutually supportive software development techniques, employed systematically, much like a standard opening in chess, will shore up our defenses.
I'll illustrate how you can weave these techniques together to form a defense-in-depth against defects that I call the Pragmatic Defense (apropos, as several techniques are drawn from The Pragmatic Programmer).Your defenses will be in place as you write your code, helping you keep defects at bay—even in the most stressful of circumstances.
Some time ago, during the last leg of an all day job interview, my potential employer assigned a programming problem in C++ to parse an English language text file and report various statistical information on its content. With the clock ticking, I attacked the problem—and, under the watchful eye of the examiner, ignored my defenses, making a subtle, and fatal, coding error. I could see the failure in the program's output when running initial tests and began to hunt for the fault. I backtracked, stepping through the code. Nothing. The examiner interrupted to deliver the 15 minute warning. Still nothing. The distance from failure to fault was too great; I couldn't isolate and remove the defect in time, ending an excellent opportunity. Could employing the Pragmatic Defense have prevented this? More importantly, can it help your software development efforts? Yes—by assisting you in quickly isolating the defects that underlie observed failures.
Let's look at each of the constituent techniques of the Pragmatic Defense and how they work together.
We'll start with the simplest techniques—Boolean Return Value and Single Exit Point—and apply them to a C++ method. Here's an outline of our C++ method.
// All has gone well, return true.
With the Boolean Return Value idiom, a function either works or it doesn't. You may remember watching the tense scenes in NASA's Mission Control (or perhaps have watched the movie Apollo 13) when Gene Krantz queries the flight controllers for a "Go, No Go for Launch" [Krantz, Gene. Failure is Not an Option, Simon & Schuster, 2009, p. 180]. Either all subsystems are "Go," or the launch does not take place (essentially a logical AND over the states of all subsystems). No equivocation, no integer error codes, no complex decisions to make. Each subsystem is either ready or it isn't. Each controller reports either "Go" or "No Go." Similarly, you know what's working and what isn't within your method, every step of the way. And you know unequivocally whether your method worked or not. Very simple.
While the Boolean Return Value idiom simplifies determining the status of your method, the Single Exit Point idiom simplifies its control flow; the Boolean value is returned from only one point in your method, both in the nominal case and in all error cases. In the nominal case, control flows to the end of the end of the try block, where the return code is set to true to indicate success, then to the return statement. In case of errors, the method still exits from the same point but only after reporting the error in a catch block.
With the Boolean Return Value and Single Exit Point idioms, you've laid the groundwork for point-of-failure diagnostics, now its time to start emplacing defenses using Contained Exception Handling.
The Contained Exception Handling idiom catches all exceptions within the scope of the method, as indicated by the throw() suffix in our C++ method declaration example. A try/catch block encapsulates the body of the method; the exception parameter of the last catch handler, catch(...), catches any exception not caught by any previous catch handlers. Any exceptions thrown within method goLaunch are caught within the method and reported or logged within the method. The method exits from the single return statement at the bottom; if an exception was thrown, the method returns false.
Exceptions have the undesirable characteristics of goto statements [Dijkstra, Edsger. "Go To Statement Considered Harmful," Communications of the ACM 11 (3), March 1968, pp. 147-148.], and exceptions propagated outside of method boundaries are like long jumps—a type of goto statement considered particularly harmful. Disaster may ensue if exceptions propagated beyond the scope of a method remain uncaught [Sutter, Herb and Andrei Alexandrescu. C++ Coding Standards: 101 Rules, Guidelines and Best Practices, Upper Saddle River: Pearson Education, Inc., 2005, pp. 114-115.]. In the Pragmatic Defense, exceptions are always caught within the method where they are thrown. No exceptions.
The custom exception class, CExcept, provides the time, process ID, stack trace, and other diagnostic information in the exception description returned by its what() member function. The exception's what() method is used by the error logging code within the catch handler. Here, errors are logged using the Apache log4cxx logging framework. (Similar frameworks are available for other languages, such as log4j for Java.) For basic console applications, you may wish to emit the error messages to the standard error using std::cerr.
Error messages should be as descriptive as possible, indicating not only the source of the failure but its possible cause and any corrective actions feasible.
throw dx::CExcept("goBooster() failed; O-ring temperature "
"too low. Postpone launch until temperature is "
Boolean Return Value, Single Exit Point, Contained Exception Handling ,and Logging let you know that a failure has occurred and that the fault is present in the execution path in or before the current method. Design by Contract will allow you to further narrow down the location of the fault.
A legal contract defines your rights and responsibilities, as well as those of the other party to the contract. Design by Contract [Meyer, Bertrand. Object-oriented Software Construction, 2nd ed., Upper Saddle River: Prentice Hall, 1997, pp. 331-438.] applies this concept to software modules. Rights and responsibilities are expressed as preconditions and postconditions (and also invariant conditions, which we won't cover here). Preconditions specify entry criteria that must be true to start a procedure. Postconditions specify criteria that must be true upon successful completion of a procedure.
These could all be postconditions as well. For example, if a function is supposed to create a file, that the file must exist is a postcondition of that function.
Some languages, such as Eiffel, provide native support for expressing pre- and postconditions. C++ does not, but you can check preconditions before entering the method body. For example, let's add an input value and impose a precondition for invoking the launch method. There are many criteria that must be met prior to launching a rocket; one is the distance to lightning sources.
// greater than 10 nautical miles.
oss << "Precondition not satisfied: distance in nautical "
"miles to lightning source invalid: "
If the precondition is not satisfied, there no point in continuing; it makes no sense to call the remainder of the method (it's not safe to launch the rocket). An exception is thrown, the failure is logged and the goLaunch method returns false. (A C++ Standard Template Library output string stream is used to construct the exception description.) Reporting the precondition failure helps to isolate the fault. The failure of a precondition may not tell you where the fault is, but it does tell you where it isn't. There's no need to spend time debugging the goLaunch method; the problem occurred prior to invoking goLaunch, perhaps in the software's weather subsystem.
Postconditions, on the other hand, tell you where the problem is when a failure occurs. A postcondition is a condition on a method that will become true when the method completes; a postcondition is what the method is guaranteed to do. If all of the method's preconditions are satisfied, and the method's postconditions are not met, the fault lies in this method, nowhere else.
Let's examine a simple C++ method, takeNote, which adds a note string to a collection of notes. It is supposed to add exactly one note string, but due to a copy and paste error (you're under pressure), a second push_back method was invoked on the vector of strings in the method body, appending two identical notes. Not the required behavior. The postcondition check will report a failure. The size of the vector on entry to the method is recorded in the integral value ulSizeOld. After the body of the method completes the postcondition is checked; the size of the vector is compared with its original size plus one. Due to the fault, this postcondition will fail; the logging system reports the failure. The fault is easy to find—it's in this method; the "distance to fault" is short.
// REQUIRE: length of input note string greater than 0.
throw dx::CExcept("Precondition not satisfied; "
// Postcondition Temporary: Save initial size of vector.
// ENSURE: size of vector has increased by one.
oss << "Postcondition not satisfied: "
<< ", one greater than its size on entry to "
Pre- and postcondition expressions must be free of side effects. If performance is an issue, consider placing the pre- and postconditions within conditional compilation directives, and use them only during testing.
Also, if the pre- and postcondition checks distract you from the essentials of the method, an editor supporting code folding will help to minimize their visual footprint. Alternatively, you can place the checks in separate methods; for example, in C++, precondition checks may be placed within a pure virtual method within an abstract base class that defines an interface.
You would then call the base class method in your implementation to check preconditions, as shown in the following code fragments.
// but provides precondition checks.
The CNotes class implements the INotes interface; it overrides the takeNote method and calls the INotes::takeNote method to check preconditions.
But how do you know what the preconditions and postconditions for your method should be? You first need to specify what the method is supposed to do and what inputs it needs, and that information is placed in the method's preamble.
Every method has a signature, which defines its interface. But the signature alone is not enough. A method must be documented sufficiently so that there is no need for its users to examine its internal implementation in order to use it correctly. When you write the interface documentation for the method, you're specifying what the method must do, in effect defining its requirements. Such specifications are called preambles and are placed in the C++ header file in which the method is declared. As its author, you're the first user of this method and the preamble provides the specification for your implementation, so write the preamble before you implement the method body. The preamble for method takeNote is shown below, written to support the Doxygen documentation generation tool.
* @return true if successful and false if an error occurred.
* @pre strNote string must be non-empty.
Doxygen supports a number of languages, including C++, Java, and Python; it will generate documentation in HTML, allowing convenient browsing, a great convenience for future users of your method.
As you implement your method in accordance with its preamble, you'd probably like to conveniently exercise your precondition and postcondition checks. How can you do this? Through unit testing.
Your pre- and postcondition checks can be exercised using unit tests. A wide variety of unit test suites conforming to the xUnit architecture exists for major languages, including JUnit for Java, NUnit for C#, and CppUnit for C++. In the example below, I use the Google C++ Testing Framework.
The Test Driven Development (TDD) agile process requires that automated tests be written before the code under test; however, many developers find this difficult in practice. Fortunately, the pre- and postconditions, as well as the preamble, make writing unit tests straightforward. You can write an initial unit test exercising a nominal test case as soon as the preamble to the method is done and the basic outline of the method has been implemented. Your initial test can simply invoke the method and check the return code as shown below.
// Add note std::string of non-zero length to collection of notes.
std::string strNote = "Unit Testing and DbC are mutually "
The output of the test indicated that it failed its postcondition checks and did not return the expected value (true).
The nominal test case can be used to exercise the code as you fill in the body of the method. Unit tests and the method body can be written iteratively; for example, preconditions can be implemented in the method and then unit tests can be written to ensure that the preconditions detect invalid input; execute the unit test and make sure the expected exception is thrown. The postconditions essentially provide a built-in unit test on the output of the method; there is no need to duplicate the postcondition checks in the unit test code.
Once the body of your method is complete, you've coded the postconditions, and you have tests for the nominal test case as well as tests for checking the preconditions, write boundary condition tests, worst case tests, and special case tests [Jorgensen, Paul. C. Software Testing: a Craftsman's Approach, 2nd ed., Boca Raton: CRC Press, 2002.]. This diverges from TDD orthodoxy, but many special test cases do not become apparent until the body of the method is well along.
You now know all the individual techniques in the Pragmatic Defense. But how do you employ them systematically, especially when the pressure is on?
The crew of the USS Cole fought throughout the day to control flooding resulting from a massive explosive detonated by terrorists against the ship's port side as it refueled in the Yemeni harbor of Aden in October of 2000. Despite the forty-foot long gash in the hull, by evening the crew had the flooding and other damage under control, saving the ship. How did they succeed against such odds? Damage control is practiced often in the U.S. Navy, using sophisticated simulators; fires are extinguished, masks donned, holes plugged, structures shored up. Standard processes are followed, familiar equipment is used; and that equipment is immediately at hand and always ready for use. All this so that when a vessel is in extremis, the crew will know exactly what to do, automatically. It works.
As a programmer you must often implement software when in extremis. The circumstances won't be as dire as those faced by the Cole's crew, of course, but fatigue, lack of sleep, and even burnout can diminish your ability to write correct code. In these circumstances, your defensive tools need to be at the ready. You also need a tried and true process to follow.
The Pragmatic Defense won't prevent you from making errors, just as the U.S. Navy's damage control procedures can't prevent ships from being hit. However, the Pragmatic Defense will help you to find those errors and remove them; it will reduce the "distance to fault." You'll still inject defects, but you won't deliver them. Had I used the Pragmatic Defense while taking the programming test during my job interview, I might still have made that subtle coding error, but I would have been able to find it. Quickly. I implemented a solution to the programming test again, this time using the Pragmatic Defense. That subtle error? Checkmated.
The Berlin Defense gained a great deal of popularity after Kramnik used it in his victory over Kasparov. Perhaps the Pragmatic Defense will gain notoriety on your projects; it's a great opening move.
Jim Bonang has spent over twenty years developing document management systems, medical device software, command and control systems, mission-planning systems, satellite terminals, compilers and other software systems that mustn't fail. He has also found himself in U.S. Navy damage control simulators on more than one occasion. Jim can be reached at jbonang@ieee.org. Send the author your feedback or discuss the article in the magazine forum.


text:
P. Joseph Clarke, Jr. (born March 12, 1933) was an American politician in the state of Kentucky. He served in the Kentucky House of Representatives as a Democrat from 1970 to 1998.

References

Living people
Democratic Party members of the Kentucky House of Representatives
1933 births


Smartphones with large displays are suitable not only for comfortable viewing of online videos but also for games, reading and efficient work with mail. Chinese manufacturers know about this which is why they produce a lot of 6-inch devices for those who prefer the bigger sizes.To determine which brand is suitable for you, read the selection from Galagram of the best 6-inch Chinese smartphones that can be purchased in 2018. Here is the collection of a variety of models-ranging from budget phones to more expensive ones with powerful drives.
One plus 6 offers a unique smartphone that offers flagship features in the lowest price segment, which is kind of cool. If you compare the smartphone with other phones having the same specifications, you will find a gulf of difference between the two in terms of price. One plus 6 has Qualcomm Snapdragon 845 processor, an AMOLED screen that is 6.28 inches long diagonally, Full HD+ resolution of 2280 x 1080 pixels in 19: 9 format and an effective layer of Gorilla glass 5 from Oxygen OS 5.1.9. The rear camera module is a dual one featuring 16-megapixel primary camera and 20 Megapixel secondary camera. The fingerprint scanner is supplemented with face recognition algorithm for an additional layer of security. The battery capacity is about the average- the capacity of the battery is roughly 3300 mAh, but it does support quick charge Technology. One plus 6 runs on Android 8.1 Oreo OS.
Display: 6.28-inch" | resolution: 1080×2280 pixels | Processor:2.8GHz octa-core | chipset: | OS:Android 8.1 Oreo |; RAM:6/8 GB |, Internal Memory: 64/128/256 GB |; Rear Cameras:16-megapixel; Front Camera:16-megapixel ; Battery:3300mAh.
Xiaomi Mi Max 3 boasts a very big impressive 6.99-inch display with an aspect ratio of 18: 9. It comes with a frameless design with rounded corners. display and it is within a good price segment. No doubt about that.As for the main camera, it has received a Sony IMX363 sensor at the 12+5.0MP megapixel dual camera. The same sensor is used in the flagship Xiaomi Mi 8 and Mi MIX 2S.
There is also a front camera at 8 megapixels. Also, the smartphone camera is equipped with an artificial intelligence system that will help in the operation of the camera when it comes to taking better pictures.
As for the performance, it has a midrange eight-core Snapdragon 636 processor with a clock speed of 1.8 GHz. We have about 3 storage options-3, 4 and 6 GB, 32, 64 and 128 GB storage internally. The battery of this phone has huge 5400 mAh for the power consumption. In addition, fast charging with Quick Charge 3.0 technology is supported. The Android 8.1 Oreo is featured as an operating system and it comes in quite handy. The phone has 3 color variants- Black, Champagne Gold, Blue and it weighs about 221 grams.
Display:6.9 inches" | resolution:1080 x 2160 pixels | Processor:Octa-core | chipset:Snapdragon 636 | OS:Android 8.1 (Oreo) |; RAM:3GB/4GB/6 |, Internal Memory: 64GB/128GB |; Rear Cameras:12+5 megapixel; Front Camera:8-megapixel ; Battery:5500mAh.
After Xiaomi Mi Max 3, Huawei Honor Note 10 is our 3rd choice. So Note 10 is a 6.95-inch giant phone and it was released immediately after Mi MAX 3. The price of Note 10 is quite higher and it has got impressive features. To enhance the power of the CPU, it supports Turbo Boost Technology. It comes with an internal cooling system that prevents the device from warming up. Guess what! The features are quite interesting. Only because it is armed with a good processing speed, it comes quite handy to the gamers. A significant advantage of Honor Note 10 is the availability of NFC (technology for contactless payments). But however, the gadget from Xiaomi beat the contender from Huawei in terms of battery. The Xiaomi Mi MAX 3 battery has a capacity of 5500 mAh. A battery capacity Honor Note 10 is about – 5000 mAh. Both models support the quick charge function.
Display:6.95 inches" | resolution:1080 x 2220 pixels | Processor:Octa-core 2.4 GHz | chipset:Hisilicon Kirin 970 | OS:Android 8.1 (Oreo) |; RAM:6/8 GB |, Internal Memory:64/128 GB |; Rear Cameras:16 MP+24 MP; Front Camera:13 MP, ; Battery:5000mAh.
UMIDIGI Z2 Pro is a stylish smartphone with a massive 6.2-inch notch display. The smartphone is available in three versions: Twilight, carbon fiber and with a ceramic back cover and this looks to be more expensive build but its price is reasonable with the fashionable gradient coloring touch .Umidigi Z2 Pro runs on Android 8.1 Oreo Operating System. It has a front camera at 16 megapixels, a dual rear module with 16 Mp + 8 Mp sensors coupled with an NFC chip, an Helio P60 processor, 6 GB of RAM and internal storage for 128GB. The phone is equipped with a Non-Removable 3550 mAh battery with a fast charging technology.
Vivo Nex is the most interesting phone from Vivo in 2018. This is also another powerful model of smartphone and the display of it seems to have been occupying fine 91.2 4% area on the front surface. The bezels on the screen are extremely small. The color reproduction is quite good. The fingerprint scanner is lying on the screen. The phone packs a powerful processor Snapdragon 845 processor. The phones come with 8GB of Ram and have a good internal storage for packing numerous video. and this is half the price of iPhone x and you are getting the latest built-in technology paying half the price of iPhone X.
Display: 6.59-inch" | resolution:1080×2316 pixels | Processor:2.2GHz octa-core | chipset:Snapdragon 845| OS: Android 8.1 Oreo|; RAM:8GB |, Internal Memory:128GB |; Rear Cameras:12-megapixel, Front Camera:8-megapixel ; Battery:4000mAh.