When we went to Quincy I told you we visited 13 lakes. I was questioned about that.
So here they are: Bucks Lake, Lower Bucks Lake, Snake Lake, Gold Lake, Goose Lake, Salmon Lake, Sardine Lake, Packer Lake, Long Lake, Silver Lake, Cub Lake, Little Bear Lake and Big Bear Lake. I had to look at a map to remember them all. The last five were on a hike we took.
I did not take pictures at each lake, and those I did take pictures of I can't remember now which lake the picture is of. I do remember that they were all beautiful… some more than others.
This is a prime area for hiking, kayaking and fishing. We already have plans to go back and visit another thirteen lakes!
I LOVE IT!! That Burch stubborn blood cracks me up.


I recently performed an angle of attack (alpha) sweep for the NACA 4415 airfoil using a panel method. I compared my calculations with the wind tunnel experiment performed at the Ohio State University Aeronautical and Astronautical Research Laboratory 7x10 Subsonic Wind Tunnel. For the Reynolds Number=2x10^6 case, I found I could achieve excellent agreement with the uncorrected experimental data in the linear lift region if I reduced the experimental alpha by 0.7 degrees.
Has anyone else experience with this case?
I really don't know what it is you are hoping to do, but if you are looking for a well-tested airfoil, I might suggest our S809 airfoil. It has been tested in several wind tunnels and it was also used on a 10m turbine and the entire system was tested in the gigantic wind tunnel at NASA's Ames Research Center. We also offer polar predictions using the Eppler code that you can compare to.
I am doing Research in the Field of Wind energy, I need the information about the type of airfoils, which are suitable for Indian origin for Wind turbines, according to India's Geographic location and environmental conditions and which profile is mostly used in India(Asia) for Wind turbine Blade fabrications. There are few companies in India like Suzlon Energy etc which are doing business in this field and commissioning wind turbines in India but they do not responding me well for my Research work. I want to find out i) A suitable turbulence model in CFD(Fluent) for Wind Turbine airfoil used in India, For the validation of CFD software results for validating Suitable Turbulence model, I need Experimental results by some of the Research Laboratory like NWTC ii) Study of airfoil characteristics at different angles of attack keeping wind velocity constant iii) variation of Lift and drag with velocity changes using CFD software. So I need the information about the airfoil used in India for Wind turbines.
I understand your frustration of trying to get detailed design information from manufacturers. I've had trouble even when they were working for us and we had signed non-disclosure agreements with them.
I have no idea what types of airfoils are used in India. The airfoils manufacturers use are more dependent on the size of the rotor, need for thick or thin airfoils, and whether it is a stall-regulated turbine or one that uses active controls. You can see which of our airfoils are suitable for different situations in this table: http://wind.nrel.gov/airfoils/AirfoilFamilies.html. I suppose some manufacturers might choose different airfoils for different sites based upon wind speed and turbulence intensity, but I have no personal knowledge of that. I doubt that there are any India-specific airfoils.
As I mentioned earlier, the S809 airfoil is probably one of the most-tested wind-turbine airfoils in the world. It was designed for a small (<100kW), stall-regulated turbine. If you need something for a large, utility-scale turbine, I'm afraid I don't have anything for you.
I cannot help you with choosing a turbulence model for your CFD simulations.


Q: How should I introduce my two dogs to our new baby?
There is a lot written about introducing dogs to a new baby—most of it is fanciful, superfluous, and a waste of time. Dogs don't struggle with new smells, they don't need to go through complicated rituals to accept a new member into the family, and the worry people have about the transition can create anxiety for the dog!
So the first thing to do is relax.
The next thing to do is look at actual behaviors (what a dog does, not what we like to think dogs do "in the wild" that might suddenly appear out of nowhere).
The worry people have about the transition can create anxiety for the dog!
We taught our dogs not to jump a baby gate into the main living area. And that was about all we needed to train. They already knew how to drop things, to "leave it," and to wait quietly on mats or in crates.
... all of which will happen, if that's what you are looking for, but that's probably not what you really want.
You really just want your dog to chill out if your baby cries, tro leave your baby and baby's toys alone, and to stay out from under your feet when you're carrying baby. Apart from that, it's life as normal as far as your dog is concerned.
If you know for a fact that your dog gets horribly agitated when he hears a baby cry, then consider using a recording of a baby crying to teach an alternative behavior ahead of time.
Reinforce the behavior you want, ignore or prevent behavior you don't want.
Submitted by zuzanna on Fri, 2009/01/09 - 12:30am.
I also find it much easier to let dad carry the baby in and give mom a chance to say hello to the dog normally. If not the parents get panicky because the dog jumps on the mom he haven't seen for 2 days while she is holding the baby and everything just starts by anxiety. Most pet owners who are also parents call me in distress when the baby starts moving around and the dog growls at it or tries to herd it. There is rarely a problem before that. This problem can be resolved by showing the dog to move away from the baby instead of trying to move baby away and making sure he has a safe spot to rest without baby crawling over him all the time.
Submitted by mearthone on Wed, 2008/02/13 - 2:01am.
I just emailed this article to friends who have a 1 day old baby girl. Perfect timing. They've been wondering how to do this.


The Consolidated Government of Augusta-Richmond County (ARC) commissioned NERA Consulting, Inc. to conduct this study to evaluate whether minority- and women-owned firms in its contracting marketplace have full and fair opportunities to compete for its prime contracts and associated subcontracts. To ensure compliance with constitutional mandates and M/WBE best practices, ARC commissioned NERA to examine the past and current status of M/WBEs in ARC's geographic and product markets for contracting and procurement. The results of NERA's Study (hereinafter the "2009 Study"), provide the evidentiary record necessary to implement renewed M/WBE policies that comply with the requirements of the courts and to assess the extent to which previous efforts have assisted M/WBEs to participate on a fair basis in ARC's contracting and procurement activity.


text:
Drilling Down on Rent Seeking Dentists
https://jeffstier.org/19108/drilling-down-on-rent-seeking-dentists
I was huddled in a Connecticut legislative hearing room on a chilly spring morning three years ago, awaiting my chance to testify about a proposal to over-regulate e-cigarettes.
I'm a big fan of innovation, so I'm always eager to speak out against entrenched interests seeking to stifle progress with regulations designed to kill improvements in our health. Proponents of more regulation regularly use scare tactics, shoddy science and false allegations that people like me are against "all regulation."
The Public Health Committee hearing room in Hartford was packed with people on both sides of the divide, waiting to address a number of different bills under consideration. As a teen, I watched C-SPAN over MTV, so I didn't mind waiting. It was my equivalent of seeing a live concert.
Before e-cigarettes, the committee took testimony on Raised Bill No. 6484, "AN ACT REQUIRING PAPER TOWELS IN PUBLIC RESTROOMS." I don't know much about the issue, but I imagine that companies which supplied paper towels feared the popularity of products like the energy efficient, tree-saving Dyson Airblade Hand Dryer.
If so, this would be a classic example of "rent-seeking," an economic term for the act of exploiting the political process to increase one's profits at the expense of society.
The next act was a bill to certify advanced dental hygiene practitioners.
Given the high cost of dental care, I thought it made sense to create regulations which would allow trained and certified dental practitioners to do some of the simpler work only dentists are now permitted to provide. The model works well in the medical field, where nurse practitioners and physician assistants provide capable care, freeing up doctors to give higher level care.
Sure enough, earnest local dentists rose one by one in opposition to the bill, flouting evidence from successful trials in other states, claiming that anyone who didn't go through dental school would wreak havoc inside the mouths of patients if they were allowed to do anything more than a cleaning. More rent-seeking.
I eventually got to testify on my issue in Connecticut, and moved on. But the dentists left an impression. Every six months or so, when I shell out too much money for a cleaning and sometimes minor dental work, I wonder why dentistry is so expensive. It had to be more than the dentists' monopoly on lower level care.
It turns out, there's an innovative way to provide dental care at a lower cost- through a model called Dental Service Organizations, or DSOs. Unfortunately, however, the entrenched dentists see it as a threat.
Consider the case of Kool Smiles, the largest dental provider for pediatric Medicaid patients with over 100 offices in 15 different states and the District of Columbia.
Medicaid reimbursement rates for dentists are so low that old-school dentists, with their often inefficiently run offices, just can't afford to take on these patients, contributing to the dental health crisis among the poor.
But because Kool Smiles dentists' offices are run externally through a firm called Benevis, a DSO, Kool Smiles dentists are able to focus exclusively on what they are proficient at and trained for, while Benevis takes advantage of the economy of scale, and does what they are proficient at doing: the non-clinical side of dentistry.
The DSO model is a win for patients, especially those who need or want quality dental care at a lower price. It is also a win for dentists who want to practice dentistry, rather than manage billing and collections, negotiate pricing for supplies, and lease office space.
Yet, like with Hartford's hand dryers and dental hygiene practitioners, rent seekers are trying to protect their turf with rules that keep out the competition. There are or have been efforts to block DSOs in the legislatures including in Wisconsin,Washington State, Maryland, and Texas.
And unlike arguments against dental hygiene practitioners, it's hard to make a clinical case against DSOs, because they don't do clinical dentistry.
But that hasn't stopped those who fear competition. After all, when you effectively have a monopoly on what has become an outmoded way of doing business, you do everything you can to protect your high prices. Just ask AirBnB and Uber.
So critics allege that Kool Smiles, which, because of its efficiency, is able to compete in the mostly untapped Medicaid market, is doing unnecessary procedures to increase their profits.
But neither the data nor common sense back it up. According to Art Laffer, of Laffer and Associates, who studied government records in Texas, the accusations "proved to be almost entirely false." Laffer found that in 2011, DSO-affiliated dentists performed an average of 10.5 procedures per Medicaid patient, while dentists at more traditional practices performed an average of 12.4 procedures. That pattern also showed up in Medicaid costs per patient, with Kool Smiles having an average annual cost of $345.45 per Medicaid patient, while DSOs had $483.89 far below the $711.55 for old-school dental practices.
In a more recent study, Dobson/DaVanzo examined the utilization and Medicaid expenditures of Kool Smiles against those of other dental providers from 2011-2015 in seven states: Georgia, Indiana, Louisiana, Mississippi, South Carolina, Texas, and Virginia. It found that Kool Smiles did, on average, 17 percent fewer procedures and had 35 percent lower Medicaid expenditures per patient than other providers.
If anything, one would expect that populations in underserved communities, like those served by Kool Smiles, would have greater dental needs and higher expenses.
This could explain the allegations made by the PBS documentary, Frontline, and The Center for Public Integrity (CPI). CPI alleged that "Kool Smiles does far more crowns than average on children age 8 and under on Medicaid, according to an analysis of 2010 Medicaid data" in Texas and Virginia.
But the suggestions that Kool Smiles does more crowns because they are "more profitable than fillings for dentists, because they can charge more for them" doesn't pass the laugh test, given the sad state of affairs for underserved children for whom dentists who run their own offices have been unable to care for.
Studies of government data by Laffer, Dobson/DaVanzo found that Kool Smiles actually does fewer crowns per patient than do other dental practices. Even DSO critic Frontline eventually conceded this fact.
The DSO model is under attack by old guard dentists because it offers a more efficient way of doing business, which passes some of the savings on to patients and medicaid.
Dentists have a lot to offer to society and earn a good living without rent-seeking protectionism.

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Unable to have a div with sharp corner instead getting it as rounded corner I am trying to have a sharp cut div on the top right but instead using the border-top-right radius
I am getting a rounded corner on the top right.
How can we achieve this using only CSS
Currently how I am getting is
rounded corners
the rounded corners I am getting with the below code
Code sandbox link:- Sandbox

