text:
Q: Designing 1:1 and 1:m relationships in SQL Server In SQL Server 2008, how does one design a 1:1 and 1:m relationship?

A: Any relationship requires that the "parent" table (the one side) have a Primary (or unique) Key (PK), that uniquely identifies each row, and the "child" table (the other side) have a Foreign Key column or columns, that must be populated with values that are the same as some existing value[s] of the Primary Key in the parent table.  If you want a one to many (1-M) relationship then the Foreign Key should be an ordinary attribute (column or columns) in the child table that can repeat (there can be many rows with the same value)
If you want a one to one (1-1) relationship then the Foreign key should itself be a Primary Key or unique index in the child table that guarantees that there may be at most one row in the child table with that value.
A 1-1 relationship effectively partitions the attributes (columns) in a table into two tables. This is called vertical segmentation.  This is often done for sub-classing the table entities, or, for another reason, if the usage patterns on the columns in the table indicate that a few of the columns need to be accessed significantly more often than the rest of the columns. (Say one or two columns will be accessed 1000s of times per second and the other 40 columns will be accessed only once a month).  Partitioning the table in this way in effect will optimize the storage pattern for those two different queries.
Sub-Classing.  The above actually creates a 1 to zero or one relationship, which is used for what is called a sub-class or subtype relationship.  This occurs when you have two different entities that share a great number of attributes, but one of the entities has additional attributes that the other does not need.  A good example might be Employees, and SalariedEmployees.  The Employee table would have all the attributes that all employees share, and the SalariedEmployee table would exist in a (1-0/1) relationship with Employees, with the additional attributes (Salary, AnnualVacation, etc.) that only Salaried employees need.
If you really want a 1-1 relationship, then you have to add another mechanism to guarantee that the child table will always have one record for each record/row in the parent table.  Generally the only way to do this is by enforcing this in the code used to insert data (either in a trigger, stored procedure or code outside the database). This is because if you added referential integrity constraints on two tables that require that rows always be in both, it would not be possible to add a row to either one without violating one of the constraints, and you can't add a row to both tables at the same time.

A: A 1:1 relationship exists where table A and table B only exist once in regards to each other.
Example: A student has 1 master student record.  The student would be table A and the record in table B.  Table B would contain a foreign key to the student record in table A (and possibly vice-versa)
A 1:m relationship exists where table A can be referenced or linked to by many entries in table B.
Example: A student can take several books out from the library.  The student again would be table A and the book could be the entry in table B.  The entry in table B would contain a foreign key to who checked the book out, and many books could reference the same student.

A: One-to-One Relationship
Create Table ParentTable
    (
    PrimaryKeyCol ... not null Primary Key
    , ...
    )

Create Table ChildTable
    (
    , ForeignKeyCol ... [not] null [Primary Key, Unique]
    , ...
    , Constraint FK_ChildTable_ParentTable
        Foreign Key ( ForeignKeyCol )
        References ParentTable( PrimaryKeyCol )
    )

In this case, I can never have more than one row in the ChildTable for a given ParentTable primary key value. Note that even in a One-to-One relationship, one of the tables is the "parent" table. What differentiates a One-to-One relationship from a One-to-Many relationship purely in terms of implementation is whether the ChildTable's foreign key value has a Unique or Primary Key constraint.
One-to-Many Relationship
Create Table ParentTable
    (
    PrimaryKeyCol ... not null Primary Key
    , ...
    )

Create Table ChildTable
    (
    , ForeignKeyCol ... [not] null
    , ...
    , Constraint FK_ChildTable_ParentTable
        Foreign Key ( PrimaryKeyCol )
        References ParentTable( PrimaryKeyCol )
    )

In this scenario, I can have multiple rows in the ChildTable for a given ParentTable primary key value.

redpajama_set_name: RedPajamaStackExchange


text:
US Videos
McGregor: People Are Overpaying for Income
Oakmark's Clyde McGregor thinks the flight to safety is overdone, and with spreads being compressed so greatly, it's hard to do anything but take on risk in fixed income.
Shannon Zimmerman
Shannon Zimmerman: For Morningstar, I am Shannon Zimmerman here today with Clyde McGregor of Oakmark Funds and in particular to Oakmark Funds, Oakmark Equity and Income and Oakmark Global. Global is a world-stock fund. We'll talk about that in just a bit, but I want to talk first about Oakmark Equity and Income which is a moderate-allocation fund in our way of categorizing funds. And I want to begin there because there were a couple of news items around that fund. One happened quite a bit earlier this year, and your long time comanager Ed Studzinski retired. So congratulations to him. My question to you is how has the day-to-day management of that fund changed as a result of Ed's departure?
Clyde McGregor: Oh, it's changed a very little. I have assembled two teams, one on the fixed-income side, one on the equities side from our analyst pool to guide me and advise me during this period, as well. So, I have lots of minds to bounce ideas off. Ed and I were more a unit doing that before and would bring in specific analyst oftentimes, but now I have teams that are doing that for me. But the way that the fund is managed has changed very little. There has been same kind of turnover rate that there has been before. The same equity, and the same allocation to value.
Zimmerman: So, the other question I wanted to ask about Ed's departure is what about his replacement? I know the plan is to bring on eventually a co-manager. How is that process going?
McGregor: Well, that's part of the reason for the advisory groups, and it's going. I can't guarantee that we'll announce something by the end of the year, but that's a reasonable expectation. And it's not cast in stone that we'll have one new comanager; it could well be the case there are two. I am 59 1/2. We have to think about succession issues for me, as well, even though I have no intention of doing anything different.
Zimmerman: So, just sort of a speculative question I guess because I imagine it will have to depend on the folks who come in or the person who comes in to be your comanager. Traditionally, the part of the portfolio that has invested in fixed income has been traditionally invested in Treasuries or Treasury Inflation-Protected Securities as it is now. Is this an opportunity maybe to expand the portfolio beyond those asset classes?
McGregor: Well, we wish there was such an opportunity in the marketplace.
<TRANSCRIPT>
Zimmerman: Oh, right now, yes.
McGregor: So, it's very difficult today. My fixed-income team meets with me every Wednesday and as needed otherwise, and they are quite dubious about our ability to extend duration in a way that doesn't add meaningfully to the riskiness of the portfolio. So, we've done some things in smaller-cap, high-yield issues where we feel we have an analytical edge. We certainly do have a large TIPS position. We have 4% of the entire portfolio in sovereign debt issues, but it's very difficult to do anything creative today on the fixed-income side, in our opinion, that does not increase risk materially.
Zimmerman: So, in the [summer] commentary for the Equity and Income fund, you talk about the way that investors are subsidizing the government by buying bonds at such unattractive rates. Yet, there are short-dated Treasuries in the portfolio, too, and there are negative real yields on those right now.
McGregor: On the TIPS.
Zimmerman: On the TIPS, and then on the shorter-dated Treasuries I believe.
McGregor: Well, maybe.
Zimmerman: So, how do you get comfortable with that? In the past my understanding has been that that part of the portfolio--I mean you have parameters that you can't go beyond in terms of fixed-income allocation and equity allocation--is almost a holding pin for cash. When you want to put it to work in equities, you will, which why it's the most liquid fixed-income instruments possible. But in terms of right now, there are not very attractive yields at all in that space. How do you get comfortable with that?
McGregor: Well, it's hard to be comfortable with it. It's basically a holding tank now for future opportunities primarily on the fixed-income side. We are at our highest equity allocation…
Zimmerman: Close to 70%.
McGregor: Yes, just over 70%. So we have potentially the room to go to 75% equity; that's the prospectus max for the fund. But the reserve position at this point in the very short-term Treasury and Canadian debt positions in the portfolio really are for future fixed-income portfolio additions at this point in time. The longest duration fixed-income assets in the fund are all TIPS. They all have negative nominal yields today. I think the entire TIP universe is negative out to over 20 years. So there the marketplace is making a very explicit bet that there will be inflation further out in the future, but that you can hold these things today as a flight-to-safety asset.
One of the things we've also written about, we think, people are overpaying for income, and that the fight to safety is meaningfully overdone. We don't think that the conditions in the world are as grim as these kinds of actions would suggest.
Finally we don't see how people are going to be able to retire on yields like this. As again I mentioned, I'm close to 60, as my generation retires, how are they going to convert equity holdings into bonds in a way that it will be able to support their lifestyle. So we think that these things will change over time, but we did not expect this suppression of yield to continue as long as it has.
Zimmerman: Sure. Let me circle back around to the question of what you might do with the fixed-income part of the portfolio going forward after you have a comanager or a team of comanagers with you? Understanding it right now, the environment for fixed income is not very attractive broadly. Thinking long term though, is Ed's departure and then the vetting of people who might come on and be your comanager provide an opportunity to think about, "We could have a more diversified fixed-income portfolio if we had the resources." Is that a part of the conversation as you interview folks for the job?
McGregor: Yes, it is. I think we will have a more diversified fixed-income portfolio in the future than has typically been the case. When the fund started in 1995, and I was sole manager at that point in time, we felt that the spreads between investment-grade corporates and Treasuries were insufficient to compensate us for the risk of specific events. There are not so many leveraged-buyouts happening today, but if you are the owner of a bond for a company that gets LBO'd, basically, value from you has been transferred to the equity owners. We wanted to avoid that risk as much as possible. We just didn't think that to buy an excellent bond that you're getting enough of a pickup versus owning a Treasury to give up the liquidity, and so we just didn't think it was all worthwhile.
Today, with all the spreads being compressed so greatly, it's hard to do anything but take on risk in fixed income. So, in the future we think we will have a more diversified fixed-income portfolio. But tell me when that will be? I can't tell you when they will stop holding rates down.
Zimmerman: Right. It's quite counterintuitive to think about fixed income being riskier than equity because historically that's not been the case. But given the current environment, it's easy to see why that is the case.
McGregor: Yes.
Shannon Zimmerman does not own (actual or beneficial) shares in any of the securities mentioned above. Find out about Morningstar's editorial policies.
Oakmark Equity And Income Investor OAKBX $31.59 +0.25%
Oakmark Global Investor OAKGX $32.43 +0.12%

redpajama_set_name: RedPajamaCommonCrawl


text:
So Bizarre: Rick Santorum Claims California Universities Don't Teach American History
By Jeff Raines
Last week, Santorum claimed most of the public universities in the University of California system do not offer American history courses.
SANTORUM: "I was just reading something last night from the state of California. And that the California universities — I think it's seven or eight of the California system of universities don't even teach an American history course. It's not even available to be taught."
Every school in the University of California system also offers a history major and American history coures (the Cal State system is separate from the University of California system).
Brooke Converse, a spokesperson from the UC system recently told blog ThinkProgress that all the UC schools (with the exception of UCSF) have to take a course in American history in order to graduate, but that the specific requirements vary per campus. In fact, most of the UC system requires their students to take a year's worth of American history courses and additionally a semester's worth of American government.
The Colbert Report has also covered Santorum's statement, commenting on Santorum's source, "like all critics of higher education, Rick subscribes to the same West Coast news paper I do, it's the Something From the State of California News.
Watch Stephen Colbert's full response:
This post originally appears on Campus Progress' Pushback.org


text:
Social Contagions of Emotion and Mental Health
Zika Virus outbreak during the year 2015-2016 triggered public fear / Photo by Wikimedia Commons
A research team comprised of experts from Louisiana State University and Pennsylvania State University found in a new study that people who keep their fears at bay during health crises can end up falling into a cycle of emotional suppression and fear. The study was ultimately focused on public fears and how they manifest during disease outbreaks, and the outbreak used to measure these fears and emotional suppression was the Zika virus outbreak of 2015-2016. Negative emotions and how people act on them in the face of contagious or infectious outbreaks can be, in and of themselves, somewhat contagious, though, as evidenced by yet another study of what mental health experts refer to as suicide contagion.
Mental health pundits have reached a consensus in recent years that the suicides of many high-profile celebrities can yield increased risk of suicide contagion. They define it as a process wherein one's suicide or a series of suicides — not necessarily those of celebrities or high-profile people at all — can contribute to an uptick in suicidal thoughts and behaviors among others in the spheres or under the influences of those who committed the fatal self-harms. This is especially affective on those known to harbor suicide risk factors or suicidal thoughts. "If they're already struggling with [depression] or risk of suicide, they're already trying to get information about how other people are experiencing it," according to John Ackerman, a suicide prevention coordinator for Nationwide Children's Hospital's Center for Suicide Prevention and Research in Ohio.
"Especially when you've got high-profile people who are successful and who the world views as having a lot going for them and they die by suicide, it can generate feelings of hopelessness," Ackerman adds. The U.S. recorded a massive uptick in suicides in the wake of notorious comedian Robin Williams's suicide to the tune of a 9.85 percent increase. That yielded an extra 1,841 deaths by suicide in 2014 according to the study, which was recently published in PLoS One. That study was predicated on monthly suicide data collected by the U.S. Centers for Disease Control and Prevention, and the collection took place during a 16-year period from 1999 to 2015. Researchers subsequently reviewed the data to assess how suicide rates changed following Robin Williams's death, to which American media commonly alluded to as an abrupt surprise.
"In the story with Robin Williams, you saw a 10 percent increase in deaths especially among middle-aged men using the method that was described," says Ackerman, an expert who was unaffiliated with the research team that conducted the study. "So we get concerned with celebrity suicides because there's lots of attention and lots of specific reporting about it in a sensational way. People may be more likely to identify with that person." The striking phenomenon of suicide contagion has been observed in military units, schools, families and general coteries of friends.
In other words, it's not just disease but also disposition that, to some extent, can prove contagious, which is why that infectiousness can be compounded by more overt health crises in which there is an actual outbreak of some kind of illness to such a degree that people begin to feel overwhelmed by the fear of contracting the illness in question. The reason for this, according to the first study conducted by the researchers from Penn State and Louisiana State, is that some of those people are likely to repress that fear and find themselves irrevocably damaged by it on an emotional level later. That's the conclusion that the study draws, and the case they make for it is based on the evidence collected from the Zika outbreak in Brazil, which occurred back in 2015.
Early that year, Brazilian health officials first reported Zika cases via skin rashes to the World Health Organization. By summer, they confirmed that Zika virus was the cause, and the outbreak rapidly pushed not just Brazil but surrounding countries as well to report cases of neurological disorders in connection with the virus, including Guillain-Barré Syndrome. This came with a most unusual uptick in congenital microcephaly among newborns, which is a deformity characterized by very small head sizes. These infants experience hearing and vision impairments, seizures and developmental disabilities. The WHO announced the correlation between Zika infections of pregnant women and congenital microcephaly in February 2016 as a public health emergency of international concern.
The research team measured the emotional responses of pregnant women in the US during the outbreak by recruiting 1,002 women between the ages of 18 and 35 in states believed to be at risk due to being within the migratory ranges of the Zika-carrying mosquitoes — Florida, Alabama, Mississippi, Louisiana, Texas, New Mexico, and Arizona. Florida, of course, did eventually report a Zika containment problem. 912 participants provided usable data, which was gathered via survey. The researchers found participants who reportedly suppressed their fears of Zika as experiencing far greater levels of fear later, which resulted in exorbitant emotional stress. Media reports were the common triggers for these fears. "It turns out that not only is suppression ineffective at handling fear, but it's counter-productive," according to James Dillard, lead author on the study. "It creates a cycle of fear — and it's a vicious cycle."
"When people become frightened there are some good things that can happen — they search out information, they get politically engaged, they might engage in self-protective behavior — but when people get really scared, it's harmful for them," Dillard adds. "Stress hormones pour out and staying in that hyper-vigilant state — fear — is also resource intensive." These media reports, of course, play a similar role in instigating the repression and subsequent expression of greater fear to the role that they play in promoting the suicide contagion.
Data showed that suicide incidents increase up to 9.85 percent / Photo by Getty Images
Louisiana State University, Pennsylvania State University, Nationwide Children's Hospital, Ohio, Columbus, Center for Suicide Prevention and Research, mental health, Zika virus, U.S., Centers for Disease Control and Prevention, Robin Williams, PLoS One, John Ackerman, suicide contagion, Guillain-Barré Syndrome, World Health Organization, neurological disorder, microcephaly, Florida, Alabama, Mississippi, Louisiana, Texas, New Mexico, Arizona, James Dillard, stress hormone
Shaking off the stigma attached to HIV testing
Romance Facilitates the Biological Need to Be with Someone


text:
Home Projects ALL PROJECTS About us Contact Press
Barbara Spano'
Architect MArch
Barbara studied at "La Sapienza" University of Rome - Italy and at Universidade "Tecnica Alto de Ajuda", Lisbon – Portugal. Graduated with a Second Level Master degree (cum laude) in Architecture in 2001 -Selection of the best projects of the 2001 Academic year. Gained in depth experience working for international renowned firms as Foster+Partner and Ian Ritchie Architects in London. In 2006, Barbara founded her own practice. Since then, she built a good reputation in luxury residential refurbishment/conversion projects in Central London and Boutique Hotels in Italy.
Giulia Galiberti
Giulia graduated from the Politecnico di Torino, Facolta' di Architettura before joining Aukett Europe Amsterdam where she worked on several high profile projects in the Netherlands, notably Unisys Headquarters, taking responsibility for all the fit-out packages of the 12.000 sqM building in Schiphol-Rijk. She moved to Aukett Europe London in 2001. She joined Foster + Partners in 2002 and has since been involved in projects that include leading the design of various fit-out and architectural packages for various international projects from Scotland to Australia, including a 60 storeys office tower for Central Market, Abu Dhabi. She started her own company in 2013 after 11 years at Foster + Partners, carrying on with high profile clients and projects.
Maddalena Cannarsa
Maddalena studied at "La Sapienza" University of Rome and Ecole d'architecture de Paris La Villette. Graduated with a Second Level Master degree (cum laude) in Architecture at La Sapienza University of Rome in 2001. Postgraduate master degree in Interactive Spaces Design For Communication And Broadcasting Gained in depth experience working for international renowned firms like Foster+Partner in London with the role of associate, Populous in London, Estudio Lamela in Madrid and ABDR in Rome. Specialized in Sport Architecture she recently collaborated with Hassell in Istanbul for the 2020 Olympic Bid and with Dan Meis Architects in New York for the New Rome Stadium.
Gabriele Damiano
Architect Assistant