.container {
  width: 150px;
  height: 150px;
  position: relative;
  margin: 30px;
}

.box {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0.7;
  background: #0057e3;
}

.overlay {
  z-index: 9;
  background: red;
  border-top-right-radius: 65px;
}

Instead How I need the div to be is sharp corners
How can I make the div as sharp corners only on the top right?

A: We can use before or after psuedo element to achieve this effect.

HTML

Hello

CSS
.box {
  width: 100%;
  height: 100%;
  position: relative;
  opacity: 0.7;
  background: #0057e3;
  border-radius: 10px;
  overflow: hidden;
}

.box::before {
  content: "";
  position: absolute;
  top: -45px;
  right: -45px;
  width: 200px;
  height: 30px;
  transform: rotate(45deg);
  background: red;
}

A: You can use clip-path instead of a rounded corner.
Here's the HTML/CSS of your code with just that alteration:

html,
body {
  font-family: sans-serif;
  h1 {
    color: tomato;
  }
}

.container {
  width: 150px;
  height: 150px;
  position: relative;
  margin: 30px;
}

.box {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0.7;
  background: #0057e3;
}

.overlay {
  z-index: 9;
  background: red;
  /*border-top-right-radius: 65px;*/
  clip-path: polygon(0 0, 70% 0, 100% 30%, 100% 100%, 0 100%);
}

A: You can't have sharp corners in pure CSS using the border-radius
A workaround is to use -webkit-mask