Find answers to your questions from this page.
What can Coaching WRX be used for?
Coaching WRX can only be used for selling, buying and delivering coaching/training services.
We believe strongly in the power of coaching and see the impact in all aspects of the clients. Coaching WRX is read Coaching works, since coaching really does work.
What is your approach to data protection?
We value your trust and care deeply about your privacy and take all reasonable steps to protect your information from misuse and keep it secure. Coaching WRX is designed for professional ethical coaches serving corporate leaders and the data security is extremely important. We comply with all applicable data protection laws and regulations. We continuously develop our service and charge for our service. That is our business logic, not making you (or your data) the product. We do not sell, give or even think about giving your data and information further. Any pictures, personal information, session notes etc. you put to Coaching WRX, is owned by you.
Where is the data stored and how is the confidentiality protected?
Our servers are hosted by one of the largest hosting companies in Europe and are located in Helsinki datacenter in Finland in full compliance with the strict European data protection regulations (GDPR). Our servers and data are protected with latest hardware appliances, software firewalls, automated security tools and sophisticated perimeter security technologies, providing us with first-rate protection against large-scale attacks. Servers are powered by new Intel Skylake Xeon CPUs together with speedy NVMe SSDs and redundant 10 Gbit network connection. Certified in accordance with DIN ISO/IEC 27001. The data center has a modern early warning fire system with direct connection to the local fire department, special door locking systems, video-monitored high-security perimeter fencing around the entire data center park, electronic access control, ultra-modern surveillance cameras for 24/7 monitoring of access routes, entrances, security door interlocking systems and server rooms.
We use Cronofy to safely integrate your calendar to Coaching WRX. Cronofy uses Amazon RDS for PostgreSQL as the database technology for integrator and end-user data. Data stored at rest in the underlying storage is encrypted, as are its automated backups, read replicas, and snapshots with the server located in Germany. All transfer of information between Coaching WRX and the Cronofy API requires SSL to encrypt data in transit. Communication between the Cronofy calendar sync platform and the Coaches calendar service is protected by SSL encryption, subject to support by the calendar service.
What is your liability if your site is hacked and my confidential data is stolen?
Our servers and data are protected by one of the largest hosting companies in Europe with first-rate protection and we are liable for doing everything commercially reasonable to protect your data. Beyond that we assume no liability or warranty. If this is not enough for you, you should not agree to our terms nor use the service.
How will I know that my intellectual property will not be copied by you or other users?
What you make public, is visible to anyone. Just like on your webpage. Anyone can read the info you publish. Every user has signed our user terms and committed to ethical behaviour and respecting the intellectual property rights (IPR's) of other users. You can also use the private service option, when you do not want to publish publicly.
Who can see the content I input to Coaching WRX?
Coaching WRX does not share your content with anyone and provides the best protection of your data through comprehensive security concepts. Your session notes are visible only to you.
- As a Client - once you have bought a service, the coach you buy services from, sees your profile data as well as the feedback and reference you give them. If the coach works in a larger coaching company, also the admin of the brand you log into can also see the above information.
- As a Coach - you understand that Coaching WRX is a public service and your profile and service data you make public is visible for others.
What is the price of using Coaching WRX?
Is there a time limit for the free version?
No. The trial is for you to experience how Coaching WRX makes leading your business easy. Your trial is valid with first 5 clients. Once you have 5 clients who have purchased services in your brand, your trial is over.
Can I upgrade or downgrade between Professional and Premium?
Yes. You can upgrade and downgrade your plan at any time.
- For clients: Coaching WRX is always free.
You are asking for my credit card. How can I know you are trustworthy?
Leadership is creating results in a way that nourishes trust. Having passion to build a strongly value driven, ethically lead business does not mean we don't care about money, we just care more about how the money is made. Ethics is in the core of who we are and was the most important reason to build Coaching WRX, since our founder Nonna Babitzin could not find a service on the market that really did what she needed, in a ethical and safe way. We use Stripe to safely process your credit card information, which is trusted by many companies offering an online shop option like Amazon, Microsoft and SalesForce.
We are a team of coaches who want Premium features, should everyone sign up individually?
If you are a team, only one of you should sign up for premium and create the brand for the team and then invite the others. The person creating the brand will become the admin and pay for the entire team.
You can cancel at any time. No more charges are made after you have canceled.
Please note, if you have chosen a paid plan, it can be a monthly plan or a annual plan. Monthly plan is invoiced monthly in advance and annual for the whole year in advance. You always save with the annual plan.
We do not return your payment of the rest of the period, if you cancel before the end of your paid period, however you can use the unused period later. Why? We like to keep it simple, effective and as title bureaucracy as possible. It keeps the costs also low. We have explained this in the user terms as well, because it is important that you know this in advance and feel ok with it before clicking the "I agree".
How does Coaching WRX work with my calendar?
Does Coaching WRX read my calendar and see my private and perhaps confidential information?
No, Coaching WRX only reads the busy/free information to enable your clients to book online and avoid double bookings.
We use Cronofy to integrate your calendar data securely. We request the right to list the calendars for you, create a event in your calendar, read the created events, delete the created event and send reminders, in order to enable clients to book, cancel and be reminded of sessions. Cronofy reads your calendar only to provide the integration service, they do not have the right to use the data for anything else and have a strict GDPR compliant data protection policy in place.
How can I specify what times clients can book?
In your Coaching WRX calendar settings you have two optional calendar logics. Either you set default working hours or set ready session slots. You can also specify when you work only virtually and when also face to face, and Coaching WRX only allows that type of session to be booked.
Coaching WRX only allows clients to book within the set working hours or session slots you have specified, if you are free.
You can also add specific extra working hours for example Dec 24 2020 at 12 pm – 3 pm.
When using the default working hours option, you can add session break or travel time to each session when you create the service, to make sure you get the needed breaks/travel time automatically in your calendar.
Coaching WRX reads your free and busy times directly from your calendar, so no double bookings can occur.
If I would like to just mark specific time slots I am available and not have Coaching WRX show my calendar busy/free information to clients, is that possible?
Yes, you can choose the calendar logic with ready session slots. Coaching WRX will still check your calendar busy/free info to prevent double bookings and will still calculate the travel distance needed for face to face sessions.
Can the client book a face to face session other side of the country?
For each of your session element, you can set a max distance for face to face sessions. When a client books a face to face meeting, Coaching WRX will check the travel distance will not be more than the distance you have specified. If the travel distance between your office and the place client wants to meet at, is longer than what you have specified ok for you, the client is advised to either convert the session to a virtual session or contact you to agree where to meet.
Can clients book sessions back to back all day long?
It is important you reserve time to have breaks and especially lunch during the day You can specify a break/travel time before or/and after a session on each of your session elements and Coaching WRX will automatically add that break/travel time to your calendar when client books a session. You can also block out any times in your calendar simply by making a calendar event directly to your calendar. This will show as busy and clients are not able to book that time slot.
No worries, you can specify how many individual client slots you have. For example you specify you only take 5 individual client processes at the same time, so Coaching WRX will let the 6th client know you are currently fully booked and ask the client if they want to be notified when a client slot is available. If they do, you will receive a email about this client wanting to be notified.
Don't worry. You can specify the minimum notice time you need about a new session booking, which will determine if the client can book a session starting in one hour from now or perhaps 24h from now. Coaching WRX will automatically add the session to your calendar and also cc you on the booking confirmation sent to client. You can also specify the maximum advance booking and allow the client to only book for example 6 months ahead.
No worries. We've got this covered as well. As the most sophisticated setting in Coaching WRX calendar, you can pre-book days for full day trainings by setting for example Mondays twice a month to be pre-booked, so individual session booking cannot be made for these days. This feature is created to assure you have full days available for clients. You can specify when this pre-booking will be freed, for example if 30 days before the date, the pre-booking is deleted, and the day is available for individual session bookings.
What if I make my own calendar booking, how does that effect?
If you make calendar booking yourself (like "Doctors appointment"), we recommend creating a routine of adding needed travel time around it as well. This will assure that your clients won't book a session starting right after your other appointment and you'll have enough time to get back to the office and grab a cup of coffee before your next coaching session.
I work in several cities and would like to control my calendar and book the sessions in one city for the same day?
You are able to do the bookings for your client, if that is what you agree with the client or you can let the client know the dates you are in the city (you can add them to element info in this clients process) to guide them to book for those days.
Why is there a annoying long virtual link at the end of the calendar invitation?
Since Google has released a new feature that forced hangout link to all new calendar invitations. You can change this setting in your google account.
uncheck "Automatically add video calls to events created by a user" and SAVE.
The same procedure for free google calendar: Event Settings -> Uncheck the box "Automatically add video calls to events that I create" and click update.
This will assure your clients get a good looking invitation from Coaching WRX to join your next coaching session.
Can I create customer specific services?
2) Create a client portfolio (Premium plan) and link a service to that portfolio. Then the service is visible to only the clients who have the set email domains. This is great with managing frame agreement clients, you can set only the services agreed with the prices negotiated, to be visible in the portfolio. These clients can sign in from a different login page and only see the portfolio content. AND you can brand it with the clients brand. If the client creates a Tribe account, they can add your client portfolio to their account.
Once the client buys the service, the service becomes a unique copy and you can add content specifically for this client.
Can I save session notes?
Yes, both coach and client can add private session notes, that are not visible to anyone. Coach can write the agreed targets that are visible for both coach and client. And client can add actions agreed with deadlines, also visible for both. Each note has a clear explanation on the visibility. You can also have a chat like communications in between sessions.


A stunning black lacquered, wooden 'piano' box, containing a short-term humidification system and a small compartment for accessory storage, brilliantly displays the "AVO 25th Anniversary Edition" cigars. Presented in a splendid 6" x 52 Toro format, the full-bodied, remarkably aromatic cigar, possesses sweet and spicy notes with a truly captivating aftertaste. The extraordinarily balanced filler tobaccos are refined with a Piloto binder and crowned with a silky Criollo, Sun-Grown (D.R.) wrapper, creating an exceptional smoking experience. Consisting entirely of Dominican tobaccos – a true Dominican "Puro" is brought to life in celebration of this special anniversary.
The "AVO 25th Anniversary Edition" is produced in extremely limited quantities, only 2,000 individually numbered boxes containing 25 cigars each will be available in the United States.
The retail price will be $16.00 per cigar – $400.00 per box, taxes not included.
"AVO 25th Anniversary Edition" was unveiled at the IPCPR convention in Orlando, FL. and will begin shipping to Select Merchant locations this week.
This entry was posted in Avo, Cigar Industry News. Bookmark the permalink.


The volume toggling issue that has been plaguing the UK Galaxy Nexus over its first few days on the market was originally thought to be software-related. Many assumed that a simple OS tweak would take care of the problem, but that may not be the case after all. Through the testing you can see above, the volume rocker on the G-Nex is being toggled up and down even while in the bootloader, hence the scrolling between options on the screen.
From what we can tell, the tester has placed a call on his secondary phone, is then moving it up against the G-Nex which is causing the internal radio to freak out (official term there). When the radio is doing whatever the heck it is doing on the inside, it is also triggering the volume rocker to adjust all the way down, leading people to believe that this is a hardware problem rather than software.
Still no way to tell if this issue lives on the 4G LTE version until we get the phone in our hands.


text:
Home » News & Press Releases » IFA Football For All 20th anniversary
IFA Football For All 20th anniversary
Michael Boyd of the Irish Football Association – who are core funded by CRC – was interviewed by Sky Sports for the 20th anniversary of their Football For All campaign on tackling sectarianism.
There would be no Football For All without the support of the CRC."
The Irish FA's Football For All campaign focuses on tackling sectarianism at Northern Ireland international games, and for the 20th anniversary Michael Boyd took time to reflect on all that has been achieved.
Before the launch of the Football For All campaign, Michael recalled: "We were struggling to get a sponsor for the kit because the image of NI football was so bad."
Issues of sectarianism and racism in the Windsor Park stands needed to be addressed and changed for the better.
Now as the IFA celebrates 20 years of the campaign, Windsor Park has a completely different feel.
"It's totally transformed," Michael said. "Every match is sold out and families are happy to come here."
The campaign now continues to evolve into other areas of equality and tolerance.
Watch the TV interview here: https://www.skysports.com/football/news/11095/12135441/neil-lennon-threat-a-turning-point-for-northern-ireland-campaign