.overlay {
  -webkit-mask: linear-gradient(to top right, #FFF 85%, #ffffff00 85%) top left;
  background: hotpink;
  position:absolute;
  width:100%;
  height:100%:
}

div {
  width:200px;
  height:200px;
  position: relative;
  background: cyan;
}

  Corner using webkit-mask

Check this for more details

redpajama_set_name: RedPajamaStackExchange


text:
Q: Trying to get javascript variable to display within a sentence in HT Using javascript, I defined a variable as one of three words
http://jsfiddle.net/KDmwn/45/
JavaScript:
$(document).ready(function () {
var things = ['Rock', 'Paper', 'Scissor'];
var thing = things[Math.floor(Math.random()*things.length)];
});

I want the variable "thing" to display within a sentence on my screen  using the following in the HTML portion:
the computer chose

If someone could help me figure out what's going wrong, I would appreciate it

A: You need to set the HTML of the span. In your code you only created a variable, but you also need to use it somewhere in HTML. Since you are using jQuery you can use ID selector and html() method to set the value:
$(document).ready(function () {
    var things = ['Rock', 'Paper', 'Scissor'];
    var thing = things[Math.floor(Math.random()*things.length)];
    $('#thing').html(thing);
});

A: Other than the already suggested
$('#thing').html(thing);

You can also use
$('#thing').append(thing);

or even
$('#thing').text(thing);

I guess it all depends on the bigger picture of your program. I am currently learning jQuery myself. It's really something.
html
append
text


concertVR - Join the revolution and enjoy the best musicians in the world on stage with VR technology.
This coin will change the music industry forever! "Imagine you could enjoy concerts from all over the world in real time without leaving your house!"
The statement: The audience, which participates in concerts and festivals, reaches record heights and should achieve a turnover of more than 1.1 billion USD in Germany alone in 2018.
As the venues are limited, concerts by particularly popular artists are sold out in hours, if not minutes. In addition, access to live concerts is limited by a number of other factors. Concerts are mainly performed in selected major cities and economically healthy countries, leaving fans in rural areas or unpopular countries. The music industry could generate considerable revenue if a larger audience could be reached!
you could enjoy concerts all over the world and afford them without leaving home?
it would be possible to sell an unlimited number of tickets for a live concert?
you could choose your POSITION in the hall during a concert and even be ON STAGE next to your favourite artist?
you could call up INFORMATION about artists and songs in real time?
you could enjoy your live concerts ON DEMAND over and over again?
you could let all your friends on SOCIAL MEDIA know what concert you are watching?
Invite friends directly during the concert and chat with them.
We create a utility token that can be used within our application to purchase content. In addition to our own token, we will also accept a large number of other crypto currencies as means of payment. We firmly believe that only an organically grown product and the largest possible community of satisfied users will ensure the value of our token. In addition, the concertVR token (ticker symbol CVT) will be admitted to trading on the token exchanges.
The pre ICO sells out in less than 4 days.
From 15.10.2018 it's time - Phase 2 starts!
A maximum of 666,000 concertVR tokens are available for purchase every day. The fixed cost of a single concertVR token is 0.00015 ETH per CVT.
The following bonus token regulation will be active from 12.00 German time on 15.10.2018.
+ 10% EXTRA-TOKEN as easybizzi member. You can only get the 10% EXTRA-TOKEN if you sign up for the whitelist via the link of easybizzi and buy the concertVR tokens.


Back down in Mexico. The lovely Ruth and Al picked me up in Arizona yesterday morning for the seven hour drive, made slower by a stretch of rain-damaged road. We arrived just before sundown and found Marie and her mother napping in the car in our driveway.
Uh-oh… This could only mean the inside of the house was chaos. This turned out to be true, but they have made tremendous progress since I've been stateside.
It was wonderful to see Marie and her mother after two weeks!
Marie rented a house in the "electric" section for the next week, so we are now in the lap of luxury, relatively speaking, with the exception of no Internet (a constant problem down here). But I should note for those schools I'm Skyping with this week that I have a solution to the problem. A few miles down the road there's a place with Internet and I'll use their access for the visit.
I'm thumbing this in on my iPhone.
I will make another (bigger) post later this week (when I find some Internet) with the photos and videos currently stuck in my digital camera. Uploading them now on the AT&T international network for the iPhone would cost more than the rent on this house.
Below is the view from the back patio where I'm writing and the tiled fireplace in the house that I really like.


text:
Purpose of seed Certification
The purpose of seed Certification is to maintain and make available to the public, through Certification, high quality seeds of notified kind and varieties so grown and distributed as to ensure genetic identity and genetic purity. Seed certification is also designed to achieve prescribed Standards.
Certification Agency
Certification shall be conducted by the certification Agency notified under section 8 of the seed Act, 1966.
Certified seed producer
Certified seed producer means a person/organization that grows or distributes certified seed in accordance with the procedures and standards of the certification.
Eligibility Requirement for Certification of Crop Varieties
Seed of only those Varieties Which are notified under section-5 of the seed Act, 1966 shall be eligible for Certification.
Class of seed/sources of seed
Breeder Stage Seed
Breeder seed is seed or vegetative propagating material directly controlled by originating or sponsoring plant breeder of the breeding programmer or institution and/or seed whose production is personally supervised by a qualified plant breeder and which provided the source for the initial and recurring increase of Foundation seed.
Breeder seed shall be genetically so pure as to guarantee that in the subsequent generation. I.e. certified Foundation seed class shall conform to the prescribed standard of genetic purity. The other quality factors of Breeder seed such as physical purity; inert matter germination etc. shall be indicated on the label on actual basis.
The breeder seed shall be packed and supplied by the breeders in the form and manner indicated as below.
Labeling of Breeder Seed
Breeder seed shall be supplied in sealed containers, duly stitched and sealed. A cloth-lined label of 12 cm * 6 cm containing following information shall be affixed on the container.
Label No.
Crop -
Variety -
Class of Seed Breeder Seed
Lot No. -
Date of Test -
*Pure Seed %
*Inert Matter %
*Germination %
**Oil content %
Producing institution -
(name and address) -
* Based on actual.
** It shall be applicable for sunflower crop only.
The container should also have printed on it the kind, variety and name of institution.
The label shall be rubber stamped with signature, name and designation of the concerned breeder. Color of the label shall be Golden Yellow No. 356 (IS: 5-1978).
Every Breeder/breeding institute shall maintain the account of labels printed and issued.
Certified Seed
Certified seed shall be the seed certified by certification Agency notified under section 8 of the seed Act, 1966, or seed certified by any certification Agency established in any foreign country provided the Certification Agency has need recognized by the central Government through notification the official Gazette. Certified seed shall consist of two classes, namely, Foundation and Certified seed and each class shall conform to the following description.
Foundation Stage Seed
Certified Foundation seed shall be the progeny of breeder seed, or produced from Foundation seed which can be clearly traced to Breeder seed. Thus Foundation seed can even be produced from Foundation seed.
During the production of Foundation seed the following guidelines shall be observed.
*Certified Foundation seed produced directly from breeder seed shall be designated as Foundation seed stage-I.
*Certified Foundation seed produced from Foundation seed state-I shall be designated as Foundation seed stage-II.
*Certified Foundation seed stage-II will not be used for further increase of Foundation seed and shall be only for production of certified seed class.
*Minimum seed certification standard shall be the same for Both Foundation seed stage –I and II unless otherwise prescribed.
*Certification tag shall be of white color for Both Foundation seed stage-I & II and shall contain the information as bellow.
Lenth : 15 CM.
Breadth: 7.5 CM.
It shall be made of durable materials such as thick paper, paper with cloth lining ,wax coated paper , plastic coated paper etc.
Colour : both side shall be white for Foundation class.
TAG NO............ CA'S Certified seed
KIND................. EMBLEM Class of Seed. Certificate No.........
Variety..................... Name and address of Date of issue of certificate
Lot No...................... Certification Agency Date of test.............
"Use of the seed after expiry of the validity period by any person is entirely at his risk and the holder of the certificate shall not be responsible for any damage to the buyer of seed. No one should purchase the seed if seal or the certification tag has been tempered with" - Certificate valid up to .............. (Provided seed is stored under cool and dry environment)Validity of certificate further extended up to.................
Name and full address of the Certified seed producer........ - -
N.B. If tag is to be affixed on a smaller container then the size of tag may be reduced proportionately. However, length and breadth ratio and contents would remain the same.
Visitors: 53388 | Page last updated on: 10/10/2014


text:
Lawmakers Ask FCC to Do Something About SIM Swapping
A group of Senators and Representatives have asked the Federal Communications Commission to require wireless carriers to protect consumers from having their phones hijacked via SIM swapping.
SIM swapping refers to a type of fraud where scammers convince the wireless carrier to transfer mobile accounts from one person to another. Carriers assign phone numbers to cell phones via SIM cards, so if someone convinces the carrier that something happened to the original device, the carrier can assign the phone number to the SIM in the new phone. It's that simple to game the authentication-by-phone-number scheme, and the original owner loses control of the phone number entirely. With full control of the phone number, the fraudster can intercept SMS messages that are sent as a type of two-factor authentication to log into accounts or to reset passwords.
To put into context, many banks rely on SMS messages for two-factor authentication. Attackers can use the messages to fraudulently log into bank accounts and steal money. Criminals are estimated to have stolen tens of millions of dollars by emptying bank accounts or cryptocurrency wallets this way.
"Consumers have no choice but to rely on phone companies to protect them against SIM swaps—and they need to be able to count on the FCC to hold mobile carriers accountable when they fail to secure their systems and thus harm consumers," said the letter to the FCC, which was authored by Sen. Ron Wyden (D-Ore.) and signed by Sens. Sherrod Brown (D-Ohio), and Edward J. Markey (D-Mass), and Reps. Anna G. Eshoo (D-Calif.), Yvette D. Clarke (D-N.Y.), and Ted Lieu (D-Calif.).
In the letter, the lawmakers urged FCC Chairman Ajit Pai to use the agency's regulatory authority over wireless carriers to address the problem. The lawmakers wanted to know if the FCC currently tracks consumer complaints about SIM swapping and number port-outs, which refer to the process of moving a phone number from one carrier to another, and whether the agency has initiated any investigations or actions against carriers for failing to protect consumers from these scams.
In some countries, such as the United Kingdom and Mozambique, carriers provide banks with the most recent date the customer changed the SIM for that phoe number. This way, financial institutions can flag potentially suspicious login attempts associated with fraudulent SIM swaps. The lawmakers asked in the letter to the FCC whether U.S. federal regulations would prevent mobile carriers from setting up this kind of data sharing with financial institutions.
Easy Scams
There are legitimate reasons why carriers allow SIM swapping and porting numbers. Customers may have lost their phones, or switched to a new device that requires a different-sized SIM card, so the original one can no longer be used. Customers may want to switch carriers for better deals or services and not want to give up the phone number they are comfortable with. It's customer service that is also a glaring weakness in the carrier's processes. Thieves can convince employees into thinking the request was legitimate using simple social engineering tricks. In some cases, the scammers may bribe unscrupulous employees at mobile phone stores to switch customer accounts.
The lawmakers also asked what kind of guidance the carriers provide consumers about this problem. Some carriers allow customers to add security protections to their account that prevent SIM swaps or number porting unless the customer physically goes to a store with a valid ID.
"Unfortunately, implementation of these additional security measures by wireless carriers in the U.S. is still spotty and consumers are not likely to find out about the availability of these obscure, optional security features until it is too late," the lawmakers' letter to the FCC said.
Ongoing Problem
The Federal Trade Commission previously issued a warning about SIM swapping back in October. According to FTC data, there were 215 reported SIM swap incidents in 2016, and at least 728 in 2019. However, the lawmakers noted in the letter that not everyone files a complaint (or knows how to) so the reported number of complaints should be viewed as just a fraction of the actual number of incidents.
Twitter CEO Jack Dorsey lost control of his phone number for about 15 minutes, during which the scammers posted vulgar messages online purporting to be him.
Back in 2018, blockchain investor Michael Terpin claimed a SIM swapping scam caused him to lose $24 million worth of cryptocurrency. Terpin eventually filed a $224 million lawsuit (dismissed by the judge) against wireless carrier AT&T for not doing a better job protecting accounts from fraudulent SIM swapping. There have been a handful of similar lawsuits against carriers over the years.
In October, Terpin wrote an open letter to Pai asking the FCC to to force U.S. mobile carriers to hide customer PINs and passwords from employees and to notify customers ways to secure their accounts.
Silent FCC
This isn't the first time the FCC has been asked to do something about cellphone fraud, and SIM swapping specifically. In an August letter to Pai written by Sen. Amy Klobuchar (D-Minn.), and signed by Sens. Tina Smith (D-Minn.), Ed Markey (D-Mass.), Richard Blumenthal (D-Conn.), John Tester (D-Mont.), Maggie Hassan (D-N.H.), Angus King (I-Maine), Ron Wyden (D-Ore.), and Tammy Duckworth (D-Ill.), the lawmakers noted that the "FCC offers virtually no information to consumers about how to prevent this type of fraud or information about how to seek recourse if they are targeted."
In this latest letter, Wyden pointed out the national security implications of SIM swapping, as someone who gained control of email or other accounts belonging to a "local public safety official" after hijacking the phone number could potentially "issue emergency alerts using the federal alert and warning system operated by the Federal Emergency Management Agency."
Wyden requested a response from the FCC by Feb. 14.
"We urge the FCC to initiate a rulemaking to protect consumers from SIM swaps, port outs and other similar methods of account fraud," the letter said.
Government Mobile Security


A big thank you to all of you who read or listened to "Station Eleven" by Emily St. John Mandel and joined us for one of this year's outstanding One Read events. Over the past month we have explored the importance of art and community to survival. We have rediscovered Shakespeare. We have contemplated the end of the world and what comes after. As a community we have investigated the themes and topics in this book through discussions, lectures, films and art. We appreciate the hundreds of you who attended events and promoted this book to your book clubs, your coworkers and your families.
Our sincere thanks to you for being a part of this year's One Read!
Have an idea for what one book our community should read next? Visit this site or any library branch in November to suggest a book for next year.
For this year's One Read art exhibit, we asked area artists to contribute works that explore the objects or relationships in our connected, complex and electrified world that we'd yearn for most if they were lost to us.
At the exhibit's opening reception on September 15, the following winners and honorable mentions were announced. Congratulations to all!


Creator North Carolina. Transportation Planning Branch.
Description "October 2005."; Includes bibliographical references (p. 77-78, 133).
Physical Characteristics 2, iv, 136 p. : ill. (some col.), col. maps (some folded) ; 28 cm.
Digital Characteristics-A 37 MB; 148 p.


Put-in-Bay Historical Weekend- Join us as we celebrate Put-in-Bay History and the 204th anniversary of the Battle of Lake Erie and Commodore Oliver Hazard Perry's naval victory over the British. The Historical Weekend is a family-oriented event features art in the park on Saturday where well known regional craftspeople display and sell their wood and paper, fabric, stained glass, pottery and photography creations in an open-air market. Military reenactments are performed at Perry's Victory and Peace Memorial and over 1,500 Boy Scouts camp at the base of the Monument and participate in the years largest parade on Saturday afternoon. Local dignitaries are joined by numerous regional high school bands and over 100 classic and rare automobiles appearing in the Grand Parade. The Put-in-Bay Resort & the Put-in-Bay Villas are located close to the activities.
Boy Scouts arrive in numbers exceeding 1200 for their annual camporee at Perry's Peace Memorial and assist with National Park Service activities during their stay.
11:00 am to 5:00 pm Perry's Monument will host the War of 1812 Military Historic Encampment featuring live musical performance, military reenactments, and demonstrations of Black Powder firing.
11:00 am: Perry's Monument will hold a Memorial Serve to honor the men who fought and died during the naval battle.
2:15 pm: Downtown Put-in-Bay Will Host the Grand Parade with antique cars, scouts, and numerous marching bands.
5:00 pm: Perry's Monument will host live musical performances. Dusk: The Lights of Peace Harbor Illumination – Friends and Loved ones are honored and remembered in this beautiful light ceremony.
11:00 am to 4:00 pm: Perry's Monument will host a War of 1812 Military encampment with live musical performances and demonstrations of Black Powder Musket Firing.


Some difficulty connecting even though I have a Sonos play 5 already and dont like how you can only purchase premium and not free music on the sonos system ie Spotify.
Can't fault the sound, what I didn't realise is there is no other way to input sound other than via network cable or wifi network. There should at least be a line in.
Staff were very helpful. I came in looking for a simple wireless speaker for a Christmas present and found staff very well informed on the various options. I later bought a large screen tv based on a great offer (50% discount) and trust in advice.
Phoned back to confirm the order, so that was good. phoned again to see when I going to collect.


text:
package org.wso2.carbon.apimgt.core.configuration.models;

import org.wso2.carbon.config.annotation.Configuration;
import org.wso2.carbon.config.annotation.Element;

import java.util.ArrayList;
import java.util.List;

/**
 * Class to hold File Encryption configuration parameters
 */
@Configuration(description = "File Encryption Configurations")
public class FileEncryptionConfigurations {

    @Element(description = "enable file encryption")
    private boolean enabled = false;
    @Element(description = "files to encrypt")
    private List<String> filesToEncrypt = new ArrayList<>();

    public FileEncryptionConfigurations() {
        this.filesToEncrypt.add("NameOfAFile");
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public List<String> getFilesToEncrypt() {
        return filesToEncrypt;
    }

    public void setFilesToEncrypt(List<String> filesToEncrypt) {
        this.filesToEncrypt = filesToEncrypt;
    }
}

redpajama_set_name: RedPajamaGithub


Cover corn with water; let stand 30 minutes. Drain. Remove husks from corn; discard husks. Scrub silks from corn; set corn aside.
Place corn on grill rack; cook 25 minutes or until corn is lightly browned, turning every 5 minutes. Cool. Cut kernels from ears of corn to measure 2 cups. Set kernels aside; discard cobs.
Cut bell peppers in half lengthwise; flatten with hand. Discard seeds and membranes. Place bell pepper halves, skin sides down, on grill rack. Cook 20 minutes or until blackened. Place in a zip-top plastic bag; seal. Let stand 15 minutes. Peel and finely chop to measure 3/4 cup.
Combine corn, bell peppers, and remaining ingredients in a medium bowl. Cover and chill.
I didn't think this was worth the trouble. I would have made it raw without all the roasting. it was nothing great.
Great side dish. I used balsamic vinegar instead of lemon juice. Served with pulled pork sandwiches and cabbage apple slaw.
This is amazing! I added red onion to this recipe to add even more flavor.


This statement was originally published on africafex.org on 20th/Semptember/2016.
In a recent example, five Tanzanian internet users were on September 14, 2016 arraigned before a Tanzanian Court on charges of insulting President John Magufuli on social media.
The five persons are Dennis Temu, Suleiman Nassoro, ShakiraMakame, Juma Mtatuu and Dennis Mtegwa. They appeared before different magistrates where they have denied the charges leveled against them.
The prosecution also alleged that the other four, namely Mr Temu, Mr Nassoro, Ms Shakira and Mr Mtatuu shared a post through Facebook and WhatsApp that was intended to turn the public against the police.
The paper reported that the five were released on bail of 500,000 Tanzanian Shillings (about $230) each after defence lawyer Tundu Lissu objected to a request by the prosecution that they be remanded in custody pending completion of investigations. The cases have been adjourned to September 27, 2016, the paper added.
In a similar development, a Court in Arusha, also in Tanzania, in June 2016 sentenced a Tanzanian internet user to three years imprisonment or a fine of seven million Tanzanian Shillings (USD 3,200) for insulting the President on Facebook.
Amidst protests by civil society actors, Tanzania's government enacted the Cybercrimes Act in April 2015. The law penalizes a wide range of cyber activities.
Mr. Edetaen Ojo, Chairperson of the AFEX Steering Committee, said: There can be no justification for these actions by the Government of Tanzania to suppress legitimate comments and criticisms by its citizens in the exercise of their human and democratic rights. The Government's actions constitute a blatant violation of its obligations under regional and international human rights laws, especially having regard to the December 5, 2014 decision of the African Court on Human and Peoples' Rights delivered in a landmark judgment in Lohé Issa Konaté v. The Republic of Burkina Faso.


text:
<?php

namespace User\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class AuthController extends AbstractActionController
{
    public function loginAction() {
        if ($this->request->isPost()) {
            $auth = $this->getServiceLocator()->get('Zend\Authentication\AuthenticationService');

            // logowaniu w oparciu o dane z bazy
            $authAdapter = new \Zend\Authentication\Adapter\DbTable\CallbackCheckAdapter(
                // obiekt do łączenia się z bazą
                $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter'),
                // nazwa tabeli, pola z loginem, pola z hasłem
                'auth',
                'login',
                'password',
                // funkcja sprawdzająca: pierwszy argument to hasło zapisane w bazie,
                // drugi to hasło z formularza; można tu kombinować z solami itd.
                function($dbCredential, $requestCredential) {
                    $bcrypt = new \Zend\Crypt\Password\Bcrypt();
                    return $bcrypt->verify($requestCredential, $dbCredential);
                }
            );
            $authAdapter->setIdentity($this->params()->fromPost('username'));
            $authAdapter->setCredential($this->params()->fromPost('password'));

            $result = $auth->authenticate($authAdapter);

            if ($result->isValid()) {
                $profile = new \User\Model\AuthProfile();
                $profile->setData($authAdapter->getResultRowObject());

                $auth->getStorage()->write($profile);

                $this->flashMessenger()->addSuccessMessage('Zostałeś poprawnie zalogowany do systemu');
                $this->redirect()->toRoute('user/list');
            } else {
                $this->flashMessenger()->addErrorMessage('Niepoprawne dane');
                $this->redirect()->toRoute('auth/login');
            }
        }

        return new ViewModel([
            'action' => $this->url()->fromRoute('auth/login')
        ]);
    }

    public function logoutAction() {
        $authStorage = new \Zend\Authentication\Storage\Session('auth');
        $auth = new \Zend\Authentication\AuthenticationService($authStorage);
        $auth->clearIdentity();

        $this->redirect()->toRoute('home');
        $this->flashMessenger()->addSuccessMessage('Poprawnie wylogowałeś się z systemu');

        // na razie używamy httpAuth - więc bez widoku
        return false;
    }
}


text:
Station Amersfoort Centraal is het belangrijkste spoorwegstation in Amersfoort en een belangrijk knooppunt in het spoorvervoer tussen de Randstad en Noord- en Oost-Nederland.

Geschiedenis
Het eerste station (Amersfoort NCS) werd geopend op 20 augustus 1863. Het lag aan de toen geopende Centraalspoorweg (Utrecht – Amersfoort – Zwolle) van de Nederlandsche Centraal-Spoorweg-Maatschappij (NCS). Het lag ten oosten van het huidige station,

Op 10 juni 1874 kwam de verbinding naar Hilversum – Amsterdam (Gooilijn) in gebruik, op 15 mei 1876 werd deze verlengd naar Apeldoorn – Zutphen. Dit was de Oosterspoorweg van de Hollandsche IJzeren Spoorweg-Maatschappij (HSM).

Op 18 februari 1886 werd ook de spoorlijn Kesteren - Amersfoort geopend, waardoor er een nieuwe HSM-verbinding Amsterdam – Amersfoort – Nijmegen mogelijk werd. Omdat deze lijn komende vanuit Amsterdam al vóór de stad aftakt, was het noodzakelijk aan deze lijn een tweede station Amersfoort Staat te openen. Om toch een overstap te kunnen bieden tussen de beide lijnen van de HSM werd in 1889 een extra station Amersfoort Aansluiting geopend.

Om een einde te maken aan deze onpraktische situatie van drie stations op korte afstand, werd in 1901 op de huidige locatie een nieuw stationsgebouw van de HSM, naar een ontwerp van Dirk Margadant, in gebruik genomen. Ook de treinen van de NCS gingen hiervan gebruikmaken. Nadeel van het nieuwe station was wel dat dit verder van het centrum kwam te liggen. Door het hoogteverschil tussen het stationsplein en de sporen, kon er een brug over de perrons gebouwd worden, die gelijkvloers aansloot op de stationshal. Het oude NCS-station bleef behouden als dienstgebouw en bestaat nu nog steeds.

In de nabijheid van het nieuwe station werd in 1904 de wagenwerkplaats van de HSM geopend. Deze is tot 2000 in bedrijf geweest. In 1914 werd de tramlijn Zeist – Arnhem verlengd tot Amersfoort.

Naast de hoofdtraverse is er een tweede traverse aan de westelijke zijde. Deze traverse ligt vlak bij het westelijke uiteinde van de stationsbebouwing bij een fietsenstalling en een parkeerterrein en staat in verbinding met alle perrons. Maar in tegenstelling tot de hoofdtraverse loopt deze traverse niet door naar het Soesterkwartier ten noorden van het spoor.

Het station had vroeger zaksporen op het eerste en tweede perron waarbij het zakspoor op het tweede perron gebruikt werd voor stoptreinen naar Hilversum en Amsterdam. Door de opening van het derde perron en door de opening van de stations Schothorst en Vathorst in de noordoostelijke uitbreidingswijken van Amersfoort zijn de zaksporen niet meer noodzakelijk. Want door het nieuwe derde perron kwam het tweede perron vrij voor kerende treinen en op de genoemde stations zijn keersporen gebouwd. De zaksporen op station Amersfoort zijn dan ook weggehaald zodat ze geen barrière meer vormden voor de overstappende reizigers op de perrons.

Station sinds 1997
Het uit 1901 daterende stationsgebouw werd in 1997 door nieuwbouw vervangen. De historische bebouwing op het tweede perron bleef gehandhaafd. Er kwam een derde eilandperron bij en later een achteringang aan de zijde van het Soesterkwartier dat door het verdwijnen van een deel van het sporenemplacement op deze plek herontwikkeld kon worden. Omdat de treinen naar de Randstad voortaan vanaf het derde perron vertrekken, werd het klantenpotentieel voor de stationsrestauratie in de historische bebouwing op het tweede perron kleiner. NS stations is later overigens grotendeels afgestapt van het concept van stationsrestauraties. Sinds deze tijd zijn er op particulier initiatief wel op commerciële basis restaurants geëxploiteerd op dit tweede perron.

Amersfoort is sinds Spoorslag '70 een belangrijk knooppunt voor de intercitytreinen vanuit de Randstad naar de noordelijke provincies en Twente, in vakjargon de 'Noord-Oost' genoemd. Door middel van cross-platform overstappen te Amersfoort zijn er ieder half uur verbindingen tussen Amsterdam, Schiphol, Den Haag en Rotterdam enerzijds en Leeuwarden / Groningen / Enschede anderzijds. Maar met de opening van de Hanzelijn in 2012 zijn de aansluit- en overstaptijden in Amersfoort verruimd ten gunste van Zwolle. Het aantal rechtstreekse treinen is afgenomen, omdat de verbindingen vanuit Den Haag met Leeuwarden en Groningen via (Schiphol en) de Hanzelijn worden aangeboden in plaats van via Amersfoort.

Verder rijden er stoptreinen en sprinters in de richtingen Amsterdam, Utrecht, Zwolle en Ede-Wageningen (Valleilijn).

Bij het station ligt een busstation voor stadsbussen van Syntus Utrecht en streekbussen van Syntus Utrecht, U-OV en EBS.

Met ingang van 15 december 2019 kreeg het station, net als dat van Eindhoven, de aanduiding 'Centraal'.

Het station is afgesloten met OVC-poorten.

Verbindingen
De volgende treinseries halteren in de dienstregeling 2023 te Amersfoort:
De laatste Intercity uit de 1700-serie (richting Den Haag Centraal) rijdt omstreeks middernacht niet verder dan Utrecht Centraal.

Voorzieningen
In de hal was een 'serviceplein' met computers waarop informatie van NS en Connexxion te raadplegen was.

Bij de verbouwing in 1997 is er in en bij de stationshal veel ruimte ingericht voor commerciële ondernemingen. Thans zijn er onder andere de volgende zaken.

Buiten de poortjes:
 Burger King
 Etos
 Starbucks
 Délifrance
 Kiosk
 Albert Heijn to go
 Smullers
 Subway
 Brooodzaak
 Julia's
 Wokrestaurant Het Oosten

Binnen de poortjes:
 AKO
Perron 4/5 volgens Tollius, een restaurant midden op het tweede perron, tussen spoor 4 en 5

Galerij

Spoorwegstation in Utrecht (provincie)
Centraal
Randstadspoor
Bouwwerk van Dirk Margadant

redpajama_set_name: RedPajamaWikipedia


text:
Condominio Insurgentes, también conocido como Insurgentes 300, es un edificio comercial y residencial de 17 pisos, ubicado en Avenida de los Insurgentes 300, Colonia Roma, Ciudad de México.

Abrió en 1958 y fue uno de los primeros condominios altos en México, contando con una banca de elevadores y un helipuerto.

Referencias

Rascacielos de Ciudad de México
Rascacielos de México del siglo XX
Rascacielos inaugurados en 1958
Arquitectura de México de los años 1950
México en 1958

Enlaces externos
 Sitio web oficial


text:
Hoofddorp (pronunciat ˈɦoːvdɔrp, literalment poble principal) és la vila principal del municipi de Haarlemmermeer, a la província d'Holanda Septentrional, als Països Baixos. El 2009 la població era d'uns 73.000 habitants. Aquesta vila fou fundada el 1853, just després que Haarlemmermeer fos drenat.

Història
Després del drenatge de Haarlemmermeer es van crear dues viles, Kruisdorp i Venneperdorp, al centre del pòlder. El 1868 es van canviar de nom a Hoofddorp i Nieuw-Vennep, respectivament. Hoofddorp va convertir-se en una vila més pròspera que Nieuw-Vennep, a més de passar a ser el centre més important del districte.

El 1856 es va construir el primer molí de vent de Haarlemmermeer al centre de Hoofddorp, essent dissenyat per Dirk David van Dijk. Fou conegut com a "De Eersteling" (El primer). A causa de l'increment de l'edificació al voltant del molí, finalment va caure en desús. El 1977 el molí fou traslladat a una altra emplaçament, prop de la fortalesa de Hoofddorp. Des d'aleshores ha estat regularment en funcionament, i actualment es troba obert al públic.

A finals del  Hoofddorp va ser inclòs a la línia de defensa d'Amsterdam. Així, s'hi va construir una fortalesa, que es va situar al costat del canal principal; s'hi van col·locar dues bateries en el que ara són els afores de la vila; i es van construir diverses casamates a l'est del nucli. Un gran dic conegut com el Geniedijk (dic dels enginyers) connecta la fortalesa de Hoofddorp amb les bateries i les casamates, i en última instància amb les fortaleses de Vijfhuizen, a l'oest, i Aalsmeer, a l'est.

El 30 de novembre de 1992 hi va tenir lloc el desastre ferroviari de Hoofddorp, fet que es va saldar amb 5 morts i 33 ferits.

Transport
La vila disposa d'una estació de tren. Des d'allí hi ha 2 trens cada hora cap a l'Estació Den Haag Centraal, 4 trens cada hora cap a l'Estació Amsterdam Zuid, i 2 trens cada hora cap a l'Estació d'Amsterdam Centraal. Aquest darrer viatge dura entre 25 i 30 minuts.

El 3 d'agost de 1912 Hoofddorp fou connectat per ferrocarril amb Leiden, Aalsmeer i Haarlem. Aquestes línies, operades per l'empresa Hollandsche Electrische Spoorwegmaatschappij (HESM), van ser clausurades el 31 de desembre de 1935.

El 1981 Hoofddorp va ser connectat per ferrocarril per segona vegada, aquest cop amb Leiden i l'Aeroport de Schiphol, com a part de la xarxa ferroviària neerlandesa. Per allí hi passa la Línia d'Alta Velocitat del Sud, que va obrir el 2007.

Hoofddorp també està connectat per moltes línies d'autobús, que enllacen amb moltes ciutats i viles dels voltants. La majoria de les línies d'autobús estan operades per l'empresa Connexxion. El 2002, Hoofddorp fou connectat amb Haarlem, l'aeroport de Schiphol i Amsterdam Zuidoost mitjanánt la línia d'alta qualitat Zuidtangent. El 2009 s'hi va obrir una segona línia, que anava de l'estació d'Amsterdam Zuid fins a Nieuw Vennep Getsewoud.

L'estació d'autobús de l'hospital Spaarne, a Hoofddorp, és l'estructura més gran del món construïda únicament amb materials sintètics: escuma de poliestirè tallada a fàbrica amb una capa de polièster. Actualment està pintat amb un color taronja/daurat.

Persones de Hoofddorp
 Fanny Blankers-Koen, 4 vegades medallista d'or als Jocs Olímpics de Londres de 1948.
 C. Joh. Kieviet, escriptor de literatura infantil.
 Tineke Netelenbos, antic ministre de transport i Gestió d'Aigua al segon govern de Wim Kok.
 Swen Huijer, jugador de beisbol professional, jugador dels Boston Red Sox.
 Marly van der Velden, actriu.
 Khalid Bouhlarouz, jugador de la selecció nacional de futbol.
 Fayah Laurens, actriu.

Referències

 Garritsen, A.M. Pyttersen's nederlandse almanak. Bohn Stafleu Van Loghum, 1998.

Enllaços externs

 Parada d'autobús de Hoofddorps
 Imatge de les línies de la Zuidtangent.

Haarlemmermeer


Davao City (31 March) -- In time for the celebration of women's month, women leaders in Davao from various fields of interests gathered and pushed for political participation of women in all levels of governance.
2009 Datu Bago awardee Lyda J. Canson bared during the recent Kapihan sa PIA that it is about time that women should take part in transforming politics by being involved in crafting, legislating, and implementing policies for the public.
It was cited that since 1947, women are considered the majority voters but none or very few surfaced to have sought a political seat. She then advised women leaders to exercise their right for a political position and learn the ropes of the electoral process.
"I just hope that our women will do their share in transforming politics from a politics of family dynasty to a politics of platform," Canson said.
The Datu Bago awardee also urged women voters to act responsibly by choosing the right leaders and making sure that the women sector is well-represented.
It was envisioned to have an equal number of male and female participation in governance by the year 2015.
At the moment, male politicians still dominate the political arena both in the national and local government.
"It's about time that we politicize mothering and nurturing by exercising our skill of governing our country," she added.


XOJET has been saved to your favorites folder .
Launched in 2006 by leading aviation executives, top technologists, and finance experts, XOJET created an entirely new model for private aviation. Backed by world-renowned aviation investor TPG, XOJET commands the largest and newest fleet of Citation Xs and Challenger 300s. We fly all over the world, serving five continents and more than 25,000 airports.
XOJET's operational model is so efficient that the company can offer better service at a better value. With the best on-time performance in the business and pricing that averages 10-25 percent lower than that of our competitors, XOJET are revolutionizing private aviation.


text:
Q: How to bounce an object within circle bounds? I have a basic circle bouncing off the walls of a rectangle canvas (that I adapted from an example).
https://jsfiddle.net/n5stvv52/1/
The code to check for this kind of collision is somewhat crude, like so, but it works:
if (p.x > canvasWidth - p.rad) {
  p.x = canvasWidth - p.rad
  p.velX *= -1
}
if (p.x < p.rad) {
  p.x = p.rad
  p.velX *= -1
}
if (p.y > canvasHeight - p.rad) {
  p.y = canvasHeight - p.rad
  p.velY *= -1
}
if (p.y < p.rad) {
  p.y = p.rad
  p.velY *= -1
}

Where p is the item moving around.
However, the bounds of my canvas now need to be a circle, so I check collision with the following:
const dx = p.x - canvasRadius
const dy = p.y - canvasRadius
const collision = Math.sqrt(dx * dx + dy * dy) >= canvasRadius - p.rad

if (collision) {
  console.log('Out of circle bounds!')
}

When my ball hits the edges of the circle, the if (collision) statement executes as true and I see the log. So I can get it detected, but I'm unable to know how to calculate the direction it should then go after that.
Obviously comparing x to the canvas width isn't what I need because that's the rectangle and a circle is cut at the corners.
Any idea how I can update my if statements to account for this newly detected circle?
I'm absolutely terrible with basic trigonometry it seems, so please bear with me! Thank you.

A: You can use the polar coordinates to normalize the vector:
var theta = Math.atan2(dy, dx)
var R = canvasRadius - p.rad

p.x = canvasRadius + R * Math.cos(theta)
p.y = canvasRadius + R * Math.sin(theta)

p.velX *= -1
p.velY *= -1

https://jsfiddle.net/d3k5pd94/1/
Update: The movement can be more natural if we add randomness to acceleration:
 p.velX *= Math.random() > 0.5 ? 1 : -1
 p.velY *= Math.random() > 0.5 ? 1 : -1

https://jsfiddle.net/1g9h9jvq/

A: So in order to do this you will indeed need some good ol' trig. The basic ingredients you'll need are:

*

*The vector that points from the center of the circle to the collision point.

*The velocity vector of the ball

Then, since things bounce with roughly an "equal and opposite angle", you'll need to find the angle difference between that velocity vector and the radius vector, which you can get by using a dot product.
Then do some trig to get a new vector that is that much off from the radius vector, in the other direction (this is your equal and opposite). Set that to be the new velocity vector, and you're good to go.
I know that's a bit dense, especially if you're rusty with your trig / vector math, so here's the code to get it going. This code could probably be simplified but it demonstrates the essential steps at least:

function canvasApp (selector) {
  const canvas = document.querySelector(selector)
  const context = canvas.getContext('2d')

  const canvasWidth = canvas.width
  const canvasHeight = canvas.height
  const canvasRadius = canvasWidth / 2
  const particleList = {}
  const numParticles = 1
  const initVelMax = 1.5
  const maxVelComp = 2.5
  const randAccel = 0.3
  const fadeColor = 'rgba(255,255,255,0.1)'
  let p

  context.fillStyle = '#050505'
  context.fillRect(0, 0, canvasWidth, canvasHeight)

  createParticles()
  draw()

  function createParticles () {
    const minRGB = 16
    const maxRGB = 255
    const alpha = 1

    for (let i = 0; i < numParticles; i++) {
      const vAngle = Math.random() * 2 * Math.PI
      const vMag = initVelMax * (0.6 + 0.4 * Math.random())
      const r = Math.floor(minRGB + Math.random() * (maxRGB - minRGB))
      const g = Math.floor(minRGB + Math.random() * (maxRGB - minRGB))
      const b = Math.floor(minRGB + Math.random() * (maxRGB - minRGB))
      const color = `rgba(${r},${g},${b},${alpha})`
      const newParticle = {
        x: Math.random() * canvasWidth,
        y: Math.random() * canvasHeight,
        velX: vMag * Math.cos(vAngle),
        velY: vMag * Math.sin(vAngle),
        rad: 15,
        color
      }

      if (i > 0) {
        newParticle.next = particleList.first
      }

      particleList.first = newParticle
    }
  }

  function draw () {
    context.fillStyle = fadeColor
    context.fillRect(0, 0, canvasWidth, canvasHeight)

    p = particleList.first

    // random accleration
    p.velX += (1 - 2 * Math.random()) * randAccel
    p.velY += (1 - 2 * Math.random()) * randAccel

    // don't let velocity get too large
    if (p.velX > maxVelComp) {
      p.velX = maxVelComp
    } else if (p.velX < -maxVelComp) {
      p.velX = -maxVelComp
    }
    if (p.velY > maxVelComp) {
      p.velY = maxVelComp
    } else if (p.velY < -maxVelComp) {
      p.velY = -maxVelComp
    }

    p.x += p.velX
    p.y += p.velY

    // boundary
    const dx = p.x - canvasRadius
    const dy = p.y - canvasRadius
    const collision = Math.sqrt(dx * dx + dy * dy) >= canvasRadius - p.rad

    if (collision) {
      console.log('Out of circle bounds!')
      // Center of circle.
      const center = [Math.floor(canvasWidth/2), Math.floor(canvasHeight/2)];
      // Vector that points from center to collision point (radius vector):
      const radvec = [p.x, p.y].map((c, i) => c - center[i]);
      // Inverse vector, this vector is one that is TANGENT to the circle at the collision point.
      const invvec = [-p.y, p.x];
      // Direction vector, this is the velocity vector of the ball.
      const dirvec = [p.velX, p.velY];

      // This is the angle in radians to the radius vector (center to collision point).
      // Time to rememeber some of your trig.
      const radangle = Math.atan2(radvec[1], radvec[0]);
      // This is the "direction angle", eg, the DIFFERENCE in angle between the radius vector
      // and the velocity vector. This is calculated using the dot product.
      const dirangle = Math.acos((radvec[0]*dirvec[0] + radvec[1]*dirvec[1]) / (Math.hypot(...radvec)*Math.hypot(...dirvec)));

      // This is the reflected angle, an angle that is "equal and opposite" to the velocity vec.
     const refangle = radangle - dirangle;

      // Turn that back into a set of coordinates (again, remember your trig):
      const refvec = [Math.cos(refangle), Math.sin(refangle)].map(x => x*Math.hypot(...dirvec));

      // And invert that, so that it points back to the inside of the circle:
      p.velX = -refvec[0];
      p.velY = -refvec[1];

      // Easy peasy lemon squeezy!
    }

    context.fillStyle = p.color
    context.beginPath()
    context.arc(p.x, p.y, p.rad, 0, 2 * Math.PI, false)
    context.closePath()
    context.fill()

    p = p.next

    window.requestAnimationFrame(draw)
  }
}

canvasApp('#canvas')
<canvas id="canvas" width="500" height="500" style="border: 1px solid red; border-radius: 50%;"></canvas>

DISCLAIMER: Since your initial position is random, this doens't work very well with the ball starts already outside of the circle. So make sure the initial point is within the bounds.

A: You don't need trigonometry at all. All you need is the surface normal, which is the vector from the point of impact to the center. Normalize it (divide both coordinates by the length), and you get the new velocity using

v' = v - 2 * (v • n) * n

Where v • n is the dot product:

v • n = v.x * n.x + v.y * n.y

Translated to your code example, that's
// boundary
const dx = p.x - canvasRadius
const dy = p.y - canvasRadius
const nl = Math.sqrt(dx * dx + dy * dy)
const collision = nl >= canvasRadius - p.rad

if (collision) {
  // the normal at the point of collision is -dx, -dy normalized
  var nx = -dx / nl
  var ny = -dy / nl
  // calculate new velocity: v' = v - 2 * dot(d, v) * n
  const dot = p.velX * nx + p.velY * ny
  p.velX = p.velX - 2 * dot * nx
  p.velY = p.velY - 2 * dot * ny
}

function canvasApp(selector) {
  const canvas = document.querySelector(selector)
  const context = canvas.getContext('2d')

  const canvasWidth = canvas.width
  const canvasHeight = canvas.height
  const canvasRadius = canvasWidth / 2
  const particleList = {}
  const numParticles = 1
  const initVelMax = 1.5
  const maxVelComp = 2.5
  const randAccel = 0.3
  const fadeColor = 'rgba(255,255,255,0.1)'
  let p

  context.fillStyle = '#050505'
  context.fillRect(0, 0, canvasWidth, canvasHeight)

  createParticles()
  draw()

  function createParticles() {
    const minRGB = 16
    const maxRGB = 255
    const alpha = 1

    for (let i = 0; i < numParticles; i++) {
      const vAngle = Math.random() * 2 * Math.PI
      const vMag = initVelMax * (0.6 + 0.4 * Math.random())
      const r = Math.floor(minRGB + Math.random() * (maxRGB - minRGB))
      const g = Math.floor(minRGB + Math.random() * (maxRGB - minRGB))
      const b = Math.floor(minRGB + Math.random() * (maxRGB - minRGB))
      const color = `rgba(${r},${g},${b},${alpha})`
      const newParticle = {
        // start inside circle
        x: canvasWidth / 4 +  Math.random() * canvasWidth / 2,
        y: canvasHeight / 4 +  Math.random() * canvasHeight / 2,
        velX: vMag * Math.cos(vAngle),
        velY: vMag * Math.sin(vAngle),
        rad: 15,
        color
      }

      if (i > 0) {
        newParticle.next = particleList.first
      }

      particleList.first = newParticle
    }
  }

  function draw() {
    context.fillStyle = fadeColor
    context.fillRect(0, 0, canvasWidth, canvasHeight)

    // draw circle bounds
    context.fillStyle = "black"
    context.beginPath()
    context.arc(canvasRadius, canvasRadius, canvasRadius, 0, 2 * Math.PI, false)
    context.closePath()
    context.stroke()

    p = particleList.first

    // random accleration
    p.velX += (1 - 2 * Math.random()) * randAccel
    p.velY += (1 - 2 * Math.random()) * randAccel

    // don't let velocity get too large
    if (p.velX > maxVelComp) {
      p.velX = maxVelComp
    } else if (p.velX < -maxVelComp) {
      p.velX = -maxVelComp
    }
    if (p.velY > maxVelComp) {
      p.velY = maxVelComp
    } else if (p.velY < -maxVelComp) {
      p.velY = -maxVelComp
    }

    p.x += p.velX
    p.y += p.velY

    // boundary
    const dx = p.x - canvasRadius
    const dy = p.y - canvasRadius
    const nl = Math.sqrt(dx * dx + dy * dy)
    const collision = nl >= canvasRadius - p.rad

  if (collision) {
     // the normal at the point of collision is -dx, -dy normalized
      var nx = -dx / nl
      var ny = -dy / nl
      // calculate new velocity: v' = v - 2 * dot(d, v) * n
      const dot = p.velX * nx + p.velY * ny
      p.velX = p.velX - 2 * dot * nx
      p.velY = p.velY - 2 * dot * ny
    }

    context.fillStyle = p.color
    context.beginPath()
    context.arc(p.x, p.y, p.rad, 0, 2 * Math.PI, false)
    context.closePath()
    context.fill()

    p = p.next

    window.requestAnimationFrame(draw)
  }
}

canvasApp('#canvas')
<canvas id="canvas" width="176" height="176"></canvas>


If you have no low budget, you are able to decide on or create your own personal bubble chandelier. The chandelier which made using the simple materials is very simple to produce. Only get ready the right pins, silver cord, white glue, chain-nose pliers, 3 2 glass chunks, 1.5-2 in. washer, and also ceiling hook. Knot 1 end of cord around the bend in trap and then dab it with adhesive in knot to secure. Repeat this. Next, insert and set up each balls into a own hand since you move and also tie and secure it using cloth adhesive. That's all about chandelier. It is my hope that this write-up can direct you to find the suitable of mancini low profile media cabinet.
However, selecting the suitable style of the sink base cupboard will influence the installation step of this. For sink base cupboard using shut the full facet, you ought to make the hole for the pipe and consider the way that it can work so as to steer clear of any injury and unwanted condition in the future and get the best sink base cupboard onto the cabinet.
Using mancini low profile media cabinet in your cabinet is sometimes needed mainly because cabinet isn't merely used to bath. Sometimes you dress and have makeup at the cabinet too. That's precisely why in the event that you do not need something to sit on during your time on your cabinet, most likely you are going to wind up sitting to the restroom. That's why prepare something to sit down like just like a cabinet chair. Cabinet seat is extremely unique and extremely beneficial. It's long shape and beneath the bench, it's possible to even increase storage units like drawers or basket. You can add cushions and cushions in the seat so that sitting down it may be more comfortable.
mancini low profile media cabinet can be obtained on several types, fashions, and decorations. You are able to choose one that can fit your cabinet designs. Selecting shower curtains is easy undertaking. Now you only will need to suit it along with your cabinet appear. Or, you can even fix it together with additional substances on your cabinet.
Aside from that, in addition, there are other hints you may follow to find the optimal/optimally curtain for your own cabinet. Keep reading below! Here is some advice for you.
You need to place anything perfectly out there. As an example, you need to coordinate some positions of one's cabinet stuff. You can include basket, dispense, cabinet, and also other exceptional things for your own cabinet. They will make your cabinet appears as extensive cabinet. Last but not least, those are all some recommended ways of one's mancini low profile media cabinet. Fantastic luck!
This image gallery named as Mancini Low Profile Media Cabinet might be ideal solution for your decoration. As the author has insert this image into Low Media Cabinet post section, would ease you to find the perfect match of you decor desire.


text:
Róg Brzeskiej i Capri – polski film obyczajowy z 1979 roku. Grali w nim wyłącznie aktorzy niezawodowi.

Obsada
 Jan Nowak
 Irena Nowak
 Janina Kondracka – kolekcjonerka laleczek
 Zbigniew Bartosiewicz – Zbyszek
 Januariusz Gościmski senior – hrabia
 Edward Narkiewicz – Edek, szef nielegalnego biura zamiany mieszkań
 Ryszard Fabisiak – krawiec
 Józefa Ciostek
 Krzysztof Kość – akwizytor

Linki zewnętrzne

Polskie filmy obyczajowe
Polskie filmy z 1979 roku
Filmy w reżyserii Krzysztofa Wojciechowskiego


text:
Electing Secret Online Dating Website For Local Hook Up | Online Dating Thoughts
主页/未分类/Electing Secret Online Dating Website For Local Hook Up | Online Dating Thoughts
A hookup culture is one that accepts https://gay-hookup.org/buddygays-review/ and encourages casual sex encounters, including one-night stands and other related activity, without necessarily including emotional intimacy , bonding or a committed relationship 1 It is generally associated with Western late adolescent sexuality and, in particular, United States college culture. While you can definitely have a little bit to drink and still be able to consent, the drunkenness that's become almost synonymous with casual hookups is another thing entirely. This includes demisexual people who may also identify as asexual or graysexual. Having meaningful relationships, having meaningful sexual experiences that are kind – that's something that everyone wants, certainly not just women.
Critical Elements In Gay Sex Sites – An Introduction
Gay Cupid is one of the network's most popular dating services, and for a good reason: it attracts thousands of gay singles looking for serious relationships in every corner of the globe. Scruff is a gay hookup app aimed at gay men of all types – queer, bi, gay, and even trans.
Men on apps can be blunt and, at times, unpleasant. While all detainees faced the prospect of abuse, GBT survivors told Human Rights Watch that they believed that they were subject to violence of increased intensity once their sexual orientation or gender identity was revealed.
For every reason listed as to why gay dating is hard, there are even more reasons why we can claim that finding a partner feels impossible, but the truth is, we just have to keep working on ourselves, stay vulnerable, and allow our hearts to stay open even after we've experienced hurt and pain.
Apoorv, 31, was very excited when someone he met on Grindr, a popular dating app for gay, bisexual and transgender men, asked him out on a date. During a time when many singles are separated from friends and family , dating apps provide another layer of human connection, a sense of normality.
It started in Berlin and has now spread around the world and, while heavy on the hook-ups, also enables users to find friends, dates, or learn more about LGBT issues. There is no stigma at all attached to using dating apps in Brazil so don't feel shy about downloading them and searching for a date.
Selecting Uncomplicated Products For Free Gay Sex Dating Sites
Apart from current health status, HappyMatches , Grindr and other primarily gay dating apps are exploring ways to add the ability for people who test positive for an STD to notify partners using the Gay App. I'm pretty good at reading people and I totally missed it. After a few days I had to send the sorry if I did something, best wishes for life" text.
SCRUFF employs one of the best matching systems to learn your preferences in guys as you use the app, allowing it to continue providing increasingly suitable potential hookups the more you use it. That's perhaps why over 10 million men around the world already rely on SCRUFF as their number one gay men's hookup app.
Compared to straight men, they are more likely to explicitly state that they are DTF," that is, looking for sex or a hookup. Hold on. First, you need to gauge how much he enjoyed it and how likely he is to want to repeat it. Some guys will say polite things, but it might just turn out to be a one-time thing.
In our guide to the best gay dating sites we've covered both gay and lesbian dating apps for those looking for a relationship or just casual fun, so there's something for everyone, regardless of orientation or preferences. Tinder was full of people who I would match with and never speak to. Grindr was full of people I didn't really want to talk to. And real in-person interactions only happened once in a blue moon.
When I have those nights, I feel part of a gay tradition that started in the pre-AIDS sex reverie, survived a plague, and is still alive today. Homophobic reactions often lead to intolerance, bigotry and violence against anyone not acting within socio-cultural norms of heterosexuality.


text:
package EDU.purdue.cs.bloat.context;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import EDU.purdue.cs.bloat.editor.MemberRef;
import EDU.purdue.cs.bloat.editor.Type;
import EDU.purdue.cs.bloat.file.ClassFileLoader;
import EDU.purdue.cs.bloat.inline.CallGraph;
import EDU.purdue.cs.bloat.inline.InlineContext;
import EDU.purdue.cs.bloat.inline.InlineStats;
import EDU.purdue.cs.bloat.reflect.ClassInfoLoader;

/**
 * This abstract class is a central repository for all things that are necessary
 * for a BLOATing sessions. Its subclasses implement certain schemes for
 * managing BLOAT data structures such as editors and control flow graphs.
 */
public abstract class BloatContext implements InlineContext {
	public static boolean DEBUG = Boolean.getBoolean("BloatContext.DEBUG");

	protected InlineStats inlineStats;

	// Ignore stuff for inlining
	protected Set ignorePackages = new HashSet();

	protected Set ignoreClasses = new HashSet();

	protected Set ignoreMethods = new HashSet();

	protected Set ignoreFields = new HashSet();

	protected boolean ignoreSystem = false;

	protected CallGraph callGraph;

	protected Set roots; // Root methods of call graph

	protected static void db(final String s) {
		if (BloatContext.DEBUG) {
			System.out.println(s);
		}
	}

	protected ClassInfoLoader loader;

	/**
	 * Constructor. Each <tt>BloatContext</tt> needs to know about a
	 * <tt>ClassInfoLoader</tt>.
	 */
	public BloatContext(final ClassInfoLoader loader) {
		this.loader = loader;
	}

	private static ClassLoader systemCL;
	static {
		final String s = "";
		BloatContext.systemCL = s.getClass().getClassLoader();
	}

	/**
	 * Returns <tt>true</tt> if the give type is a system class (that is, has
	 * the same class loader as java.lang.String).
	 */
	public static boolean isSystem(final Type type) {
		Class c = null;
		try {
			c = Class.forName(type.className().replace('/', '.'));

		} catch (final ClassNotFoundException ex) {
			System.err.println("** Could not find class " + type.className());
			ex.printStackTrace(System.err);
			System.exit(1);
		}

		// Have to use == because class loader might be null
		return (c.getClassLoader() == BloatContext.systemCL);
	}

	public void setRootMethods(final Set roots) {
		if (this.callGraph != null) {
			// Can't set the call graph roots after its been created
			throw new IllegalStateException("Cannot set roots after "
					+ "call graph has been created");
		}

		this.roots = roots;
	}

	public CallGraph getCallGraph() {
		if (this.callGraph == null) {
			// Create a new CallGraph
			this.callGraph = new CallGraph(this, this.roots);
		}
		return (this.callGraph);
	}

	public InlineStats getInlineStats() {
		if (inlineStats == null) {
			inlineStats = new InlineStats();
		}
		return (inlineStats);
	}

	public void addIgnorePackage(String name) {
		name = name.replace('.', '/');
		ignorePackages.add(name);
	}

	public void addIgnoreClass(final Type type) {
		ignoreClasses.add(type);
	}

	public void addIgnoreMethod(final MemberRef method) {
		ignoreMethods.add(method);
	}

	public void addIgnoreField(final MemberRef field) {
		ignoreFields.add(field);
	}

	public void setIgnoreSystem(final boolean ignore) {
		this.ignoreSystem = ignore;
	}

	public boolean ignoreClass(final Type type) {
		// First, check to see if we explicitly ignore it. If not, check
		// to see if we ignore its package. The ladies always seem to
		// ignore my package.
		if (ignoreClasses.contains(type)) {
			return (true);

		} else if (type.isPrimitive()) {
			addIgnoreClass(type);
			return (true);

		} else {
			if (this.ignoreSystem) {
				if (BloatContext.isSystem(type)) {
					addIgnoreClass(type);
					return (true);
				}
			}

			String packageName = type.className();
			final int lastSlash = packageName.lastIndexOf('/');

			if (lastSlash == -1) {
				return (false);
			}

			packageName = packageName.substring(0, lastSlash);

			// If any ignore package is a prefix of the class's package,
			// then ignore it. This makes our lives easier.
			final Iterator packages = ignorePackages.iterator();
			while (packages.hasNext()) {
				final String s = (String) packages.next();
				if (type.className().startsWith(s)) {
					addIgnoreClass(type);
					return (true);
				}
			}

			return (false);
		}
	}

	public boolean ignoreMethod(final MemberRef method) {
		if (ignoreMethods.contains(method)) {
			return (true);

		} else if (ignoreClass(method.declaringClass())) {
			addIgnoreMethod(method);
			return (true);
		}
		return (false);
	}

	public boolean ignoreField(final MemberRef field) {
		if (ignoreMethods.contains(field)) {
			return (true);

		} else if (ignoreClass(field.declaringClass())) {
			addIgnoreField(field);
			return (true);
		}
		return (false);
	}

	/**
	 * Commits all classes, methods, and fields, that have been modified.
	 */
	public abstract void commitDirty();

	/**
	 * Test the ignore stuff.
	 */
	public static void main(final String[] args) {
		final PrintWriter out = new PrintWriter(System.out, true);
		final PrintWriter err = new PrintWriter(System.err, true);

		final BloatContext context = new CachingBloatContext(
				new ClassFileLoader(), new ArrayList(), false);

		final List types = new ArrayList();

		for (int i = 0; i < args.length; i++) {
			if (args[i].equals("-ip")) {
				if (++i >= args.length) {
					err.println("** Missing package name");
					System.exit(1);
				}

				out.println("Ignoring package " + args[i]);
				context.addIgnorePackage(args[i]);

			} else if (args[i].equals("-ic")) {
				if (++i >= args.length) {
					err.println("** Missing class name");
					System.exit(1);
				}

				out.println("Ignoring class " + args[i]);
				final String type = args[i].replace('.', '/');
				context.addIgnoreClass(Type.getType("L" + type + ";"));

			} else {
				// A type
				final String type = args[i].replace('.', '/');
				types.add(Type.getType("L" + type + ";"));
			}
		}

		out.println("");

		final Iterator iter = types.iterator();
		while (iter.hasNext()) {
			final Type type = (Type) iter.next();
			out.println("Ignore " + type + "? " + context.ignoreClass(type));
		}
	}

}


The majority of these souls are women. I disagree with the insinuation that men are simply tempted and women are responsible for the seduction. Yet, this though can be traced to the Creation story when Eve tempted Adam with the apple. But this does not mask the fact that this is still a form of sexism.Also one of the inhabitants, Francesca also died for love. I was curious so I did some further reading, and it is when I looked it up that I found out that Dante was referring to Francesca da Rimini who married her husband for political reasons. She then began having an affair with her husband's brother. Her husband discovered the affair and murdered them both. Yet, Inferno depicts the soul of Francesca telling Dante that she fell in love with her lover while reading Lancelot. Though such souls are treated with a kind of compassion and not put into the characteristic fiery pits of hell, they are still punished for love by having to whirl about endlessly. Apparently, Francesca is not punished for adultery but for love. I see this because Dante actually feels an extreme amount of pity for her and her lover's souls.


Curaçao, Caribbean culture with European flavors!
Curaçao is one of the islands part of the Royal Dutch Kingdom and is located just in front of the coast of Venezuela and in between Aruba & Bonaire. The island measures 182 square miles and is 38 miles long and a maximum of 7.5 miles wide. The distance to Venezuela is 42 miles. The island has 150.000 inhabitants with 109 different nationalities.
The atmosphere is typical Latin American, Caribbean and alternated with Dutch European influences. This particularly makes the island so special. If you walk through the city center Punda, you can find on one hand a typical Venezuelan floating market and on the other hand beautiful European styled merchant villas dated back from the golden age.
FBTT Travel's objective is to show the guests the different aspects the island Curaçao has to offer. As a result we will show them several of the beauties of the island.
The island is a mix of several cultures, has a history that dates long back and fortunately a lot has been preserved. The nature is spectacular and contains many different aspects. Curaçao is known for its beautiful and exclusive beaches. But also for shop lovers Curaçao has many things to offer. You will find fine art; design products and all the popular brands are represented.
The island has a lot of high quality accommodations available. On Curaçao you will find hotels in different classes but also the bungalow/villa parks are extremely popular. With 2 high quality resorts that have their own great golf courses the island is also a perfect destination for this target group.
On Curaçao you can do a lot of spectacular activities. It is fantastic to sail the Caribbean Sea on a catamaran. You can swim with the dolphins or hand feed the sharks at Curaçao Sea Aquarium. It is a great experience to explore the island on a mountain bike, an ATV or in a "fun bug". The underwater world is stunning, so it is the ideal destination for snorkeling or diving. If you prefer to relax, you could do that on one of the various sailing trips or a large variety of beautiful beaches.
The nightlife on the island is great. You have numerous restaurants offering delicious local and international cuisine. After this you can visit the casinos or dance the night away under the palm trees in one of the clubs located at the beach or in town.
With all this to offer, Curaçao has a lot of potential to grow to a top destination in the Caribbean. Where a lot of Caribbean islands are overdeveloped, Curaçao is still in progress.
FBTT Travel wants to be your key to this island. We want to help you develop your product for this destination and organize and improve the quality of the services offered to your clients.


text:
import pytest
import json
import time
from QuestKace import Client, get_machines_list_command, \
    get_assets_list_command, get_queues_list_command, get_tickets_list_command, \
    parse_response, fetch_incidents, create_body_from_args, shaping_by_fields, convert_specific_keys, \
    delete_ticket_command, demisto, get_fields_by_queue, shaping_fetch

from test_module.RawData import MACHINES_LIST_COMMAND_RESPONSE, \
    ASSETS_LIST_COMMAND_RESPONSE, QUEUES_LIST_COMMAND_RESPONSE, \
    TICKETS_LIST_COMMAND_RESPONSE, LIST_BEFORE_PARSE, FIRST_FETCH_INCIDENTS_RAW_RESPONSE, \
    SECOND_FETCH_INCIDENTS_RAW_RESPONSE, NO_RESULTS_FETCH_INCIDENTS_RAW_RESPONSE, DEMISTO_DT_RESPONSE, FIELDS_RESPONSE

from test_module.ExpectedResult import MACHINES_LIST_COMMAND_EXPECTED, \
    ASSETS_LIST_COMMAND_EXPECTED, QUEUES_LIST_COMMAND_EXPECTED, \
    TICKETS_LIST_COMMAND_EXPECTED, LIST_EXPECTED_AFTER_PARSE, DELETE_COMMAND_RESPONSE, FIELDS_EXPECTED

@pytest.mark.parametrize('command, args, response, expected_result', [
    (get_machines_list_command, {}, MACHINES_LIST_COMMAND_RESPONSE, MACHINES_LIST_COMMAND_EXPECTED),
    (get_assets_list_command, {}, ASSETS_LIST_COMMAND_RESPONSE, ASSETS_LIST_COMMAND_EXPECTED),
    (get_queues_list_command, {}, QUEUES_LIST_COMMAND_RESPONSE, QUEUES_LIST_COMMAND_EXPECTED),
    (get_tickets_list_command,
     {'custom_fields': "hd_ticket all,submitter limited,owner limited, asset limited,machine limited,"
                       "priority limited,category limited, impact limited,status limited, related_tickets limited"},
     TICKETS_LIST_COMMAND_RESPONSE, TICKETS_LIST_COMMAND_EXPECTED)
])
def test_commands(command, args, response, expected_result, mocker):
    """ Unit test
    Given
        - 4 main commands of the integration.
        - command args
        - command raw response
    When
        - mock the Clients's get token function.
    Check if all commands with given arguments run correctly according to expected result.
    """
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    mocker.patch('QuestKace.set_shaping', return_value=[])
    client = Client(url='https://demisto', username='admin', password='admin', verify=True,
                    proxy=True)
    mocker.patch.object(client, '_http_request', return_value=response)
    result = command(client, args)
    assert expected_result == result[1]

@pytest.mark.parametrize('list_before_parse, expected_lst_of_dict', [(LIST_BEFORE_PARSE, LIST_EXPECTED_AFTER_PARSE)])
def test_parse_response(list_before_parse, expected_lst_of_dict):
    """ Unit test
    Check if the parser function of snake case to camel case works corretcly.
    """
    assert parse_response(list_before_parse) == expected_lst_of_dict

def test_first_fetch(mocker):
    """Unit test
        Given
        - fetch incidents command
        - command args
        - command raw response
        When
        - mock the Clients's get token function.
        - mock the Clients's tickets_list_request.
        - mock the parse_date_range function.
        Then
        - run the fetch incidents command using the Client
        Validate The length of the results.
        Validate that the first run of fetch incidents runs correctly.
        """
    mocker.patch('QuestKace.parse_date_range', return_value=("2020-03-11T08:30:41Z", 'never mind'))
    mocker.patch('QuestKace.set_shaping', return_value=[])
    mocker.patch.object(Client, 'tickets_list_request', return_value=FIRST_FETCH_INCIDENTS_RAW_RESPONSE)
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    mocker.patch.object(Client, 'queues_list_request', return_value={'Queues': []})
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    incidents = fetch_incidents(client=client, last_run={}, fetch_time="3 years", fetch_shaping="", fetch_limit="3")
    assert len(incidents) == 3

def test_delete_command(mocker):
    mocker.patch.object(Client, 'delete_ticket_request', return_value={'Result': 'Success'})
    mocker.patch.object(demisto, 'dt', return_value=DEMISTO_DT_RESPONSE)
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    deleted_ticket = delete_ticket_command(client=client, args={'ticket_id': '1'})
    assert deleted_ticket[1] == DELETE_COMMAND_RESPONSE

def test_second_fetch(mocker):
    """Unit test
        Given
        - fetch incidents command
        - command args
        - command raw response
        When
        - mock the Clients's get token function.
        - mock the Clients's tickets_list_request.
        - mock the parse_date_range function.
        Then
        - run the fetch incidents command using the Client
        Validate that the second run of fetch incidents runs correctly from last fetch time.
        Validate The length of the results.
        Validate That the name and occurred exist in the created incidents.
        Validate The id of returned incidents.
        """
    mocker.patch('QuestKace.set_shaping', return_value=[])
    mocker.patch.object(Client, 'tickets_list_request', return_value=SECOND_FETCH_INCIDENTS_RAW_RESPONSE)
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    mocker.patch.object(Client, 'queues_list_request', return_value={'Queues': []})
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    incidents = fetch_incidents(client=client, last_run={'last_fetch': '2020-04-12T02:28:02Z'},
                                fetch_time="1 day", fetch_shaping="", fetch_limit="5")
    assert len(incidents) == 5
    assert incidents[4]['name']
    assert incidents[4]['occurred']
    assert json.loads(incidents[4]['rawJSON'])['id'] == 10

def test_fetch_no_Results(mocker):
    """Unit test
        Given
        - fetch incidents command
        - command args
        - command raw response
        When
        - mock the Clients's get token function.
        - mock the Clients's tickets_list_request.
        - mock the parse_date_range function.
        Then
        - run the fetch incidents command using the Client
        - Check that no incidents are created falsely.
        """
    mocker.patch('QuestKace.parse_date_range', return_value=("2020-03-11 08:30:41", 'never mind'))
    mocker.patch('QuestKace.set_shaping', return_value=[])
    mocker.patch.object(Client, 'tickets_list_request', return_value=NO_RESULTS_FETCH_INCIDENTS_RAW_RESPONSE)
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    mocker.patch.object(Client, 'queues_list_request', return_value={'Queues': []})
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    incidents = fetch_incidents(client=client, last_run={'last_fetch': '2020-04-12T02:28:02Z'},
                                fetch_time="1 day", fetch_shaping="", fetch_limit="5")
    assert incidents == []

def test_create_body_from_args():
    """Unit test
        Given
        - Different fields as arguments to function
        Then
        - run the create_body_from_args command .
        Validate that the function returns a correct string
    """
    body = create_body_from_args(hd_queue_id=1, title="test from unit testing",
                                 category=1, status=2)
    assert body == {'hd_queue_id': 1, 'title': 'test from unit testing',
                    'category': 1,
                    'status': 2}

def test_shaping_by_fields():
    """Unit test
        Given
        - List of string of names of fields
        Then
        - run the shaping_by_fields command .
        Validate the returned string, which should be correct shaping string.
        Validate that when no fields are given then it returns only hd_ticket all string
    """
    fields = shaping_by_fields(['title', 'summary', 'impact', 'status'])
    assert fields == 'hd_ticket all,title limited,summary limited,impact limited,status limited'
    fields = shaping_by_fields([])
    assert fields == 'hd_ticket all'

def test_convert_specific_keys():
    """Unit test
        Given
        - String
        Then
        - run the convert_specific_keys command .
        Validate that for all special keys, the function converts them to correct convention.
    """
    converted = convert_specific_keys('OsName')
    assert converted == 'OSName'
    converted = convert_specific_keys('OsNumber')
    assert converted == 'OSNumber'
    converted = convert_specific_keys('Ram total')
    assert converted == 'RamTotal'
    converted = convert_specific_keys('AssetDataId')
    assert converted == 'AssetDataID'
    converted = convert_specific_keys('AssetClassId')
    assert converted == 'AssetClassID'
    converted = convert_specific_keys('AssetStatusId')
    assert converted == 'AssetStatusID'
    converted = convert_specific_keys('AssetTypeId')
    assert converted == 'AssetTypeID'
    converted = convert_specific_keys('MappedId')
    assert converted == 'MappedID'
    converted = convert_specific_keys('OwnerId')
    assert converted == 'OwnerID'
    converted = convert_specific_keys('HdQueueId')
    assert converted == 'HdQueueID'
    converted = convert_specific_keys('Ip')
    assert converted == 'IP'

def test_get_fields_by_queue(mocker):
    """Unit test
        Given
        - List of queues
        - Client
        When
        - mock the Clients's get token function.
        - mock the Clients's queues_list_request function.
        - mock the Clients's queues_list_fields_request function.
        Then
        - run the get_fields_by_queue command .
        Validate that when 1 queue is given then a list of its fields is returned.
        Validate that when no queue is given then a list of all fields of all available queues are returned.
        """
    mocker.patch.object(Client, 'queues_list_request', return_value=QUEUES_LIST_COMMAND_RESPONSE)
    mocker.patch.object(Client, 'queues_list_fields_request', return_value=FIELDS_RESPONSE)
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    fields = get_fields_by_queue(client, [1])
    assert fields == FIELDS_EXPECTED
    fields = get_fields_by_queue(client, [])
    assert fields == FIELDS_EXPECTED

def test_shaping_fetch_no_previous_integration_context(mocker):
    """Unit test
        Given
        - fetch incidents command
        - command args
        When
        - mock the Clients's get token function.
        - mock the Demisto's getIntegrationContext.
        - mock the set_shaping function.
        Then
        - run the fetch incidents command using the Client
        Validate when no integration context is saved, Then new shaping will be created and saved.
        """
    mocker.patch('QuestKace.set_shaping', return_value='Test shaping default')
    mocker.patch.object(demisto, 'getIntegrationContext', return_value={})
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    shaping = shaping_fetch(client, [])
    assert shaping == 'Test shaping default'

def test_shaping_fetch_with_previous_integration_context_valid(mocker):
    """Unit test
        Given
        - fetch incidents command
        - command args
        When
        - mock the Clients's get token function.
        - mock the Demisto's getIntegrationContext.
        - mock the set_shaping function.
        Then
        - run the fetch incidents command using the Client
        Validate when a day has not passed since the last update of shaping, then return last shaping available.
        Validate that the shaping was not changed.
        """
    mocker.patch.object(demisto, 'getIntegrationContext', return_value={
        'shaping_fields': 'Tests shpaing',
        'valid_until': int(time.time()) + 3600 * 24
    })
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)

    mocker.patch('QuestKace.set_shaping', return_value='Test shaping not default default')
    shaping = shaping_fetch(client, [])
    assert shaping == 'Tests shpaing'

def test_shaping_fetch_with_previous_integration_context_not_valid(mocker):
    """Unit test
        Given
        - fetch incidents command
        - command args
        When
        - mock the Clients's get token function.
        - mock the Demisto's getIntegrationContext.
        - mock the set_shaping function.
        Then
        - run the fetch incidents command using the Client
        Validate when a day has passed since last update of shaping, Then the shaping will be checked again.
        Validate That the shaping is set to new shaping.
        """
    mocker.patch.object(demisto, 'getIntegrationContext', return_value={
        'shaping_fields': 'Tests shpaing',
        'valid_until': int(time.time())
    })
    mocker.patch.object(Client, 'get_token', return_value=(1, 1))
    client = Client(url="http://test.com", username="admin", password="123", verify=False, proxy=False)
    mocker.patch('QuestKace.set_shaping', return_value='Test shaping not default default')
    shaping = shaping_fetch(client, [])
    assert shaping == 'Test shaping not default default'