FOOD NIPPON is our series of seasonal events focused on "rediscovering Japanese food culture." Since 2013, we have been gathering stories from around Japan that tell of the richness of this country, delving into foods and customs, and learning from our ancestors' wisdom and ingenious adaptations, which have been passed down through generations.
In this eighth edition of FOOD NIPPON, we delve into the food culture of Donan, or Southern Hokkaido, as shared with us by local growers, makers and craftsmen. We will be introducing selected food ingredients, sake and tableware, specifically chosen for their ability to convey the richness and appeal of the region.
In Makkarimura, situated in the foothills of Yoteizan, we came across vegetable growers who really make the most of this region's unique natural environment with its plentiful spring water, rich volcanic soil offering excellent drainage, and extremely heavy snowfalls. Here, local wisdom has created a method whereby vegetables are stored beneath the deep snow to maximize their sweetness.
With its exotic streetscape, Hakodate was the backdrop for several fascinating encounters. The Tachikawa Family House, built more than 100 years ago, was fashioned on a warehouse with thick mortar walls. Today it is home to the TACHIKAWA CAFÉ, where Chef Murai offers wild game cuisine, serving dishes of duck and Ezoshika Hokkaido venison that he has hunted himself. Deer-hunting with Chef Murai was an incredible opportunity to reflect again on the importance of coexisting with nature.
We also met with some incredibly enterprising artists in Hakodate. We will be showcasing some truly unique pieces of tableware they have created incorporating ideas from various cultures.
There is so much to offer this winter, from the deliciously sweet vegetables of Makkarimura to deer hunted in the Komagatake region, and the plentiful catches of shellfish from Funka Bay brought in to port at Morimachi.
We invite you to come and enjoy the rich food culture offered by the wise people who call this incredible region home.
During the FOOD NIPPON 2014 Winter edition, there will be an exhibition at our sister shop HIGASHIYA GINZA featuring the crafts of Hokkaido.
On display, you will find wooden implements made from Hokkaido-grown Sen and Japanese pagoda tree wood, as well as pottery made from yellow sand clay, which accumulated in the region ages ago.


text:
[![Code Climate](https://codeclimate.com/github/tansengming/eliza-rb/badges/gpa.svg)](https://codeclimate.com/github/tansengming/eliza-rb)
[![Test Coverage](https://codeclimate.com/github/tansengming/eliza-rb/badges/coverage.svg)](https://codeclimate.com/github/tansengming/eliza-rb/coverage)

# ELIZA-rb

A Ruby implementation Joseph Weizenbaum's ELIZA, your friendly neighborhood robo Rogerian psychotherapist.

_This is a work in progress. The rules needs a bit more work before it's ready for 1.0. In the meantime have fun and let me know how it goes._

This is what it looks like chatting with her,

```
ELIZA: Please tell me what's been bothering you.
I have problems sleeping every night.
ELIZA: That's quite interesting.
It's not really interesting. More bothersome than anything.
ELIZA: What does that suggest to you?
I think it means that I've been having bad dreams.
ELIZA: You say you think it means that you've been having bad dreams?
Yes, exactly.
ELIZA: I understand.
But how can you? You're a computer!
ELIZA: What about machines worries you?
```

# Getting Started

## Installing

TBD

## Usage

```ruby
eliza   = Eliza::Bot.new
initial = eliza.initial_phrase
reply   = eliza.transform(input_string)

 # `#transform` returns a final phrase in case of a quit phrase
 # but you can also get a final phrase with:
 final  = eliza.final_phrase
```

## Command Line Interface

You can chat with ELIZA on the CLI by running:

`./bin/eliza-rb`

## Docker

If you already have Docker installed, here's how you can get started:

- `docker build -t eliza-rb github.com/tansengming/eliza-rb`
- `docker run -it eliza-rb`

# Development

## Approach

ELIZA works by matching keywords and using those keywords to form replies with [a bunch of rules](lib/data/data.yml):

Let's say `forget` is a keyword with decomposition and reassembly rules that look like this:

```yaml
{
  decomposition_pattern: "* i forget *"
  reassembly_pattern: Can you think of why you might forget \2?
}

```

If we start off with a sentence like:

> **What if** I forget **about the kettle**?

Applying the rules would create this reply:

> Can you think of why you might forget **about the kettle**?

## References

- [Joseph Weizenbaum's ACM paper](https://www.csee.umbc.edu/courses/331/papers/eliza.html)
- [mass:werk's Javascript implentation](http://www.masswerk.at/elizabot/)
- [ELIZA on Wikipedia](https://en.wikipedia.org/wiki/ELIZA)

redpajama_set_name: RedPajamaGithub


text:
package org.apache.hadoop.hdfs.shortcircuit;

import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_BLOCK_SIZE_KEY;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_CLIENT_CONTEXT;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_CLIENT_DOMAIN_SOCKET_DATA_TRAFFIC;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_CLIENT_READ_SHORTCIRCUIT_KEY;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_CLIENT_READ_SHORTCIRCUIT_SKIP_CHECKSUM_KEY;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_DOMAIN_SOCKET_PATH_KEY;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_CLIENT_READ_SHORTCIRCUIT_STREAMS_CACHE_EXPIRY_MS_KEY;
import static org.hamcrest.CoreMatchers.equalTo;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import com.google.common.collect.HashMultimap;
import org.apache.commons.lang.mutable.MutableBoolean;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.BlockReaderFactory;
import org.apache.hadoop.hdfs.BlockReaderTestUtil;
import org.apache.hadoop.hdfs.DFSClient;
import org.apache.hadoop.hdfs.DFSInputStream;
import org.apache.hadoop.hdfs.DFSTestUtil;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.ExtendedBlockId;
import org.apache.hadoop.hdfs.MiniDFSCluster;
import org.apache.hadoop.hdfs.net.DomainPeer;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.hdfs.protocol.ExtendedBlock;
import org.apache.hadoop.hdfs.server.datanode.BlockMetadataHeader;
import org.apache.hadoop.hdfs.server.datanode.DataNodeFaultInjector;
import org.apache.hadoop.hdfs.server.datanode.ShortCircuitRegistry;
import org.apache.hadoop.hdfs.server.datanode.ShortCircuitRegistry.RegisteredShm;
import org.apache.hadoop.hdfs.shortcircuit.DfsClientShmManager.PerDatanodeVisitorInfo;
import org.apache.hadoop.hdfs.shortcircuit.DfsClientShmManager.Visitor;
import org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.CacheVisitor;
import org.apache.hadoop.hdfs.shortcircuit.ShortCircuitCache.ShortCircuitReplicaCreator;
import org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.Slot;
import org.apache.hadoop.hdfs.shortcircuit.ShortCircuitShm.ShmId;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.net.unix.DomainSocket;
import org.apache.hadoop.net.unix.TemporarySocketDirectory;
import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import org.apache.hadoop.test.GenericTestUtils;
import org.apache.hadoop.util.DataChecksum;
import org.apache.hadoop.util.Time;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;

public class TestShortCircuitCache {
  static final Log LOG = LogFactory.getLog(TestShortCircuitCache.class);

  private static class TestFileDescriptorPair {
    final TemporarySocketDirectory dir = new TemporarySocketDirectory();
    final FileInputStream[] fis;

    public TestFileDescriptorPair() throws IOException {
      fis = new FileInputStream[2];
      for (int i = 0; i < 2; i++) {
        String name = dir.getDir() + "/file" + i;
        FileOutputStream fos = new FileOutputStream(name);
        if (i == 0) {
          // write 'data' file
          fos.write(1);
        } else {
          // write 'metadata' file
          BlockMetadataHeader header =
              new BlockMetadataHeader((short)1,
                  DataChecksum.newDataChecksum(DataChecksum.Type.NULL, 4));
          DataOutputStream dos = new DataOutputStream(fos);
          BlockMetadataHeader.writeHeader(dos, header);
          dos.close();
        }
        fos.close();
        fis[i] = new FileInputStream(name);
      }
    }

    public FileInputStream[] getFileInputStreams() {
      return fis;
    }

    public void close() throws IOException {
      IOUtils.cleanup(LOG, fis);
      dir.close();
    }

    public boolean compareWith(FileInputStream data, FileInputStream meta) {
      return ((data == fis[0]) && (meta == fis[1]));
    }
  }

  private static class SimpleReplicaCreator
      implements ShortCircuitReplicaCreator {
    private final int blockId;
    private final ShortCircuitCache cache;
    private final TestFileDescriptorPair pair;

    SimpleReplicaCreator(int blockId, ShortCircuitCache cache,
        TestFileDescriptorPair pair) {
      this.blockId = blockId;
      this.cache = cache;
      this.pair = pair;
    }

    @Override
    public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
      try {
        ExtendedBlockId key = new ExtendedBlockId(blockId, "test_bp1");
        return new ShortCircuitReplicaInfo(
            new ShortCircuitReplica(key,
                pair.getFileInputStreams()[0], pair.getFileInputStreams()[1],
                cache, Time.monotonicNow(), null));
      } catch (IOException e) {
        throw new RuntimeException(e);
      }
    }
  }

  @Test(timeout=60000)
  public void testCreateAndDestroy() throws Exception {
    ShortCircuitCache cache =
        new ShortCircuitCache(10, 1, 10, 1, 1, 10000, 0);
    cache.close();
  }

  @Test(timeout=60000)
  public void testAddAndRetrieve() throws Exception {
    final ShortCircuitCache cache =
        new ShortCircuitCache(10, 10000000, 10, 10000000, 1, 10000, 0);
    final TestFileDescriptorPair pair = new TestFileDescriptorPair();
    ShortCircuitReplicaInfo replicaInfo1 =
      cache.fetchOrCreate(new ExtendedBlockId(123, "test_bp1"),
        new SimpleReplicaCreator(123, cache, pair));
    Preconditions.checkNotNull(replicaInfo1.getReplica());
    Preconditions.checkState(replicaInfo1.getInvalidTokenException() == null);
    pair.compareWith(replicaInfo1.getReplica().getDataStream(),
                     replicaInfo1.getReplica().getMetaStream());
    ShortCircuitReplicaInfo replicaInfo2 =
      cache.fetchOrCreate(new ExtendedBlockId(123, "test_bp1"),
          new ShortCircuitReplicaCreator() {
        @Override
        public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
          Assert.fail("expected to use existing entry.");
          return null;
        }
      });
    Preconditions.checkNotNull(replicaInfo2.getReplica());
    Preconditions.checkState(replicaInfo2.getInvalidTokenException() == null);
    Preconditions.checkState(replicaInfo1 == replicaInfo2);
    pair.compareWith(replicaInfo2.getReplica().getDataStream(),
                     replicaInfo2.getReplica().getMetaStream());
    replicaInfo1.getReplica().unref();
    replicaInfo2.getReplica().unref();

    // Even after the reference count falls to 0, we still keep the replica
    // around for a while (we have configured the expiry period to be really,
    // really long here)
    ShortCircuitReplicaInfo replicaInfo3 =
      cache.fetchOrCreate(
          new ExtendedBlockId(123, "test_bp1"), new ShortCircuitReplicaCreator() {
        @Override
        public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
          Assert.fail("expected to use existing entry.");
          return null;
        }
      });
    Preconditions.checkNotNull(replicaInfo3.getReplica());
    Preconditions.checkState(replicaInfo3.getInvalidTokenException() == null);
    replicaInfo3.getReplica().unref();

    pair.close();
    cache.close();
  }

  @Test(timeout=60000)
  public void testExpiry() throws Exception {
    final ShortCircuitCache cache =
        new ShortCircuitCache(2, 1, 1, 10000000, 1, 10000000, 0);
    final TestFileDescriptorPair pair = new TestFileDescriptorPair();
    ShortCircuitReplicaInfo replicaInfo1 =
      cache.fetchOrCreate(
        new ExtendedBlockId(123, "test_bp1"),
          new SimpleReplicaCreator(123, cache, pair));
    Preconditions.checkNotNull(replicaInfo1.getReplica());
    Preconditions.checkState(replicaInfo1.getInvalidTokenException() == null);
    pair.compareWith(replicaInfo1.getReplica().getDataStream(),
                     replicaInfo1.getReplica().getMetaStream());
    replicaInfo1.getReplica().unref();
    final MutableBoolean triedToCreate = new MutableBoolean(false);
    do {
      Thread.sleep(10);
      ShortCircuitReplicaInfo replicaInfo2 =
        cache.fetchOrCreate(
          new ExtendedBlockId(123, "test_bp1"), new ShortCircuitReplicaCreator() {
          @Override
          public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
            triedToCreate.setValue(true);
            return null;
          }
        });
      if ((replicaInfo2 != null) && (replicaInfo2.getReplica() != null)) {
        replicaInfo2.getReplica().unref();
      }
    } while (triedToCreate.isFalse());
    cache.close();
  }

  @Test(timeout=60000)
  public void testEviction() throws Exception {
    final ShortCircuitCache cache =
        new ShortCircuitCache(2, 10000000, 1, 10000000, 1, 10000, 0);
    final TestFileDescriptorPair pairs[] = new TestFileDescriptorPair[] {
      new TestFileDescriptorPair(),
      new TestFileDescriptorPair(),
      new TestFileDescriptorPair(),
    };
    ShortCircuitReplicaInfo replicaInfos[] = new ShortCircuitReplicaInfo[] {
      null,
      null,
      null
    };
    for (int i = 0; i < pairs.length; i++) {
      replicaInfos[i] = cache.fetchOrCreate(
          new ExtendedBlockId(i, "test_bp1"),
            new SimpleReplicaCreator(i, cache, pairs[i]));
      Preconditions.checkNotNull(replicaInfos[i].getReplica());
      Preconditions.checkState(replicaInfos[i].getInvalidTokenException() == null);
      pairs[i].compareWith(replicaInfos[i].getReplica().getDataStream(),
                           replicaInfos[i].getReplica().getMetaStream());
    }
    // At this point, we have 3 replicas in use.
    // Let's close them all.
    for (int i = 0; i < pairs.length; i++) {
      replicaInfos[i].getReplica().unref();
    }
    // The last two replicas should still be cached.
    for (int i = 1; i < pairs.length; i++) {
      final Integer iVal = new Integer(i);
      replicaInfos[i] = cache.fetchOrCreate(
          new ExtendedBlockId(i, "test_bp1"),
            new ShortCircuitReplicaCreator() {
        @Override
        public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
          Assert.fail("expected to use existing entry for " + iVal);
          return null;
        }
      });
      Preconditions.checkNotNull(replicaInfos[i].getReplica());
      Preconditions.checkState(replicaInfos[i].getInvalidTokenException() == null);
      pairs[i].compareWith(replicaInfos[i].getReplica().getDataStream(),
                           replicaInfos[i].getReplica().getMetaStream());
    }
    // The first (oldest) replica should not be cached.
    final MutableBoolean calledCreate = new MutableBoolean(false);
    replicaInfos[0] = cache.fetchOrCreate(
        new ExtendedBlockId(0, "test_bp1"),
          new ShortCircuitReplicaCreator() {
        @Override
        public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
          calledCreate.setValue(true);
          return null;
        }
      });
    Preconditions.checkState(replicaInfos[0].getReplica() == null);
    Assert.assertTrue(calledCreate.isTrue());
    // Clean up
    for (int i = 1; i < pairs.length; i++) {
      replicaInfos[i].getReplica().unref();
    }
    for (int i = 0; i < pairs.length; i++) {
      pairs[i].close();
    }
    cache.close();
  }

  @Test(timeout=60000)
  public void testTimeBasedStaleness() throws Exception {
    // Set up the cache with a short staleness time.
    final ShortCircuitCache cache =
        new ShortCircuitCache(2, 10000000, 1, 10000000, 1, 10, 0);
    final TestFileDescriptorPair pairs[] = new TestFileDescriptorPair[] {
      new TestFileDescriptorPair(),
      new TestFileDescriptorPair(),
    };
    ShortCircuitReplicaInfo replicaInfos[] = new ShortCircuitReplicaInfo[] {
      null,
      null
    };
    final long HOUR_IN_MS = 60 * 60 * 1000;
    for (int i = 0; i < pairs.length; i++) {
      final Integer iVal = new Integer(i);
      final ExtendedBlockId key = new ExtendedBlockId(i, "test_bp1");
      replicaInfos[i] = cache.fetchOrCreate(key,
          new ShortCircuitReplicaCreator() {
        @Override
        public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
          try {
            return new ShortCircuitReplicaInfo(
                new ShortCircuitReplica(key,
                    pairs[iVal].getFileInputStreams()[0],
                    pairs[iVal].getFileInputStreams()[1],
                    cache, Time.monotonicNow() + (iVal * HOUR_IN_MS), null));
          } catch (IOException e) {
            throw new RuntimeException(e);
          }
        }
      });
      Preconditions.checkNotNull(replicaInfos[i].getReplica());
      Preconditions.checkState(replicaInfos[i].getInvalidTokenException() == null);
      pairs[i].compareWith(replicaInfos[i].getReplica().getDataStream(),
                           replicaInfos[i].getReplica().getMetaStream());
    }

    // Keep trying to getOrCreate block 0 until it goes stale (and we must re-create.)
    GenericTestUtils.waitFor(new Supplier<Boolean>() {
      @Override
      public Boolean get() {
        ShortCircuitReplicaInfo info = cache.fetchOrCreate(
          new ExtendedBlockId(0, "test_bp1"), new ShortCircuitReplicaCreator() {
          @Override
          public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
            return null;
          }
        });
        if (info.getReplica() != null) {
          info.getReplica().unref();
          return false;
        }
        return true;
      }
    }, 500, 60000);

    // Make sure that second replica did not go stale.
    ShortCircuitReplicaInfo info = cache.fetchOrCreate(
        new ExtendedBlockId(1, "test_bp1"), new ShortCircuitReplicaCreator() {
      @Override
      public ShortCircuitReplicaInfo createShortCircuitReplicaInfo() {
        Assert.fail("second replica went stale, despite 1 " +
            "hour staleness time.");
        return null;
      }
    });
    info.getReplica().unref();

    // Clean up
    for (int i = 1; i < pairs.length; i++) {
      replicaInfos[i].getReplica().unref();
    }
    cache.close();
  }

  private static Configuration createShortCircuitConf(String testName,
      TemporarySocketDirectory sockDir) {
    Configuration conf = new Configuration();
    conf.set(DFS_CLIENT_CONTEXT, testName);
    conf.setLong(DFS_BLOCK_SIZE_KEY, 4096);
    conf.set(DFS_DOMAIN_SOCKET_PATH_KEY, new File(sockDir.getDir(),
        testName).getAbsolutePath());
    conf.setBoolean(DFS_CLIENT_READ_SHORTCIRCUIT_KEY, true);
    conf.setBoolean(DFS_CLIENT_READ_SHORTCIRCUIT_SKIP_CHECKSUM_KEY,
        false);
    conf.setBoolean(DFS_CLIENT_DOMAIN_SOCKET_DATA_TRAFFIC, false);
    DFSInputStream.tcpReadsDisabledForTesting = true;
    DomainSocket.disableBindPathValidation();
    Assume.assumeThat(DomainSocket.getLoadingFailureReason(), equalTo(null));
    return conf;
  }

  private static DomainPeer getDomainPeerToDn(Configuration conf)
      throws IOException {
    DomainSocket sock =
        DomainSocket.connect(conf.get(DFS_DOMAIN_SOCKET_PATH_KEY));
    return new DomainPeer(sock);
  }

  @Test(timeout=60000)
  public void testAllocShm() throws Exception {
    BlockReaderTestUtil.enableShortCircuitShmTracing();
    TemporarySocketDirectory sockDir = new TemporarySocketDirectory();
    Configuration conf = createShortCircuitConf("testAllocShm", sockDir);
    MiniDFSCluster cluster =
        new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
    cluster.waitActive();
    DistributedFileSystem fs = cluster.getFileSystem();
    final ShortCircuitCache cache =
        fs.getClient().getClientContext().getShortCircuitCache();
    cache.getDfsClientShmManager().visit(new Visitor() {
      @Override
      public void visit(HashMap<DatanodeInfo, PerDatanodeVisitorInfo> info)
          throws IOException {
        // The ClientShmManager starts off empty
        Assert.assertEquals(0,  info.size());
      }
    });
    DomainPeer peer = getDomainPeerToDn(conf);
    MutableBoolean usedPeer = new MutableBoolean(false);
    ExtendedBlockId blockId = new ExtendedBlockId(123, "xyz");
    final DatanodeInfo datanode =
        new DatanodeInfo(cluster.getDataNodes().get(0).getDatanodeId());
    // Allocating the first shm slot requires using up a peer.
    Slot slot = cache.allocShmSlot(datanode, peer, usedPeer,
                    blockId, "testAllocShm_client");
    Assert.assertNotNull(slot);
    Assert.assertTrue(usedPeer.booleanValue());
    cache.getDfsClientShmManager().visit(new Visitor() {
      @Override
      public void visit(HashMap<DatanodeInfo, PerDatanodeVisitorInfo> info)
          throws IOException {
        // The ClientShmManager starts off empty
        Assert.assertEquals(1,  info.size());
        PerDatanodeVisitorInfo vinfo = info.get(datanode);
        Assert.assertFalse(vinfo.disabled);
        Assert.assertEquals(0, vinfo.full.size());
        Assert.assertEquals(1, vinfo.notFull.size());
      }
    });
    cache.scheduleSlotReleaser(slot);
    // Wait for the slot to be released, and the shared memory area to be
    // closed.  Since we didn't register this shared memory segment on the
    // server, it will also be a test of how well the server deals with
    // bogus client behavior.
    GenericTestUtils.waitFor(new Supplier<Boolean>() {
      @Override
      public Boolean get() {
        final MutableBoolean done = new MutableBoolean(false);
        try {
          cache.getDfsClientShmManager().visit(new Visitor() {
            @Override
            public void visit(HashMap<DatanodeInfo, PerDatanodeVisitorInfo> info)
                throws IOException {
              done.setValue(info.get(datanode).full.isEmpty() &&
                  info.get(datanode).notFull.isEmpty());
            }
          });
        } catch (IOException e) {
          LOG.error("error running visitor", e);
        }
        return done.booleanValue();
      }
    }, 10, 60000);
    cluster.shutdown();
    sockDir.close();
  }

  @Test(timeout=60000)
  public void testShmBasedStaleness() throws Exception {
    BlockReaderTestUtil.enableShortCircuitShmTracing();
    TemporarySocketDirectory sockDir = new TemporarySocketDirectory();
    Configuration conf = createShortCircuitConf("testShmBasedStaleness", sockDir);
    MiniDFSCluster cluster =
        new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
    cluster.waitActive();
    DistributedFileSystem fs = cluster.getFileSystem();
    final ShortCircuitCache cache =
        fs.getClient().getClientContext().getShortCircuitCache();
    String TEST_FILE = "/test_file";
    final int TEST_FILE_LEN = 8193;
    final int SEED = 0xFADED;
    DFSTestUtil.createFile(fs, new Path(TEST_FILE), TEST_FILE_LEN,
        (short)1, SEED);
    FSDataInputStream fis = fs.open(new Path(TEST_FILE));
    int first = fis.read();
    final ExtendedBlock block =
        DFSTestUtil.getFirstBlock(fs, new Path(TEST_FILE));
    Assert.assertTrue(first != -1);
    cache.accept(new CacheVisitor() {
      @Override
      public void visit(int numOutstandingMmaps,
          Map<ExtendedBlockId, ShortCircuitReplica> replicas,
          Map<ExtendedBlockId, InvalidToken> failedLoads,
          Map<Long, ShortCircuitReplica> evictable,
          Map<Long, ShortCircuitReplica> evictableMmapped) {
        ShortCircuitReplica replica = replicas.get(
            ExtendedBlockId.fromExtendedBlock(block));
        Assert.assertNotNull(replica);
        Assert.assertTrue(replica.getSlot().isValid());
      }
    });
    // Stop the Namenode.  This will close the socket keeping the client's
    // shared memory segment alive, and make it stale.
    cluster.getDataNodes().get(0).shutdown();
    cache.accept(new CacheVisitor() {
      @Override
      public void visit(int numOutstandingMmaps,
          Map<ExtendedBlockId, ShortCircuitReplica> replicas,
          Map<ExtendedBlockId, InvalidToken> failedLoads,
          Map<Long, ShortCircuitReplica> evictable,
          Map<Long, ShortCircuitReplica> evictableMmapped) {
        ShortCircuitReplica replica = replicas.get(
            ExtendedBlockId.fromExtendedBlock(block));
        Assert.assertNotNull(replica);
        Assert.assertFalse(replica.getSlot().isValid());
      }
    });
    cluster.shutdown();
  }

  /**
   * Test unlinking a file whose blocks we are caching in the DFSClient.
   * The DataNode will notify the DFSClient that the replica is stale via the
   * ShortCircuitShm.
   */
  @Test(timeout=60000)
  public void testUnlinkingReplicasInFileDescriptorCache() throws Exception {
    BlockReaderTestUtil.enableShortCircuitShmTracing();
    TemporarySocketDirectory sockDir = new TemporarySocketDirectory();
    Configuration conf = createShortCircuitConf(
        "testUnlinkingReplicasInFileDescriptorCache", sockDir);
    // We don't want the CacheCleaner to time out short-circuit shared memory
    // segments during the test, so set the timeout really high.
    conf.setLong(DFS_CLIENT_READ_SHORTCIRCUIT_STREAMS_CACHE_EXPIRY_MS_KEY,
        1000000000L);
    MiniDFSCluster cluster =
        new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
    cluster.waitActive();
    DistributedFileSystem fs = cluster.getFileSystem();
    final ShortCircuitCache cache =
        fs.getClient().getClientContext().getShortCircuitCache();
    cache.getDfsClientShmManager().visit(new Visitor() {
      @Override
      public void visit(HashMap<DatanodeInfo, PerDatanodeVisitorInfo> info)
          throws IOException {
        // The ClientShmManager starts off empty.
        Assert.assertEquals(0,  info.size());
      }
    });
    final Path TEST_PATH = new Path("/test_file");
    final int TEST_FILE_LEN = 8193;
    final int SEED = 0xFADE0;
    DFSTestUtil.createFile(fs, TEST_PATH, TEST_FILE_LEN,
        (short)1, SEED);
    byte contents[] = DFSTestUtil.readFileBuffer(fs, TEST_PATH);
    byte expected[] = DFSTestUtil.
        calculateFileContentsFromSeed(SEED, TEST_FILE_LEN);
    Assert.assertTrue(Arrays.equals(contents, expected));
    // Loading this file brought the ShortCircuitReplica into our local
    // replica cache.
    final DatanodeInfo datanode =
        new DatanodeInfo(cluster.getDataNodes().get(0).getDatanodeId());
    cache.getDfsClientShmManager().visit(new Visitor() {
      @Override
      public void visit(HashMap<DatanodeInfo, PerDatanodeVisitorInfo> info)
          throws IOException {
        Assert.assertTrue(info.get(datanode).full.isEmpty());
        Assert.assertFalse(info.get(datanode).disabled);
        Assert.assertEquals(1, info.get(datanode).notFull.values().size());
        DfsClientShm shm =
            info.get(datanode).notFull.values().iterator().next();
        Assert.assertFalse(shm.isDisconnected());
      }
    });
    // Remove the file whose blocks we just read.
    fs.delete(TEST_PATH, false);

    // Wait for the replica to be purged from the DFSClient's cache.
    GenericTestUtils.waitFor(new Supplier<Boolean>() {
      MutableBoolean done = new MutableBoolean(true);
      @Override
      public Boolean get() {
        try {
          done.setValue(true);
          cache.getDfsClientShmManager().visit(new Visitor() {
            @Override
            public void visit(HashMap<DatanodeInfo,
                  PerDatanodeVisitorInfo> info) throws IOException {
              Assert.assertTrue(info.get(datanode).full.isEmpty());
              Assert.assertFalse(info.get(datanode).disabled);
              Assert.assertEquals(1,
                  info.get(datanode).notFull.values().size());
              DfsClientShm shm = info.get(datanode).notFull.values().
                  iterator().next();
              // Check that all slots have been invalidated.
              for (Iterator<Slot> iter = shm.slotIterator();
                   iter.hasNext(); ) {
                Slot slot = iter.next();
                if (slot.isValid()) {
                  done.setValue(false);
                }
              }
            }
          });
        } catch (IOException e) {
          LOG.error("error running visitor", e);
        }
        return done.booleanValue();
      }
    }, 10, 60000);
    cluster.shutdown();
    sockDir.close();
  }

  static private void checkNumberOfSegmentsAndSlots(final int expectedSegments,
        final int expectedSlots, ShortCircuitRegistry registry) {
    registry.visit(new ShortCircuitRegistry.Visitor() {
      @Override
      public void accept(HashMap<ShmId, RegisteredShm> segments,
                         HashMultimap<ExtendedBlockId, Slot> slots) {
        Assert.assertEquals(expectedSegments, segments.size());
        Assert.assertEquals(expectedSlots, slots.size());
      }
    });
  }

  public static class TestCleanupFailureInjector
        extends BlockReaderFactory.FailureInjector {
    @Override
    public void injectRequestFileDescriptorsFailure() throws IOException {
      throw new IOException("injected I/O error");
    }
  }

  // Regression test for HDFS-7915
  @Test(timeout=60000)
  public void testDataXceiverCleansUpSlotsOnFailure() throws Exception {
    BlockReaderTestUtil.enableShortCircuitShmTracing();
    TemporarySocketDirectory sockDir = new TemporarySocketDirectory();
    Configuration conf = createShortCircuitConf(
        "testDataXceiverCleansUpSlotsOnFailure", sockDir);
    conf.setLong(DFS_CLIENT_READ_SHORTCIRCUIT_STREAMS_CACHE_EXPIRY_MS_KEY,
        1000000000L);
    MiniDFSCluster cluster =
        new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
    cluster.waitActive();
    DistributedFileSystem fs = cluster.getFileSystem();
    final Path TEST_PATH1 = new Path("/test_file1");
    final Path TEST_PATH2 = new Path("/test_file2");
    final int TEST_FILE_LEN = 4096;
    final int SEED = 0xFADE1;
    DFSTestUtil.createFile(fs, TEST_PATH1, TEST_FILE_LEN,
        (short)1, SEED);
    DFSTestUtil.createFile(fs, TEST_PATH2, TEST_FILE_LEN,
        (short)1, SEED);

    // The first read should allocate one shared memory segment and slot.
    DFSTestUtil.readFileBuffer(fs, TEST_PATH1);

    // The second read should fail, and we should only have 1 segment and 1 slot
    // left.
    fs.getClient().getConf().brfFailureInjector =
        new TestCleanupFailureInjector();
    try {
      DFSTestUtil.readFileBuffer(fs, TEST_PATH2);
    } catch (Throwable t) {
      GenericTestUtils.assertExceptionContains("TCP reads were disabled for " +
          "testing, but we failed to do a non-TCP read.", t);
    }
    checkNumberOfSegmentsAndSlots(1, 1,
        cluster.getDataNodes().get(0).getShortCircuitRegistry());
    cluster.shutdown();
    sockDir.close();
  }

  // Regression test for HADOOP-11802
  @Test(timeout=60000)
  public void testDataXceiverHandlesRequestShortCircuitShmFailure()
      throws Exception {
    BlockReaderTestUtil.enableShortCircuitShmTracing();
    TemporarySocketDirectory sockDir = new TemporarySocketDirectory();
    Configuration conf = createShortCircuitConf(
        "testDataXceiverHandlesRequestShortCircuitShmFailure", sockDir);
    conf.setLong(DFS_CLIENT_READ_SHORTCIRCUIT_STREAMS_CACHE_EXPIRY_MS_KEY,
        1000000000L);
    MiniDFSCluster cluster =
        new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
    cluster.waitActive();
    DistributedFileSystem fs = cluster.getFileSystem();
    final Path TEST_PATH1 = new Path("/test_file1");
    DFSTestUtil.createFile(fs, TEST_PATH1, 4096,
        (short)1, 0xFADE1);
    LOG.info("Setting failure injector and performing a read which " +
        "should fail...");
    DataNodeFaultInjector failureInjector = Mockito.mock(DataNodeFaultInjector.class);
    Mockito.doAnswer(new Answer<Void>() {
      @Override
      public Void answer(InvocationOnMock invocation) throws Throwable {
        throw new IOException("injected error into sendShmResponse");
      }
    }).when(failureInjector).sendShortCircuitShmResponse();
    DataNodeFaultInjector prevInjector = DataNodeFaultInjector.instance;
    DataNodeFaultInjector.instance = failureInjector;

    try {
      // The first read will try to allocate a shared memory segment and slot.
      // The shared memory segment allocation will fail because of the failure
      // injector.
      DFSTestUtil.readFileBuffer(fs, TEST_PATH1);
      Assert.fail("expected readFileBuffer to fail, but it succeeded.");
    } catch (Throwable t) {
      GenericTestUtils.assertExceptionContains("TCP reads were disabled for " +
          "testing, but we failed to do a non-TCP read.", t);
    }

    checkNumberOfSegmentsAndSlots(0, 0,
        cluster.getDataNodes().get(0).getShortCircuitRegistry());

    LOG.info("Clearing failure injector and performing another read...");
    DataNodeFaultInjector.instance = prevInjector;

    fs.getClient().getClientContext().getDomainSocketFactory().clearPathMap();

    // The second read should succeed.
    DFSTestUtil.readFileBuffer(fs, TEST_PATH1);

    // We should have added a new short-circuit shared memory segment and slot.
    checkNumberOfSegmentsAndSlots(1, 1,
        cluster.getDataNodes().get(0).getShortCircuitRegistry());

    cluster.shutdown();
    sockDir.close();
  }

  public static class TestPreReceiptVerificationFailureInjector
      extends BlockReaderFactory.FailureInjector {
    @Override
    public boolean getSupportsReceiptVerification() {
      return false;
    }
  }

  // Regression test for HDFS-8070
  @Test(timeout=60000)
  public void testPreReceiptVerificationDfsClientCanDoScr() throws Exception {
    BlockReaderTestUtil.enableShortCircuitShmTracing();
    TemporarySocketDirectory sockDir = new TemporarySocketDirectory();
    Configuration conf = createShortCircuitConf(
        "testPreReceiptVerificationDfsClientCanDoScr", sockDir);
    conf.setLong(DFS_CLIENT_READ_SHORTCIRCUIT_STREAMS_CACHE_EXPIRY_MS_KEY,
        1000000000L);
    MiniDFSCluster cluster =
        new MiniDFSCluster.Builder(conf).numDataNodes(1).build();
    cluster.waitActive();
    DistributedFileSystem fs = cluster.getFileSystem();
    fs.getClient().getConf().brfFailureInjector =
        new TestPreReceiptVerificationFailureInjector();
    final Path TEST_PATH1 = new Path("/test_file1");
    DFSTestUtil.createFile(fs, TEST_PATH1, 4096, (short)1, 0xFADE2);
    final Path TEST_PATH2 = new Path("/test_file2");
    DFSTestUtil.createFile(fs, TEST_PATH2, 4096, (short)1, 0xFADE2);
    DFSTestUtil.readFileBuffer(fs, TEST_PATH1);
    DFSTestUtil.readFileBuffer(fs, TEST_PATH2);
    ShortCircuitRegistry registry =
        cluster.getDataNodes().get(0).getShortCircuitRegistry();
    registry.visit(new ShortCircuitRegistry.Visitor() {
      @Override
      public void accept(HashMap<ShmId, RegisteredShm> segments,
                         HashMultimap<ExtendedBlockId, Slot> slots) {
        Assert.assertEquals(1, segments.size());
        Assert.assertEquals(2, slots.size());
      }
    });
    cluster.shutdown();
    sockDir.close();
  }
}


Previously, we were selling catalytic converters to another company, but after they began to understate the cost of our converters we tried working with "Exprom". We have a successful cooperation with this company for a year now without experiencing any problems.
"Exprom" also works with small batches of catalytic converters. We have a small car-care center, but for our small amounts we get the highest price in the market.


text:
Home > Resources for... > Lower Income Albertans
Are you looking for links to organizations that offer legal services and information to individuals for little or no cost?
Gathered on this page are resources that were developed with you in mind. But there may be general resources that are also appropriate.
See the section Learn More About...or search the list of all legal topics to find other relevant information.
CPLEA Suggested Resources
Not sure where to begin finding answers to your questions. Get started with our suggested resources. See additional resources below for more information.
Calgary Legal Guidance
Calgary Legal Guidance provides free legal advice for individuals with low income. If you need legal information and advice on: Family issues; Criminal issues; Civil issues; Restraining Orders; Emergency Protection Orders etc; Social Benefit issues; and; an evening course on Do Your Own Divorce.
Related legal topic(s): Legal services, Public legal education organizations
Calgary Legal Guidance - Education Sessions
Calgary Legal Guidance runs many workshops and presentations in the community on a variety of legal topics such as:
If you are an organization or agency that would like a presentation on a legal topic please contact Kim Feodoroff at 403.716.6476.
Calgary Legal Guidance - Immigration Law Program
Calgary Legal Guidance offers legal advice and assistance to newcomers who are looking for help in various immigration law matters. The Immigration Law Project can assist clients with: Making a claim for refugee protection, Preparing and filing applications for permanent residence, Applying for work permits,temporary resident visas and study permits, Family sponsorship issues, and Representation in specially considered cases. CLG offers three free legal advice outreach clinics at the following locations: Calgary Immigrant Women's Association (CIWA) (403.263.4414) - Offering advice in Family and Immigration Law; Centre for Newcomers (403.569.3325) Offering advice in Family and Immigration Law; and Immigrant Service Calgary (403.265.1120) Offering advice in Immigration Law for permanent residents and Canadian citizens. Call each location directly to book an appointment
Related legal topic(s): Immigration, Legal services, Refugees
Legal Aid Alberta
Legal Aid Alberta provides quality, effective legal advice and representation that enables eligible Albertans to resolve their legal issues; Eligibility guidelines are on its web site. It is an independent, publicly funded, not-for-profit organization that provides a broad range of services in the following areas:
Family Law & Child Welfare
Emergency Protection Orders & Domestic Violence
Adult Criminal Law
Youth Criminal Law
Service to the Siksika Nation
Duty Counsel (Legal Assistance at Court)
Related legal topic(s): Legal aid, Legal services
Pro Bono Students Canada (University of Calgary)
Pro Bono Students Canada (PBSC) is a national network of law schools and community organizations that matches law students who want to do pro bono work with public interest and non-governmental organizations, government agencies, tribunals and legal clinics during the academic year and during the summer. Over the past decade the program has expanded to include the Family Law Project, where students provide legal information to unrepresented individuals at the Provincial Family Court.
Related legal topic(s): Legal services, Non-profit and charity law
Student Legal Assistance (University of Calgary)
Student Legal Assistance (SLA) is an association of law students at the University of Calgary which provides year-round free legal assistance and representation to University of Calgary students and members of the public who are unable to afford legal services. Our services include: Representing qualifying individuals in Provincial Court for criminal, traffic, family and civil matters in Calgary, Banff and surrounding areas; Providing legal advice and services at the Calgary Drop In Centre; Assisting students with academic appeals; and Providing summary legal advice. A nominal disbursement charge applies to non-University of Calgary students.
Related legal topic(s): Legal services
Student Legal Services of Edmonton (SLS)
Student Legal Services of Edmonton (SLS) is a student-managed, non-profit society dedicated to helping low-income individuals in Edmonton and area understand their legal issues and solve their legal problems. SLS focuses on four projects: Civil & Family Law (landlord/tenant matters, contracts, WCB/AISH/CPP/EI hearings, family law matters, uncontested divorces, and more); Criminal Law (SLS provides basic criminal law information and represents individuals charged with relatively minor criminal and quasi-criminal offences); Legal Education and Reform (community lectures and outreach programs, and research on poverty-related law reform issues); and Pro Bono Students of Canada (legal research for non-profit organizations).
Related legal topic(s): Civil law, Family law general resources, Legal services, Public legal education organizations
Women's Centre Calgary - Legal Advice Clinic
The Women's Centre of Calgary is an ongoing source of information, support and advocacy. The Centre offers women quick access to emergency food, personal care supplies and bus tickets. It provides referrals to other agencies for food, clothing, furniture, housing, health, employment, education and recreation. The Centre operates a Legal Advice Clinic where volunteer lawyers provide free, half-hour legal advice sessions to women. The clinic is aimed at providing women with the preliminary information and support they may need to access the legal system. Family and other types of law are addressed, but not criminal law.
Related legal topic(s): Family law general resources, Legal services
Alberta Supports Contact Centres
The Alberta Supports Contact Centre is a new contact centre for general inquiries on income support, adult health benefits, child health benefits, child support services, and Assured Income for the Severely Handicapped. Advisors are available to provide general information on these programs and services, make referrals to community agencies and other government programs.
Related legal topic(s): Child support, Health issues
Alberta Works
Alberta Works helps unemployed people find and keep jobs, employers meet their need for skilled workers, Albertans with low incomes cover their basic costs of living. They offer services in different ways through: Employment Services, Employment and Career Resources,Training Supports, Alberta Job & Career Fairs., Workforce Partnerships, Income Support, and Health Benefits. See also: Information on the Alberta Supports Contact Centres.
Related legal topic(s): Disabilities, Health issues
Bissell Centre
The mission of the Centre is to work with others to empower people to move from poverty to prosperity. They enable people to meet their own basic daily needs, participate in community, have sustainable livelihoods, feel hope for the future and make plans for a prosperous life. The Centre offers a variety of programs which include victims services and advocacy.
Related legal topic(s): Advocacy, Homelessness, Poverty, Victim support and victim rights
Dial-A-Law (Calgary Legal Guidance)
Dial-A-Law provides the general public with basic information about the law and the legal system. In Calgary, call 403-234-9022, or call toll free from anywhere in Alberta: 1-800-332-1091. Topics that Dial-A-Law covers include: Consumer Law; Criminal Law; Employment Law; Family Law; Real Estate Law; Wills and Estate Law; Youth and the Law.
Related legal topic(s):
Edmonton Community Legal Centre (ECLC) - Income Supports Program
The Edmonton Community Legal Centre is a non profit organization that offers free legal information, advice and representation for people living with low income in the Edmonton area. The Centre helps individuals and families who have legal problems in the following areas: Landlord and Tenant; Employment/ Wrongful Dismissal; Small Claims; Income Support Advocacy; Human Rights; Debt; Immigration. The Centre offers an Income Supports Program which will help qualified applicants with appeals for these income benefit programs: Support for Independence (SFI), Assured Income for the Severely Handicapped (AISH), Employment Insurance (EI), Canada Pension Plan (CPP) and CPP Disability, and Old Age Security (OAS). For more information, call 780-702-1725.
Elizabeth Fry Society of Edmonton
The mission of the Elizabeth Fry Society of Edmonton is to foster the dignity and worth of women who come into conflict with the law, and help them live as valued members of their communities. They are a not-for-profit organization that has existed in Edmonton since 1977. The society offers a variety of programs for women and girls including a legal clinic. The Legal Clinic Program assists federally sentenced women at Edmonton Institute for Women by addressing their legal needs. The society has court workers who provide information to both men and women on court procedure and plea options. They also provide referrals to duty counsel and other community resources. The Elizabeth Fry Society helps women with the process of applying for a record suspension.
Related legal topic(s): Criminal records and record suspensions, Legal services, Reintegration, Restorative justice
Guide to Services for Lower Income Albertans
The Government of Alberta has many programs to help lower income Albertans. This guide can help find out what's available. Programs are listed in seven groups:Work and Work Skills, Financial, Housing, Legal Assistance, Health Expenses, Families with Children, and People with Disabilities. For each program, you will find an outline of what it does and where to go for information.This guide is up-to-date as of March 2005.
Related legal topic(s): Health issues, Loss of employment, Supportive living and seniors' housing


text:
Find A Pediatric Dentist
AAPD Main Site
AAPD Foundation
About AAPD
FAQ for Parents
Parent Education Brochures
Resources for Adolescents
Quick Tips for Busy Parents
Parent Fact Sheet on Caries Bacteria
Use Only Water in Sippy Cups
The Surprising Truth About Cavities
Baby Teeth Basics
Yellow Teeth and Whitening Products
Oral Health Campaigns
Get it Done in Year One Checklist
Dental Home Resource Center
Tooth Decay in Children
CDC Report on Tooth Decay
Statistics on Recent Increases in Children's Tooth
The Rise of Cavities
Ways to Prevent Risk for Children's Tooth Decay
2min2x
Dental Coverage for Children Under ACA
Oral Health Policies &
Meet the Mouth Monsters
Ginger Bite-Us
Tartar the Terrible
Tooth D. K.
Fact Sheet on Caries Bacteria (en Español)
Join the AAPD
> Home>Privacy Statement
The American Academy of Pediatric Dentistry (AAPD) respects the privacy of our members and other users of our website.[1]This Privacy Policy addresses our use of information about you collected by virtue of your use of the website. The latest version of our Privacy Policy will always be available on the website. We welcome your comments or questions about our Privacy Policy and privacy practices. If you feel that this site is not following its stated policy, please let us know. You may contact us about this Privacy Policy:
By mail: American Academy of Pediatric Dentistry
211 E. Chicago Ave., Suite 1600
By e-mail: oed@aapd.org
Although we are committed to insuring your privacy, we may be required to disclose personal information when required by law and necessary to comply with a court order or legal process.
Information We May Collect About You
The information AAPD collects via our website is used to improve the content and advance the AAPD's mission. We collect: domain name and internet protocol (IP) address of visitors to our website; aggregate information on what pages users access or visit; user-specific information on what pages users access or visit; and information volunteered by users, including from surveys, purchases and/or registrations. We also may collect the e-mail addresses of those who communicate with us via e-mail.
The AAPD uses cookies for a number of purposes, including administering the website and recording session information, such as items that users add to their shopping cart and user-specific information on what pages were accessed or visited.
To gain access to members-only resources and personalization features on the website, members are asked to provide a unique user ID and password. AAPD's web server tracks the domain names and IP addresses (not the individual e-mail addresses) of members entering the members-only area, but only for purposes of measuring the general number of visits, pages visited, average time spent on the site, etc.
How We May Use Information We Collect
The AAPD and its affiliates may use your contact information to alert you to new information, products and services, events, and other opportunities. From time to time, we may also make your contact information available to other reputable organizations whose products or services we think you might find interesting.
The AAPD uses information voluntarily submitted by AAPD members and others to provide members with personalized service tailored to your needs and to enable us to continually improve the convenience and functionality of this site. For example, we maintain a directory of pediatric dentists that may include information that an AAPD member submitted via our website.
The AAPD has instituted stringent reviews and opt-out capabilities to ensure that you do not receive unwanted e-mail from the AAPD.
The AAPD uses industry-standard encryption technologies when transferring and receiving consumer data exchanged with our site. We have appropriate security measures in place in our physical facilities to protect against the loss, misuse or alteration of information that we have collected from you at our site. When users choose to make payments via credit cards, we submit the information needed to obtain payment to the appropriate clearinghouses. We do not store or reuse this credit card information.
To help us protect your privacy, please contact us as indicated above if you believe your information is being used for purposes other than those for which it was originally collected.
If you do not want to receive e-mail, postal mail, telephone calls or faxes from us in the future, or if you do not want us to share your contact information in the manner described above, please provide us with your exact name, e-mail and postal addresses, phone and fax numbers and, if appropriate, AAPD membership number. We will no longer use information you so identify and will do our best to be sure any other specific contact information is removed from any list we share with other organizations.
On request we provide site visitors with access to all information that we may maintain about them, including financial information, unique identifier information, transaction information, communications that the visitor has directed to our site, and contact information. On request we also offer visitors the ability to have inaccuracies corrected in contact information, financial information, unique identifiers, transaction information, and communications that the visitor has directed to the site.
If you are under 18 years of age, you may not purchase products or services from, and you should not provide information to, the AAPD website without the involvement of a parent or guardian. We do not collect online contact information without prior parental consent or parental notification, including an opportunity for the parent to prevent use of the information and participation in the activity. Without prior parental consent, online information will be used only to respond directly to the child's request and will not be used for other purposes. We do not entice, by the prospect of a special game, prize or other activity, the disclosure of more information than is needed to participate in the activity.
[1] The term "website" refers to http://www.aapd.org, http://www.mychildrensteeth.org, http://www.pediatricdentistrytoday.org/,and any other AAPD website.
Copyright © 2012-2020 AAPD mychildrensteeth.org All Rights Reserved.


Devon & Cornwall Notes and Queries vol. VII, (1912-1913), Exeter: James G. Commin. 1913, pp. 75-77.
Neither the Note's author, nor the journal's editors provide an explanation for the inclusion of this ancient (undated) legal document that relates to religious matters in old Plymouth. (The Court of Augmentation was created in the time of Henry VIII., with jurisdiction over the property and revenue of certain religious foundations.) It is likely that the Edward North to whom the document is addressed was Baron North (c. 1496–1564) the peer and politician. He was Clerk of the Parliaments and a successful lawyer who was created a Baron, giving him a seat in the House of Lords. The article, from a copy of a rare and much sought-after journal can be downloaded from the Internet Archive. Google has sponsored the digitisation of books from several libraries. These books, on which copyright has expired, are available for free educational and research use, both as individual books and as full collections to aid researchers.
Note 49. PLYMOUTH. — To Edward North (Court of Augmentation Bundle 31/54). Moste humblie complayning sheweth unto yor right Worshipfull Mastership yor Dayley and poore Orators the Maior of the toun of Plymmouth in the Countie of Devon and also all the rest of the inhabituntes wh in ye parish of Plymmouth That where ye said parish is a great parish wyth in ye whych there are to ye nombre of xxvc Houseling people at ye lest some of them dwelling greatlie distant from thothers and diverse of them dwelling the distance of iii myles from the said parish; Church wch is situat wth in ye said toune in which said parish there hath ben ever Heretofore by all the tyme of ye remembrance of man besides the Vicar of the said parish Church or His Curat ii Chaunterie prestes continuallie residente and abiding within ye said toune and parish wch had Competent Lyvinges of there ii Chaunteries founded in the said toune of wch said iii prestes the Vicar or his Curat or Deputie for the space of these vij yeres now past by thordre and appointment of the Maire & other of the discretest of the said toune and parish hath ben chardged to ye administration and preachyng of the Worde of God to ye parishioners of the said parish which he doth iiij tymes in the Weke contenuallie that is to saie Sondaie Mondaie Wednesdaie and fradaye And because the said Curat might attend his said Charge and gyve his hole diligence therunto the said Maire and other of ye discretest of the said parish Have appointed thother ij prestes tattend to ye ministrations of the Sacramentes and Sacramentalles at all tymes necessarie which chardge is divided between the said ij Chaunterie prestes that is to saie thone of ye said two Chaunterie prestes is appointed to ye Baptisme and cristening of children and purifications and thother to ye Visitation of the Sicke and buriall of the dead wch said iij in their particular chardges committed unto theim as is aforesaid are greatlie busied contenuallie so that ye ij prestes attendent to ye ministrations of the Sacramentes and Sacramentalles as is aforesaid at some times can in no wise suffice to ye dispatch of their chardge and busynes without some other Helpe at wch said tymes the said toune and parish being so Hudge and Large in nombre and distance are constrayned to procure of their own chardges other prestes to Helpe the said ij prestes as necessate at many tymes requireth And one Payne Vicar of the said parish hath of Late at Let his Vicarage to Ferme to one Anthonie Marler of London Gentleman for the terme of lx yeres Who Hath the same Leasse also ratified & confirmed by the Kinges Majestie that Last died patron of the said Vicarage and also by thordinarie [sic] the Bisshop of Exeter ordinarie of the same place by reason whereof the leasse must nedes Have His continuaunce to thende of the said terme by thordre of the Lawes And wch said Vicar hath not sithens his said demise ben commorant or resident w th in the said parish neither entendeth to come there hereafter neither is it certairnlie Knowen where ye said Vicar is become by reason wherof the parishioners of the said parish are not like to have anything of the Dutie of the said Vicar concerning the dischardge of his cure there by him supplied So it is and it maie please yor said good Mastership yt by vertue of ye late Acte of Parliament the said ij Chaunteries be now in the Kinges Majesties Handes and His Highnes is in actuall and reall possession of the said Chaunteries and of the Lands and tentes belonging to ye same So y l now to serve the said parish and to doe all ye busynes & chardges afforesaid there is but only the curat of ye Vicar who is not nor by any possiblite can be able to serve the said cure neither to doe thone Half of the busynes that belongth to ye Same In consideration wherof and for so moch as it appeareth by the said Acte wherbie Chaunteries are gyven to ye Kinges Highnes yn tounes and great parishes shulde be provided for that there might be a nombre of prestes and lyvinges established for to serve and discharge ye cure . . . (illegible) Maie it please yor good Mastership the premisses tenderly considered to take soch-ordre that there be ij prestes resident and abiding in ye said toune forever over and besides the Curat And that Lands apperteyning to the said ij Chaunteries or some other maie be appointed . . . (illegible) And yor said orators shall dulie praie &c &c E. H. Fairbrother.