How to tell if a loan is good
Many of our purchasing decisions in 2019 are dominated by the use of a simple Google search.
If it comes up first and appears to have what we need, then why go elsewhere?
But all products aren’t created equal, and this is never more true when we’re talking about finance products – particularly loans.
There’s no loan that’s inherently ‘good’ or ‘bad’, more that there are some out there that will be more suited to your circumstances than others.
You might hear a lot of talk about ‘short-term high-cost loans’ or ‘payday loans’ as a bad option, and that’s sometimes the case, but not always.
Essentially, you should always check to see if a loan is right for you using the following factors:
MSE money mantra
Before you ‘buy’ anything (and remember, a loan is a product you buy and not ‘free money’), this money mantra from MoneySavingExpert is genuinely a godsend.
Advertisement Advertisement
If you’re skint, you ask yourself:
- Do I need it?
- Can I afford it?
If you’re not skint, ask yourself?
- Will I use it?
- Is it worth it?
You might be getting a loan for a number of reasons.
Perhaps it’s because you’re short on cash for living expenses. But do you really need a loan, or is there money in savings or that could be borrowed from family or friends for cheaper?
If it’s for a product like a car or home improvements, do you really to take out a loan, or could you buy something cheaper or make improvements gradually?
There will be times when the answer is yes to these questions, but it’s important to ensure you’re making the right decision in taking out any form of credit before you do so.
Good and bad debt
We’ve spoken before about ‘good’ and ‘bad debt’ – in particular looking at mortgages.
Although all debt is technically debt, some is considered better than others if it increases your overall wealth.
Is the loan, like a mortgage or student loan, actually going to make you money in the long-run?
That’s not to say you should never take out debt that won’t directly make you wealthier. For example, although that car will be worth less by the end of your repayments, it might be an essential to get you to work each day or take your children to school.
Advertisement Advertisement
But, it puts things in perspective when it comes to whether your loan is a good one for you. Could you, instead of financing a new car, opt for a used model that’ll cost you less and help balance the books more?
Interest
Interest is one of the main things you should look at when taking out a loan. This is the extra you’ll pay back as a sort of ‘cost of borrowing’.
Typically, when it comes to a loan, you’ll see this written as APR, which means annual percentage rate.
So, if you borrowed £1,000 over the course of a year with 10% APR, you’ll pay back £1,100 in total (which includes the principal cost of the loan and the added interest they charge).
This can become more complicated when it comes to shorter term loans, and it’s why you might see might higher APRs on payday loans. They’re still an expensive way to borrow, but if the APR is 1,000%, you won’t necessarily pay back 1000x what you borrowed, as you might pay the full amount back within 30 days.
In general, the lower interest rate, the better. But, it must be factored into how long it takes to pay it back, and assessed as the overall cost of borrowing rather than just a standalone number.
Repayment time
As mentioned, take a look at how long you’ll pay back the loan. Some might need the money immediately but be able to pay it back sooner, so for them it won’t make sense to repay over the course of a number of years.
Advertisement
Others are looking to split the cost of a large purchase, in which case small repayments over time is the ideal solution.
It’s absolutely about how the repayment time affects the cost of the loan, but also about deciding whether it suits your needs and budget/income.
Penalties for early repayment
Some loan companies will have penalties in place for early repayment.
This can be bad for people who come into money further down the line and want to close the account, or those who’d prefer a bit of flexibility.
Check the terms and conditions of the loan beforehand to see if this is the case.
Eligibility
A loan can have a tiny interest rate and be as flexible as you like, but if you’re not the ‘right’ customer for that lender, you won’t be accepted.
Some companies will let you check whether you’re eligible before you actually apply (this is normally a soft search, which shouldn’t affect your credit rating), which can make things less daunting.
Secured or unsecured
An unsecured loan is one that isn’t subject to any collateral – for example property. A secured one is, so if you fail to pay back the money, the lender can seize your goods as a form of payment.
Neither of these makes a loan good or bad, because there’s always something at stake (most notably, your credit rating and financial future).
However, secured loans tend to have lower interest rates and higher credit limits, so they make more sense for loans like mortgages or car finance.
Advertisement
Unsecured loans on the other hand might be better for people who don’t have assets such as that – for example, those who are renting and don’t own high-value items.
Guarantors
To increase your chances of eligibility by removing risk, some lenders will ask for a guarantor.
This is a person who will co-sign your loan, agreeing to pay it back if you fail to do so.
While guarantor loans are billed as a lower interest option for people who need payday-style borrowing, it’s not for everyone.
 There also could be personal ramifications if a family member or friend is left paying off debt you couldn’t.
Think carefully before asking someone to guarantor a loan, and ensure they understand the process before they sign on the dotted line.
Reviews
Like any other product, loan companies also have online reviews.
Companies like Feefo compile reviews from real customers, asking them about how they’d rate the service they received. From there, you can check and see whether things are legit, and whether they’re the right lender for you.
To determine a good loan requires looking at a whole host of factors, but whether it’s from a good lender or not can only be found out through how they’ve treated past customers.


 For second-, third-, and fourth-year undergraduates. Offered: Sp.
View course details in MyPlan: B STR 301
B STR 431 Introduction to Neuroanatomy (2) NW Dhaka, Mulligan, Pasupathy
Anatomy and functional organization of the human central nervous system, with clinical applications. Prerequisite: admission to the School of Dentistry. Offered: W.
View course details in MyPlan: B STR 431
B STR 498 Undergraduate Thesis (*, max. 30)
Individual research projects under the supervision of an instructor. For senior medical students. Offered: AWSpS.
View course details in MyPlan: B STR 498
B STR 499 Undergraduate Research (*, max. 30)
Individual research projects in cellular and developmental biology, experimental immunology, reproductive biology, neurobiology, molecular structure, morphometrics, computer modeling, and related fields under the supervision of an instructor. Offered: AWSpS.
View course details in MyPlan: B STR 499
B STR 501 P-Human Anatomy and Embryology (1-13, max. 13) Clark
Dissection course in regional anatomy: thorax, abdomen, pelvis, perineum. Prerequisite: permission of instructor. Offered: A.
View course details in MyPlan: B STR 501
B STR 502 P-Human Anatomy and Embryology (1-5, max. 5)
Dissection course in regional anatomy: upper and lower extremities. Prerequisite: permission of instructor. Offered: W.
View course details in MyPlan: B STR 502
B STR 510 Seminar in Anatomy (1)
Scientific and historical basis of selected studies in biological structure, anatomy, and human development. Original literature used as basis for textbook descriptions. Prerequisite: permission of instructor. Credit/no-credit only. Offered: AWSp.
View course details in MyPlan: B STR 510
B STR 512 Human Microanatomy (4) Bermingham-McDonogh
Treating the specialized tissues and organs of the body from the microscopic and ultramicroscopic points of view. Prerequisite: permission of instructor. Offered: A.
View course details in MyPlan: B STR 512
B STR 515 Biological X-Ray Structure Analysis (3) Stenkamp
Theory of x-ray diffraction, with emphasis on applications to biological systems. Prerequisite: permission of instructor. Offered: W.
View course details in MyPlan: B STR 515
B STR 519 Current Problems in Macromolecular Structure (2, max. 10) Stenkamp
Macromolecular structures related to specific areas of biological research. Emphasis on discussion of relevant research papers and use of computer graphics to visualize the molecular structures. Offered: AWSpS.
View course details in MyPlan: B STR 519
B STR 520 Structure Based Design of Drugs (3, max. 9) Hol, Verlinde
Research papers illustrating protein-structure- based design of new drugs. Review of methods and extensive discussion of all known mechanisms of drug resistance. Offered: W, even years.
View course details in MyPlan: B STR 520
B STR 521 Advanced Biomacromolecular Crystallography (3, max. 9) Hol, Merritt, Stenkamp
Aspects of protein crystallography ranging from crystal growth, phase determination methods, density averaging to refinement, fiber diffraction of DNA and proteins. Offered: W, odd years.
View course details in MyPlan: B STR 521
B STR 530 P-Human Anatomy and Embryology for Dental Students (8/13) Clark, Mulligan
Normal anatomy of the thorax, abdomen, pelvis, and perineum are discussed and dissected employing cadavers. Development of the organ systems related to definitive adult structure. Developmental anomalies and diagnostic anatomy. Prerequisite: admission to School of Dentistry. Offered: A.
View course details in MyPlan: B STR 530
B STR 540 Special Problems in Anatomy (1-6, max. 6)
Special projects in anatomy under sponsorship of faculty member. Prerequisite: graduate, medical, or dental student standing and permission of instructor. Offered: AWSpS.
View course details in MyPlan: B STR 540
B STR 541 P-Microscopic Anatomy for Dental Students (6) Bermingham-McDonogh
Lecture and laboratory work in microscopic anatomy. For dental students taking HUBIO 510; others by permission of instructor. Offered: A.
View course details in MyPlan: B STR 541
B STR 555 Laboratory Rotation in Biological Structure (*, max. 5)
Introduction to experimental design, research methods, and scientific thought in laboratories of faculty members. Provides hands-on experience, an entrance into the literature of the field, and opportunities for discussion with all members of the laboratory. First-year dental students only. Prerequisite: permission of instructor. Offered: AWSpS.
View course details in MyPlan: B STR 555
B STR 557 Biomolecular Structure Seminar (1, max. 9) Hol
Literature review of key research in biomolecular structure in the form of short presentations by participants followed by discussion. Critical evaluation of methods and results regarding properties and protein structure determination. Prerequisite: graduate standing in biological structure or biochemistry and permission of instructor. Credit/no-credit only. Offered: AWSp.
View course details in MyPlan: B STR 557
B STR 580 P-Anatomy Teaching Practicum (*, max. 8) Clark
Opportunity for medical student (or other professional student) to gain teaching experience in biological structure and human biology courses, including gross anatomy, histology, and neuroanatomy. May include lecture, laboratory, conference, depending on student interest, experience. Credit based on course credit in which student is assisting. Prerequisite: permission of course chairperson. Offered: AWSp.
View course details in MyPlan: B STR 580
B STR 584 Seminar in Neurogenesis (1, max. 16) Bermingham-McDonogh, Dhaka
Current research on process by which neurons are generated in the nervous system. Prerequisite: permission of instructor. Offered: AWSpS.
View course details in MyPlan: B STR 584
B STR 590 Electron Cryo-Microscopy of Biological Macromolecules and Complexes (3) Wang
Introduces high-resolution cryo-electron microscopy (cryoEM); image formation and three-dimensional reconstruction theories and available software. Includes hands-on experience using the cryoEM facility for data collection and analysis; and presentations on student projects. Offered: ASp.
View course details in MyPlan: B STR 590
B STR 591 X-Ray and NMR Analysis of Macromolecular Structure (1, max. 9) Hol
Current topics in research on molecular structure, usually emphasizing techniques of x-ray crystallography. Prerequisite: permission of instructor. Credit/no-credit only. Offered: AWSpS.
View course details in MyPlan: B STR 591
B STR 598 Reading in Biological Structure (2)
Critical evaluation of research in biological structure, including current problems, methods, and future directions by reading and discussing research and review papers. Prerequisite: permission of instructor. Credit/no-credit only. Offered: AWSpS.
View course details in MyPlan: B STR 598
B STR 600 Independent Study or Research (*-)
Offered: AWSpS.
View course details in MyPlan: B STR 600
B STR 700 Master's Thesis (*-)
Offered: AWSpS.
View course details in MyPlan: B STR 700
B STR 800 Doctoral Dissertation (*-)
Offered: AWSpS.
View course details in MyPlan: B STR 800


Rules:
1. Choose your 3 Pokémon.
2. Once you have your assembled your team, you will battle the AI's
randomly selected Pokémon.
3. The winner is determined based on the Pokémon's speed, attack,
defense, and base experience stats.
4. After the battle is over, we'll recommend something else for you to
do... or you can play again!


Muslim group to pursue review of Ayodhya verdict in Indian Supreme Court
by https://www.dawn.com/authors/422/reuters, ReutersAn Indian Muslim group said on Sunday it would file a petition in the Supreme Court asking for a review of a ruling that awarded a disputed site in Uttar Pradesh to Hindus, allowing them to build a temple there.
The All India Muslim Personal Law Board, an umbrella body of intellectuals and organisations, said it would seek a review of the judgment, which rejected Muslim claims over the land.
India's Supreme Court ruled on November 9 that a 2.77-acre plot of land should be awarded to Hindus, who believe it is the birthplace of Lord Ram, a physical incarnation of the Hindu god Vishnu.
Editorial: Babri mosque verdict will embolden the foot soldiers of Hindutva and send a message to minorities
“There are apparent errors in the Supreme Court judgment, and we felt that it would be prudent to file a review petition,” Syed Qasim Ilyas, a member of the group, told a press briefing.
The main Muslim litigant in the case, the Sunni Waqf Board, has declined to file a review, saying it respected the verdict.
The site in Ayodhya, where in 1528 a mosque was built by an associate of the Mughal emperor Babur, has been the centre of a bitter dispute between India's majority Hindus and Muslims, who make up about 14 per cent of the population, since Indian independence.
In 1992, a Hindu mob razed the mosque to the ground, leading to riots in several parts of India.


BOTUPDATE script by Gene Wells
botupdate.php and botupdateinc will do the following to a FlashChat Bot database.
1. Truncate (Empty) your existing bot database tables.
2. Read in any .AIML AI files in your /aiml directory, and create new databases.
3. Reset bot id = 1 for FlashChat compatibility .
4.  I tested it on my FlashChat and it works fine.
Read the included install.txt file first!
Click here to run botupdate.php
If you have timeout issues with your host's php, then run botupdateinc to load aiml files one at a time.


Match Play. Red leads 4-2 to 5 (post-Crawford). How should Red play 62?
pips Red=167 White=159
(CorrectAnswer= 0/0, ErrorScore= 0)
Red will be doubled after his roll and must take.
To limit the gammon risk he should keep his ace-point anchor and play with one blot by moving 13/5. This is one of the few scenarios where 13/5 is correct instead of the normal 24/18, 13/11 which is correct for money and at most other match scores. If this were the Crawford game 24/18, 13/11 would be the correct play.
At this score 24/18, 13/11 is an error.
To limit the gammon risk he should keep his ace-point anchor and play with one blot by moving 13/5. This is one of the few scenarios where 13/5 is correct instead of the normal 24/18, 13/11 which is correct for money and at most other match scores. If this were the Crawford game 24/18, 13/11 would be the correct play.
At this score 24/18, 13/11 is an error.
1. Cubeful 2-ply 13/5 Eq.: -0.501 0.446 0.123 0.006 - 0.554 0.178 0.013 2. Cubeful 2-ply 24/18 13/11 Eq.: -0.504 (-0.003) 0.459 0.117 0.006 - 0.541 0.193 0.009 3. Cubeful 2-ply 24/16 Eq.: -0.505 (-0.004) 0.450 0.104 0.004 - 0.550 0.185 0.007 4. Cubeful 2-ply 13/11 13/7 Eq.: -0.539 (-0.038) 0.437 0.118 0.006 - 0.563 0.188 0.015 5. Cubeful 2-ply 24/18 8/6 Eq.: -0.572 (-0.071) 0.431 0.105 0.005 - 0.569 0.198 0.008


FacetHandler
seco.facetedSearch
Service for mediating the communication between facets.
When created, the FacetHandler object broadcasts a sf-initial-constraints
event
on the given scope, with the following structure:
{Array}
- The constraints as generated by all the facets,
plus any initial constraints defined in the init configuration.{Object}
- A collection of facet states where the key is the
facetId
of the facet, and value is the state as emitted by that facet.{Object}
- The configuration given when instantiating
the FacetHandler.The FacetHandler object listens for two events:
sf-request-constraints
- In response will broadcast a
sf-initial-constraints
event
with the same object as above as the argument.sf-facets-changed
- In response will broadcast a
sf-facet-constraints
event on the scope with the same object as
above, except omitting config
.The event names are injectable as constants:
sf-initial-constraints
: EVENT_INITIAL_CONSTRAINTS
sf-facet-constraints
: EVENT_FACET_CONSTRAINTS
sf-request-constraints
: EVENT_REQUEST_CONSTRAINTS
sf-facet-changed
: EVENT_FACET_CHANGED
new FacetHandler(config);
| Param | Type | Details |
|---|---|---|
| config | Object | Configuration object broadcast to all facets at init. The object has the following properties:
The object is sent to facets as is, and so any extra fields will be included, although the above fields are the only ones used by FacetHandler and the built-in facets. |


- Seatle
- Tokyo
- Dubai
- Paris
- Lima
The cookie dough is made from standard ingredients: flour, leavener, salt, sugar, butter, egg, & vanilla. It's the ratios of those ingredients that make this recipe stand out from the rest. Mix 2 and 1/4 cups of flour with 1 teaspoon of baking soda, 1/2 teaspoon of salt, and my favorite: cornstarch.
This shop located in Amman - jordan
This shop opene from 6 am - 7 pm
You can buy a fresh fish from this shop
you can order from the shop when you press to sales button under


Hi there! I'm a multi-faceted do-er; I work best collaborating with others to find creative & technical solutions, whether that means managing a team, improving a workflow, or developing a website. I thrive in challenging environments where teamwork is valued, and good ideas are valued, no matter who or where they come from.
Interested in working together? Let's chat.
jeremyemiller at gmail dot com.


Any bank can affiliate with Debiphone to provide its customers a new safer and additional payment channel
- Allow your customers to have the option to use an innovative, less costly and much safer payment channel
- Increase your customer base by incorporating Debiphone Virtual Clients who have received payments from your own customers
- Reduce the cost of maintaining expensive and cumbersome ATM’s
- Reduce the number of fraud claims
- Reduce your retail transactions costs with expensive clearinghouses


--- layout: page title: About permalink: /about/ ---
My first name tends to be pronounced incorrectly. While my problems aren't quite as dire as this guy, I think a short guide is still in order, and here it is:
"Stephen" is pronounced exactly the same as "Steven".
I can understand the confusion: a quick search of the CMU pronouncing dictionary shows that there is no other word in the English language where "ph" is pronounced as a "v". Don't ask me why "Stephen" is pronounced the way it is.
The name "Stephen" is from the Greek "στέφανος" which means "crown". The "φ" explains the "ph". One form of "στέφανος" is found in the New Testament. Stephen is also a Saint in many Christian traditions, as well as the first martyr.
In my opinion, screen is so important that it deserves it's own section. If you do any work remotely, on a unix machine, you need to know how to use screen (or tmux, I'm not picky). Here is my .screenrc (configuration file). Just download this and put it into your home directory.
Or, simpler yet, just run this command from your home directory.
~ $ wget https://github.com/mayhewsw/dotfiles/blob/master/screenrc ~ $ mv screenrc .screenrc
byobu is a fancy wrapper built over screen.
Latex is a great tool for simply and beautifully typesetting math. For an editor, I use TexMaker. Lately I've been using overleaf.
I used Latex to make my resume, and my wedding program.


The family Alligatoridae contains 4 genera and 8 species of alligator and caimen that live in calm or slow moving freshwater areas.
American alligator, Alligator mississippiensis
Chinese alligator, A. sinensis
common caiman, Caiman crocodilus
broad-snouted caiman, C. latirostris
Yacaré, C. yacare
black caiman, Melanosuchus niger
Cuvier's dwarf caiman, Paleosuchus palpebrosus
smooth-fronted caiman, P. trigonatus
Different species of alligatoridae can be found in parts of central to northern South America, southern and western Central America and Mexico, the southeastern United States, and a small area of eastern China. Alligatoridae have a U shaped snout, stout bodies and powerful tails that are at least as long as their bodies. They have long snouts with lots of teeth. Alligatorids are distinguishable from crocodiles by their mandibular teeth of which none are visible when the jaw is closed. The fourth mandibular teeth in crocodiles are visible even with a closed jaw. Alligators are less agressive than crocodiles and can survive and stay active in colder temperatures. Members of alligatoridae are active all year althrough they retreat to burrows in colder weather. Alligators are also faster than crocodiles. Alligators live in groups, form dominance hierarchies and eat a wide variety of prey.


Every day, a new Linux command found in the wild, dissected, and explained by a passionate beginner.
Have an comment or critique? Add an issue to the github repo that references the date of the post in the title! 😎


{# This is an example home page template. It inherits and extends a layout template that lives in the top-level views/ folder for convenience #} {% extends "apostrophe-templates:layout.html" %} {% block main %}


This is a test:


I am a creative individual who loves computers and all things electronic. I have a special passion for programming that I have been developing since I was three years old (my first computer was a Commodore 64).
I love to learn how things work which often leads me to finding ways to improve their original functionality. This comes out in my programming as I constantly try to write code that works well, then re-write it as needed to make it work more efficiently.
I have been programming websites since I was 14, professionally since I was 18. I started in PHP, and have since learned Javacript, Flex, CSS, valid HTML, and many more. I enjoy learning new technologies and looking for ways to challenge my current abilities.

Check out my recent work for some examples of things I've been working on lately.
For the past three and a half years I've been working as a freelance employee of Stock20.com and I have been their sole web programmer. Stock20 is looking to downsize some of their operations and wont be requiring a full time web programmer any more. So I am looking to join the team of a great company that requires someone with top of the line PHP, Flex, Javascript, and MySQL programming skills.
"I have known Tony Petty for about seven years. I've been his employer in some form for approximately six of those seven. In that time Tony has demonstrated intelligence, integrity, a solid work ethic, and a creative approach to problem solving."
"Tony has a unique ability to trouble-shoot and problem-solve complex systems of all kinds. He works dilligently to complete tasks and develop new skills to accomplish even more. Tony has a positive attitude and good communication skills that enable him to be a strong team-player."
"Tony is a very ethical and conscientious person. Anything I have seen him undertake, he dedicates himself to doing the best job he possibly can. I have seen few people who tackle information technology with such a relentless passion for improvement and quality."
h:<PHONE_NUMBER>
c:<PHONE_NUMBER>
www.AnthonyPetty.com
<EMAIL_ADDRESS>509 Potomac Ave, Lower, Buffalo, NY 14222


| Items | Pizza Type | Pizza Size | Pizza Toping | Pizza Crust | Pizza Price | |
|---|---|---|---|---|---|---|
| 1 | Delux | Mega | Mashrooms, blackolives,cheese, onions, red & green peppers | thin, thick | 1300 KSh | |
| 2 | Delux | Large | Mashrooms, blackolives,cheese, onions, red & green peppers | thin, thick | 1000 KSh | |
| 3 | Delux | Regular | Mashrooms, blackolives,cheese, onions, red & green peppers | thin, thick | 800 KSh | |
| 4 | Classic | Mega | Mashrooms, blackolives,cheese, onions, red & green peppers | thin, thick | 1150 KSh | |
| 5 | Classic | Large | Mashrooms, blackolives,cheese, onions, red & green peppers | thin, thick | 900 KSh | |
| 6 | Classic | Regular | Mashrooms, blackolives,cheese, onions, red & green peppers | thin, thick | 650 KSh |
| Items | Pizza Type | Pizza Size | Pizza Toping | Pizza crust | Pizza quantity | Pizza Price |
|---|---|---|---|---|---|---|
| 1 |
We also offer delivery services.
Subscribe to our weekly new recipe notifications


Insecure Direct Object Reference
This article is Part 4 in a 11-Part series about the Owasp Top 10.
- Part 1 - Understanding Cross-Site Scripting (XSS)
- Part 2 - Injection Flaws
- Part 3 - Malicious File Execution
- Part 4 - This Article
- Part 5 - Cross Site Request Forgery (CSRF)
- Part 6 - Information Leakage and Improper Error Handling
- Part 7 - Broken Authentication and Session Management
- Part 8 - Insecure Cryptographic Storage
- Part 9 - Insecure Communications
- Part 10 - OWASP 2007 Top 10 Presentation
- Part 11 - Failure to Restrict URL Access
What is Insecure Direct Object Reference
Insecure Direct Object Reference is when a web application exposes an internal implementation object to the user. Some examples of internal implementation objects are database records, URLs, or files.
An attacker can modify the internal implementation object in an attempt to abuse the access controls on this object. When the attacker does this they may have the ability to access functionality that the developer didn't intend to expose access to.
Examples of Insecure Direct Object Reference
Insecure direct object reference is a very broad category of vulnerabilities. There are many examples of these types of vulnerabilities found in the wild by other names. Open Redirects and Directory Traversal are two classic examples of an insecure direct object reference vulnerability.
Open Redirects
This is where the web application has a parameter that allows the website to redirect the user somewhere else. If this parameter is not implemented properly using a white list, attackers can use this in a phishing attack to lure potential victims to a site of their choosing.
Directory Traversal
Assume a web application allows for a file to be rendered to a user that is stored on the local machine. If the application isn't verifying what files should be accessed, an attacker can request other files on the file system and those will also be displayed.
For instance, if the attacker notices the URL:
http://misc-security.com/file.jsp?file=report.txt
The attacker could modify the file parameter using a directory traversal attack. He modifies the URL to:
http://misc-security.com/file.jsp?file=**../../../etc/shadow**
Upon doing this the /etc/shadow file is returned and rendered by file.jsp demonstrating the page is susceptible to a directory traversal attack.
Preventing Insecure Direct Object Reference
As always, web application developers can prevent these attacks through good planning.
Developers should use indirect reference maps. Direct mapping can easily be guessed by attackers. Developers should avoid exposing private objects to users. File names, external/internal URL's, and database keys are all examples of things that should not be displayed to the user.
If direct objects must be used, then the developers should ensure through validation that the user is authorized to view what they are attempting to access. In the directory traversal example, determine what files the user should access and only grant them privileges to those files. This is known as an "accept known good" approach and is always a good idea when it comes to developing secure applications.


Preparation time
30 mins to 1 hour
Cooking time
10 to 30 mins
Serves
Serves 4
Dietary
A gloriously gooey chocolate cake served with ice cream makes for a great dessert.
Preheat the oven 180C/160C Fan/Gas 4. Grease a 20-25cm/8-10in baking dish with a little butter.
For the cake, melt the butter in a saucepan. Remove from the heat and gently stir through half the chocolate until melted.
In a mixing bowl, whisk the eggs and sugar until they become pale and thick. Pour in the chocolate mixture, then sift in the flour. Add the remaining chocolate and using a spatula, fold the mixture together until it is evenly combined. Pour into the prepared dish.
Bake for 20 minutes. When cooked, the pudding should be slightly firm around the sides but the centre should still be wobbly.
Meanwhile, for the ice cream. Melt the butter in a frying pan, add the breadcrumbs and cook until golden-brown. Set aside to cool.
Put the bananas and peanut butter in a food processor and mix until smooth and creamy. Put in a bowl with the breadcrumbs and fold through.
Serve the lava pudding immediately with the ice cream.


Conquering New York in one visit is impossible. Instead, hit the must-sees – the Empire State Building, the Statue of Liberty, Central Park, the Metropolitan Museum of Art – and then explore off the beaten path with visits to The Cloisters or one of the city’s libraries. Indulge in the bohemian shops of the West Village or the fine dining of the Upper West Side. The bustling marketplace inside of Grand Central Station gives you a literal taste of the best the city has to offer.


by Curtis Edmonds --<EMAIL_ADDRESS>In 1992, actor John Malkovich appeared as a clown in a Woody Allen movie called Shadows and Fog. Veteran British actor Donald Pleasence, best known for his role in The Great Escape, played a doctor in that movie. Pleasence played a preacher in a 1968 movie called Will Penny, with Charlton Heston in the title role. (With me so far?) In 1995, your humble reviewer met Charlton Heston at a Republican fundraiser in Dallas. This, therefore, gives me three degrees of separation from John Malkovich. (Your mileage may vary.)
The conceit of Being John Malkovich is that you can reduce that "Six Degrees of Separation" we're all supposed to have down to one. For two hundred dollars, we're told, you can enter a portal leading into the brain (consciousness?) (soul?) of John Malkovich for fifteen minutes.  After your time is up, you fall into a drainage ditch on the New Jersey Turnpike and have to hitchhike back to New York.
Now this... this is a brilliant idea, no mistake. In our fantasies about writing the Great American Screenplay, this is the kind of idea we wish we all had. It's an idea that's just beyond the cutting edge of reality while still being instantly comprehensible to everyone. It gives you a lead character that everyone knows and recognizes. And its one sentence summary -- evoked by John Cusack as "You see the world through John Malkovich's eyes, then after about 15 minutes, you're spit out into a ditch on the side of the New Jersey Turnpike!" -- may be the best pitch since "Arnold Schwarzenegger and Danny DeVito are twins."
And, of course, with this wonderful, creative idea as the backbone, you can do pretty much whatever you want. You can assemble all sorts of characters, put them in almost any setting you want, slide them through the portal, and see what they're like on the other side. You can, literally, do anything with this idea.
This is the promise of Being John Malkovich, but it is also the danger. C.S. Lewis noted that the problem with great ideas like this is that they exploit themselves spontaneously. Lewis, talking about his big idea in The Screwtape Letters, said that his demonic correspondence, like a runaway horse, "would run away with you for a thousand pages if you gave it its head."
What happens to Being John Malkovich is that writer Charlie Kaufman and director Spike Jonze give their imaginations free rein, and the movie runs away on them. Being John Malkovich is less like a runaway horse than it is like a runaway carousel, with horses and bodies flying around at top speed in dizzying arcs. But there's no centripetal force to keep the movie from spinning wildly out of control. Being John Malkovich spits out eccentric, inventive ideas at a mile a minute. Each of the ideas isn't really bad, in and of itself, but there are so many of them, piled one on top of the other, that the whole movie is a walk through Bizarro World.
Take the characters, for instance. John Cusack is a quirky puppeteer whose idea of puppet shows is Heloise and Abelard instead of Punch and Judy. Early on, he gets beat up by a critic, which apparently happens often. Cameron Diaz plays his wife, who's sort of a cross between a young Geena Davis and Dr. Doolittle. (She's got the funniest line in the movie, which I won't share with you, as it changes the course of the movie.) Catherine Keener plays his co-worker and partner in the burgeoning business of sharing slices of Malkovich's life. She seems perfectly normal for a while until she becomes a walking icon of lust. (Really.) It says something about Being John Malkovich that the only character who looks and acts normal the whole way through is Charlie Sheen.
But despite all of the layers of self indulgent weirdness, Being John Malkovich has three fantastic, wonderful elements that make it a must see. The first, and most obvious, is the performance of Malkovich himself. Malkovich may not win Best Actor, but he's the Best Sport of the year for even agreeing to participate in this project. It's easy to imagine what would have happened had he said no -- we might have gotten something skin-crawlingly godawful like "Being Fran Drescher" -- but Malkovich shows us all why this movie is only possible with an undeniably great actor in the title role. Part of the role is an inspired self-parody, part of the role shows off the best possession scenes since Steve Martin in All of Me, and part of the role is his participation in two of the weirdest sequences ever shot on film.
These are the other two reasons to see the movie. Twice, we're transported into John Malkovich's subconscious, and these two scenes completely redeem the movie. All of the bizarre and odd things that infest the movie come together in two thrilling, jaw dropping moments that are completely original while being completely unlike each other.
The key thing to remember about Being John Malkovich is that the whole concept of the portal is a misdirection. The audience isn't really being sucked into Malkovich's brain, it's being sucked into the imagination of Charlie Kaufman and Spike Jonze. This is not a comfortable place for everyone, and when you get dumped out of the theater, you may feel disoriented and dizzy. But the high points of this thrill ride are well worth the price of admission.
-- Curtis D. Edmonds<EMAIL_ADDRESS>Movie Reviews: http://us.imdb.com/M/reviews_by?Curtis+Edmonds
"So how does a conservative movie reviewer, who doesn't want to spoil the movie, write a review? The same way he takes the lamb chop from rottweiller -- carefully. Another way is to fill two-thirds of the column with irrelevant woolgathering about other topics so that you only have room for a paragraph for the real review." -- Jonah Goldberg
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


By Rainer Wittmann<EMAIL_ADDRESS>The most recent version of this document is always available at www.RemoveGrain.de.tf
The binary and the source code are subject to the GNU General Public License. In addition we deny anyone the right to derive a Photoshop plugin from the source code of RemoveGrain. This restriction was made in view of the way Adobe treats third party filter developers, which is absolutely unacceptable. Last change May 1, 2005.
The binary package contains four versions of RemoveGrain, two small dynamically linked versions RemoveGrain.dll, RemoveGrainSSE2.dll, RemoveGrainSSE3.dll and the big staticly linked RemoveGrainS.dll. The first one only requires integer SSE (Athlon and Pentium 3 design), the second requires a SSE2 capable cpu (Pentium 4 or Athlon 64) and the third is for Prescott P4s only. If none of these dlls work because of a missing dll, one has either to copy the missing dll to the window's system directory or one has to use RemoveGrainS.dll, which only requires SSE. Please put only one of the three plugins into the Avisynth plugin directory. RemoveGrain supports all color spaces. YV12 is directly supported and YUY2, RGB24, RGB32 are supported in planar form (see the section Color Spaces). Beginning with version 0.6 the auxiliary filter Clense has been added to RemoveGrain.dll and the plugin Repair.dll has been added to the binary package. There are again four versions of this plugin. Though Repair.dll is derived from the same source code, it serves for quite different purposes. This plugin contains the filters Repair and TemporalRepair. All three new filters are described below. Please post questions, problems, comments etc. to the RemoveGrain thread of the doom9 forum rather than sending me email. In particular, I would appreciate reports about artifacts and compression gain of the various modes. These may also help others to select the right mode.
RemoveGrain is a purely spatial denoiser for Avisynth. However, in combination with Clense and the Repair plugin more powerful spatio-temporal denoisers and Deinterlacers can be built as Avisynth functions (see the examples below). Modes 1-10,17,18 are for truely progressive input only, while modes 13-16 are primarilarily for interlaced input and are used for constructing deinterlacers. While modes 1-10,17,18 can be used for interlaced and telecined material as well by applying it to the separated fields, the quality is inferior, because the adjacent pixels have twice the vertical distance, which clearly has a negative impact on quality. With RemoveGrain one can't remove big spots or scratches from a clip. Rather it was designed for the very small spots - not much larger than a pixel. Although the changes made by RemoveGrain are hardly visable the impact on compression may be quite substantial. In modes 1-10,17,18 the value of the center pixel is replaced by the value of one of its eight neighbours. This applies to the luma and the chroma liekwise. More precisley, for a given pixel x RemoveGrain looks at the eight spatial neigbours of that pixel and chooses two of these neighbours, say, a,b for minmax clipping, i.e. x is replaced by min(max(x, min(a,b)), max(a,b)). The choice of a,b depends strongly on the mode variable. If 1 <= mode <= 4 a minmax clipping is done at a(mode), a(9-mode), where a(1) <= a(2) <= a(3) <= a(4) <= a(5) <= a(6) <= a(7) <= a(8) is the sequence of neighbours ordered by the luma. Thus, if the number of neighbours with luma >= x is greater than the value of the mode variable and if the number of neighbours with luma <= x is greater than mode as well, then the luma of this pixel is left unchanged. Clearly this method only makes sense for 1 <= mode <= 4. If mode=1, then RemoveGrain(mode=1) is identical with trbarry's Undot (even the speed of the SSE version is nearly identical to that of Undot, but the SSE2 and especially the SSE3 versions are significantly faster). The chroma values are treated similarily, but instead of the mode variable, the variable modeU is used for the U plane and modeV is used for the V plane. However, the value of the mode variable is the default value for the modeU variable and the value of the modeU variable is the default value for the modeV variable. Let us look at an example: assume that the pixel has the luma value 32 and that the eight neighbours have the luma values 21, 122, 77, 25, 56, 200, 133, 45. If mode <= 2, then the pixel remains unchanged, because there are two neighbours with smaller luma and six with larger luma. If mode=3, then the luma of the pixel is increased to 45. Finally, if mode=4, then the luma is increased to 56. With mode=1,2 the filter is fairly artifact free. Thin lines are preserved by these modes including the two end points. If mode=3 or 4, then thin lines may be destroyed by RemoveGrain. Thus RemoveGrain(mode=3 or mode=4) may only be used with some caution. The fairly risk free mode=2 is the default value. It still does significantly more denoising than Undot, i.e. mode= 1. The larger the value of mode (between 1 and 4 only), the softer the look of the output and the higher the compression ratio. The smart mode 17, introduced in version 0.8, is of special importance. It is a variant of modes 4. However, unlike mode 4, it preserves thin lines, although the pixels at the two ends of a thin line may get lost. Whenever mode= 4 doesn't destroy thin lines through a pixel, then mode 17 handles a pixel just like mode 4, otherwise a mode slightly more aggressive than mode 2 is used. Unlike the modes <= 4 the modes between 5-9,17,18 are edge sensitive . While in mode <= 4 any pair of neighbours is a possible choice for minmax clipping, in modes 5-9,18 only line pairs are used. There are four such pairs: firstly the horizontal pair consisting of the left and the right neighbour of the pixel, secondly the vertical pair consisting of the top and bottom neighbour, thirdly the diagonal pair consisting of the bottom left and the top right neighbour and finally the diagonal pair consisting of top left and the bottom right neighbour. If mode=9, then we choose simply that line pair (a,b) for minmax clipping, for which |a - b| is minimal (as usual |y| = max(y,-y) denotes the absolute value of a number y) . Thus RemoveGrain(mode= 9) is just a purely spatial variant of trbarry's ST Median filter. If mode=5, then that line pair (a,b) is chosen for minmax clipping, for which |x - y| is minimal (here x is the original luma value of the pixel and y=min(max(x, min(a,b)), max(a,b)) is the value obtained by minmax clipping). The modes 6,7,8 are intermediate modes between mode=5 and mode=9. mode=6 is closer to mode=5 while mode=8 is closer to mode=9 and mode=7 is right in the middle between mode=5 and mode =9. Mode 5 preserves thin lines including the two end points. Mode 6-8 also preserve thin lines, but end points may get lost (the likelyhood of such a loss increases with the mode number). Fizick has extended mode 5-9 to the temporal domain in his plugin DeGrainMedian. Because there are now 26 instead of 8 neighbour pixels, these extension are necessarily slower. Nevertheless the temporal extension makes a lot of sense. Mode 18 (added in version 0.9) has preserves thin lines often also with the two end points, but it should be clearly inferior to mode 17 as far as compression is concerned.
Beginning with version 0.6 we have also added a fast implementation of the most important 3x3 convolution as mode 11. If y(i,j) denotes the luma of the pixel with coordinates i,j, then mode 11 replaces y(i,j) by (4*c(i,j) + 2*(c(i-1,j) + c(i+1,j) + c(i,j-1) + c(i,j+1)) + (c(i-1,j-1) + c(i-1,j+1) + c(i+1,j-1) + c(i+1,j+1)) + 8)/16 (+8 is necessary for proper rounding). Thus the all pixels are blurred vertically and horizontally with a (1/4,1/2,1/4) kernel. The builtin Blur(1) claims to do the same, but it really doesn't. Mode 12 (added in version 0.7) is a significantly faster version of mode 11, which is slightly less precise (the difference between both is always <=1). Thus, unless you are pedantic, you should always use mode 12 instead of 11. In version 0.7 the two bob modes 13 and 14 have been added. Mode 13 leaves the bottom field unchanged and interpolates the top field. Mode 14 leaves the top field unchanged and interpolates the bottom field. The interpolation in mode 13, 14 is similar to Trbarry's weird bob, which is part of Trbarry's Tomsmocomp. However, instead of optimising over 5 line pairs we optimise only over 3 line pairs. More precisely, c(i,j) is replaced either by (c(i-1,j-1) + c(i +1,j+1)+1)/2 or (c(i-1,j+1) + c(i +1,j-1)+1)/2 or (c(i,j-1) + c(i,j+1)+1)/2, depending on which of the three distances |c(i-1,j-1) - c(i +1,j+1)|, |c(i-1,j+1) - c(i +1,j-1)|, |c(i,j-1) - c(i,j+1)| is minimal. In Trbarry's weird bob (c(i-2,j-2) + c(i +2,j+2)+1)/2 and (c(i-2,j+2) + c(i +2,j-2)+1)/2 are possible interpolation values as well. Thus weird bob is more edge sensitve, but also the likelihood of smart edge artifacts is higher and of course it is slower. Taking only 3 line pairs seems to be the best compromise to us. Together with the filter TemporalRepair, described below, it may be used for builting motion adaptive deinterlacers. Beginning with version 0.8 we have added modes 15, 16. They have the same edge sensitivity as modes 13,14 but the quality is somewhat higher and the speed somewhat lower.
Which mode is the best for denoising? As far as compression is concerned, my benchmarks so far give the following mode ranking: 4,17,9,8,3,7,6,2,5,1, but modes 4 and 17 really stand out. As far as artifacts are concerned, we have unfortunately almost the reverse mode ranking: 1,5,2,18,6,7,8,17,3,4,9. Modes= 1,5,2 are the risk free modes, the modes 18,6,7,8,17 show low to moderate artifact risk (usually some softness) and modes 3,4,9 have severe problems with thin lines. Mode 9 has less artifacts than mode 4, but when they occur they look a lot more ugly. Mode 17 is my clear personal favorite. As far as compression is concerned it is fairly close to the leader, mode 4, and I have only seen some softness but hardly any visable artifacts. The frame width of the input clip must be > 36 (SSE version) or > 68 (SSE2 version).
1. As already mentioned, RemoveGrain cannot change border pixels. To get rid of these, cropping should be done after RemoveGrain. On the other hand, for RemoveDirt cropping should be done before such that DCT blocks and RemoveDirt blocks are the same. Thus, if RemoveGrain is combined with RemoveDirt cropping should be done at best between RemoveGrain and Removedirt.
2. Although RemoveGrain always makes a lot of unaligned memory access aligning frames nevertheless has a positive performance impact. Thus crop with align=true, if you need to crop before RemoveGrain.
3. If mode=0 (resp. modeU=0, resp. modeV=0), then the Y plane (resp. the U plane, resp. the V plane) is simply copied from input to output. If even mode < 0 (resp. modeU < 0, resp. modeV < 0) then for the respective planes nothing is done at all (not even a copy operation). This may be used for faster processing of black&white clips. For instance RemoveGrain(mode=8, modeU= -1).RemoveDirt(grey= true) is the fasted way to process a black&white clip by the RemoveGrain/RemoveDirt combo. Because modeV inherits the value -1 from modeU, RemoveGrain doesn't process the chroma planes and RemoveDirt subsequently sets the chroma planes uniformly to 128. If you use modeU=-1, you must add a chroma later through the builtin filters MergeChroma or GreyScale.
4. RemoveGrain is fairly fast. It makes perfect sense to iterate it for better denoising. For instance, RemoveGrain(mode=2). RemoveGrain(mode=2) is still a fairly defensive denoiser, which doesn't destroy thin lines.
5. If grain is too crude, RemoveGrain can only partially remove it or cannot remove it at all. Because in such a case the source is quite poor anyway, it is a good idea to shrink. Then also the grain gets smaller and RemoveGrain may be able to erase it. In general, downsizing should be done before RemoveGrain while upsizing should be done after RemoveGrain.
6. As described above, some modes, especially mode 3,4,9, have a thin line problem. Now YUY2 and especially YV12 have a buitlin thin line problem for the chroma, because several pixels share one chroma value. This problem is amplified if RemoveGrain is applied to the chroma. It should be kept in mind, that RemoveGrain has roughly four times the strength, if it is applied to the YV12 chroma rather than the luma. This is the main reason for edge softness caused by the more conservative modes 18,6,7,8,17. Thus to avoid compounding the thin line problem, it is a good idea to use modes without a thin line problem for the chroma even if mode 3,4,9 is used for the luma. For instance RemoveGrain(mode=4, modeU=2) uses the high compression mode 4 for the luma and the low artifact mode 2 for the chroma. On the other hand the chroma is often particularily noisy (especially if the clip originates from a video tape), which speaks against applying a more conservative mode for the chroma.
Clense uses the same simple cleaning technique as RemoveDirt, but without any protection against artifacts. Thus, if p[i,j],c[i,j],s[i,j] denotes the luma of the pixel with coordinates i,j on the previous, the current and the subsequent frame, then c[i,j] is replaced by min(max(c[i,j], min(p[i,j],s[i,j])), max(p[i,j],s[i,j]))), i.e. temporal minmax clipping. Clense is a very brutal cleaner and cannot be used without Repair or some other artifact remover. Nevertheless if dirt or grain overlaps with similar dirt or grain on only one adjacent frame, this overlap cannot be cleaned. This remark is particularily important for grain (even invisable grain may have a very significant negative impact on compression). Thus it enhances compression quite a bit to remove this left over. The left over of Clense is usually significantly smaller than the original grain, whence Clense + RemoveGrain is considerably more effective and is able to remove much cruder grain than RemoveGrain alone, but of course there is a severe artifact problem.
Clense accepts two arguments. The first is the input clip and the second is the boolean variable grey (grey=false is the default). If grey=true, then there is no chroma processing at all, i.e. the chroma planes contain random values and the greyscale filter has to be applied at some later stage. The grey variable is ignored for clips with color spaces other than YV12.
Beginning with version 0.9 there are also the filters BackwardClense and ForwardClense. They are primarily for clensing at sharp scene changes in the RemoveDirt script function. ForwardClense is for the first frame of a new scene and BackwardClense is for the last frame of a scene. The usage is the same as Clense.
Beginning with version 0.6 we have added the Repair plugin. It is generated from the same source code as RemoveGrain, but serves a very different purpose. Instead of removing grain, Repair should remove artifacts introduced by previous filters. It does so by comparing the video before these filters were applied with the video after application of these filters. Thus Repair requires two clips as input. The first clip is the filtered and the second the unfiltered clip. Otherwise Repair uses the same variables as RemoveGrain, but modes 11-17, which do not make sense for Repair are disabled. Thus there are currently 10 Repair modes.
Repair works very similar as RemoveGrain, but unlike RemoveGrain, where the center pixel and the neighbour pixels are both from the same frame of the clip, in Repair the center pixel (i.e. the pixel to be changed) is taken from the first clip (i.e. the filtered clip) and the neighbour pixels are taken from the second clip (i.e. the unfiltered original clip). For instance Repair(filtered, original, mode= 1) clips the luma of a pixel of the clip "filtered", by the luma minimum and the luma maximum of the neighbour pixels of the pixel in the clip "original". Thus Repair limits the amount of change from clip "original" to the clip "filtered". This is clearly some kind of artifact removal. The higher the mode (from 1 to 4 only) the stronger the artifact removal. With mode=4, Repair(filtered, original, mode=4) is fairly close to RemoveGrain(original, mode= 4, limit= 0). As described above the center pixel of the original clip would be ignored. This doesn't make sense. We have therefore made changes to include also the center pixel of the original clip for all Repair modes. For instance, Repair(filtered, original, mode=1) clips the center pixel of the filtered clip by the minimum of all the 8 neighbours and the center pixel of the original clip on one side and by the maximum of all the 8 neighbours and the center pixel of the original clip on the other side. In particular, Repair(input, input, mode=1) doesn't change at all the clip input. Without inlcluding the center pixel of the original clip, Repair(input, input, mode= 1) would have been identical to RemoveGrain(input, mode= 1) or Undot(input). In general, we have RemoveGrain(input, mode=n) = Repair(input, input, n+1) for n=0,1,2,3.
In version 0.9 we have added new Repair modes, which are derived from RemoveGrain modes in a different way. To this end, let "f" be the luma value of the center pixel of the filtered clip (which is to be repaired) and "o" be the luma value of the same pixel in the original. Then as in the corresponding RemoveGrain mode, two neighbour pixels with luma values, say, "n1", "n2" are selected and "f" is clipped at min(n1,n2,o) and max(n1,n2,o). Of course, the chroma is treated the same way. Such a Repair mode can be derived from any RemoveGrain mode except modes 11-16. We have done this for mode 1-6, 17, 18 only. 11-18 are the corresponding repair modes. Thus Repair modes 11-16 correspond to the RemoveGrain modes 1-6, while Repair modes 17,18 correspond to the RemoveGrain Modes 17,18. For mode 1 both methods for deriving Repair modes coincide, whence Repair(mode=1) and Repair(mode=11) are identical. (Repair mode 16 is of particular importance. It restores thin lines and there is good chance (but no guarantee) that even the end points are restored. It is currently the primary Repair mode for the RemoveDirt script.
Let us now discuss some examples for Repair. The first is a preliminary version of RemoveDust:
function RemoveDust(clip input, int _mode) { repmode = 16 clensed = Clense(input) rep=Repair(clensed, input, mode=repmode) return RemoveGrain(rep, mode=_mode) } |
Firstly Clense brutally removes all temporal dirt but also introduces many artifacts. Repair then removes these artifacts but also restores all bigger pieces of dirt. While most of the motion artifacts from Clense are removed by Repair, motion gets blurred quite a bit, but static areas are not touched. Finally RemoveGrain (I recommend mode=8, 17 or mode=4 for more compression) removes the left over from Clense. Blurring motion has a much more significant impact on compression than blurring static detail. On the other hand, the human eye can not really concentrate on motion detail and may even get "nervous" from motion details. Thus in my view RemoveDust is much better than the usual "blur all a little" approach of most denoisers. If you want a more a agressive Removedust, you may choose repmode= 1 and/or apply RemoveGrainbefore Repair. Repair(mode= 9) is very interesting. It restores all thin lines destroyed by clense. Nevertheless is compression is remarkably good (the output size is usailly less than 5%-20% above that with Repair(mode= 2) or Repair(mode= 5) . I recommend to use Repair only with modes 2, 5-9. Repair may also be used to tame sharpeners:< /P> < P>
function ModerateSharpen(clip input, float amount) { repmode = 16 sharpened = Sharpen(input, amount) return Repair(sharpened, input, mode=repmode) } |
Unfortunately the name LimitedSharpen is already used. Thus we had to call the above script function ModerateSharpen.  We obtained the following compression results (5000 frames, high quality source, 696x448, xvid 1.0.1 with quantiser 5):
19.260.837 Bytes without any filtering 85.830.020 Bytes Sharpen(1.0) 41.743.528 Bytes ModerateSharpen(1.0), repmode=1 34.255.894 Bytes ModerateSharpen(1.0), repmode=2 |
Also ModerateSharpen(1.0) especially with repmode=9 looks a lot better than Sharpen(1.0). Mode 10 is not suitable for taming sharpeners.
In the same way as Repair is derived from RemoveGrain, TemporalRepair is derived from Clense. While Repair is a spatial filter most suitable for removing artifacts of temporal filters like Clense, TemporalRepair is a temporal filter, primarily useful for restoring static (non moving) details of spatial filters like RemoveGrain. Especially RemoveGrain(mode= 4) looses its "washed out" look, if combined with TemporalRepair:
function RemoveTemporalGrain(clip input, int _mode) { rg = RemoveGrain(input, mode=_mode) return TemporalRepair(rg, input) } |
mode=4 is definitely recommended for RemoveTemporalGrain. Of course compression of RemoveTemporalGrain(4) output is worse than that of RemoveGrain(mode= 4) but it is well above the more defensive RemoveGrain modes and fully preserves static detail. For RemoveDust the situation is even better:
function RemoveDust(clip input, int _mode) { repmode = 2 clensed = Clense(input) rep=Repair(clensed, input, mode=repmode) rg = RemoveGrain(rep, mode=_mode) return TemporalRepair(rg, rep) } |
Note that instead of the original clip "input", now the intermediate clip "rep" is taken as the second clip. Compared with the previous version of RemoveDust in the current (not yet the final) version RemoveGrain has just been replaced by RemoveTemporalGrain and softness is reduced substantially if mode=4. Static detail even remains untouched and compression doesn't suffer too much. Though the edges of objects are even sharpened, if these objects are not to tiny, RemoveDust looks somewhat soft and tiny moving objects may be whiped out, a good part of the softness is only psychological, because virtually all the natural flicker in a film, which doesn't contain any information, but to which the human eye is quite used to, is removed. If such flicker is reintroduced by a sharpener after decoding by a player (with ffdshow for example), then RemoveDust clips should look quite crisp again.
TemporalRepair can also be used to build a reasonably fast, high compression, threshold free, no motion no change deinterlacer:
function RGDeinterlace(clip input) { rg = RemoveGrain(input, mode=12) return TemporalRepair(rg, input) } |
While RemoveGrain(input, mode=12) deinterlaces every pixel, TemporalRepair restores the static areas. This is rather typical for TemporalRepair, if a filter messes up the static parts of a video these can be restored nicely - without any threshold artifacts - by TemporalRepair. RGDeinterlace is a blur deinterlacer, which behaves similar to AlignFields(mode=2) but without any flicker, because there are no thresholds. If on one frame the "motion value" of an area is slightly above the threshold and on the next it is slightly below, then this area is deinterlaced on one frame and unchanged on the other. This usually shows up as flicker, which is typical for threshold based motion adaptive deinterlacers. It has quite negative effects on compression. Unfortunately, in this form RGDeinterlace performs quite badly in my ticker tape test, because TemporalRepair restores to much. Though the artifacts in the ticker tape test are only visable with 400% magnification in VirtualDub, they indicate that the deinterlacer is not compression optimal, i.e. compression is wasted without gaining image quality. To improve the performance in this test I have added the integer variable smooth to TemporalRepair in version 0.7. If smooth=0, the default value, then TemporalRepair performs as before. If smooth= 1 (currently only the values 0 and 1 are allowed), then TemporalRepair is no more purely temporal, because it takes into account also the temporal fluctuation of the 8 neighboring pixels. Consequently, TemporalRepair "repairs" less with smooth=1 than with smooth=0, but still the resulting deinterlacer cannot pass the ticker tape test satisfactorily (though it is better). Thus we have introduced smooth=2,3 in version 0.9 for this purpose. Mode 2 restores less than mode 0,1,3 and is therefore the safest mode for deinterlacing and gives fairly good compression results. Mode 3 is also suitable for deinterlacing and should be chosen, if one aims to preserve a maximum amount of detail. In the ticker tape test mode 2 performs better than mode 3 and a lot better than mode 1, but it is still not artifact free. However, it competes well with most other motion adaptive deinterlacers (usually threshold based) in this test. One has to remove the remaining artifacts by another application of RemoveGrain. In this way one gets the following deinterlacer:
function RGDeinterlace(clip input) { rg = RemoveGrain(input, mode=12) rg2 = TemporalRepair(rg, input, smooth=2) return RemoveGrain(rg2, mode=2) } |
However, this deinterlacer obviously no more adheres to the no motion no change principle. Another idea to improve the deinterlacer is to iterate TemporalRepair. In this way we get the following deinterlacer:
function RGDeinterlace(clip input) { rg = RemoveGrain(input, mode=12) rg2 = TemporalRepair(rg, input, smooth=2) return TemporalRepair(rg, rg2, smooth=2) } |
This version of RGDeinterlace is again no motion no change and performs better in the ticker tape test. However, with smooth > 0 TemporalRepair is substantially slower than with smooth=0 and iteration doesn't make sense with smooth=0. It also makes sense to use TemporalRepair(smooth=1) within the RemoveDust script.
The above deinterlacers are all blur deinterlacers. To obtain sharp deinterlacers one has to apply RemoveGrain with the new mode 14 first. For example
function RGSDeinterlace(clip input) { rg = RemoveGrain(input, mode=16).RemoveGrain(mode=12) return TemporalRepair(rg, input, smooth=2) } |
Clense and TemporalRepair both have the optional grey variable. If grey= true, then Clense and TemporalRepair leave the chroma completely unprocessed. It is not even copied. Thus one has to use the builtin filter Greyscale at some later stage to clean out the random values from the chroma. This option is only valid for YV12 clips and is ignored for other color spaces. The same effect can be achieved for the filters RemoveGrain and Repair if one sets modeU= -1. Here is the RemoveDust filter as I use it now:
function RemoveDust(clip input, int "repmode", int "_smooth", bool "_grey") { default(repmode, 16) default(_smooth, true) default(_grey, false) clmode = 4 clensed = Clense(input, grey=_grey) rep=Repair(clensed, input, mode=repmode, modeU=_grey ? -1 : repmode ) rg = RemoveGrain(rep, mode=clmode, modeU=_grey ? -1 : clmode) return TemporalRepair(rg, rep, grey=_grey, smooth=_smooth) } |
function RGDeinterlace(clip input, bool _grey) { rg = RemoveGrain(input, mode=12, modeU=_grey ? -1 : 12) rg2 = TemporalRepair(rg, input, smooth=2, grey=_grey) return RemoveGrain(rg2, mode=2, modeU=_grey ? -1 : 2) } |
function RGBob(clip input, bool _grey) { top = RemoveGrain(input, mode=16, modeU=_grey ? -1 : 16) bottom = RemoveGrain(input, mode=15, modeU=_grey ? -1 : 15) return Interleave(top, bottom) } |
Until version 0.7 the above filters did also support the color spaces YUY2, RGB24 and RGB32. It did so by converting these interleaved formats internally into a planar ones, then the planar intemediate formats were processed as YV12 and finally the intermediate planar formats were converted back into the original interleaved formats. If ,as in some of the above scripts, many instances of the above filters are used, these conversion routines resulted in enormous overhead. Also the conversion routines were not optimised. Beginning with verison 0.8 we have dropped support for the interleaved color spaces in favor of their planar analogs. For Avisynth planar YUY2, RGB24 or RGB32 frames look just like the ordinary interleaved frames of these color spaces. However, the organization of the data on these frames is very different. The not yet released plugin SSETools (preliminary versions are included in the RemoveGrain package) contains the basic filters Interleaved2Planar and Planar2Interleaved. For YV12 these filters do absolutely nothing. For the other color spaces, Interleaved2Planar converts the interleaved frames into frames with planar data organisation and Planar2Interleaved reverses this conversion. Thus Interleaved2Planar().Planar2Interleaved and Planar2Interleaved.Interleaved2Planar(). leaves any frame unchanged. Thus Planar2Interleaved and Interleaved2Planar are lossless filters. For YUY2 the filters Interleaved2Planar() and Planar2Interleaved are highly optimised and shouldn't cost much more than a simple bitblt. Now, in order to prohibit unexperienced users from applying the above filters to interleaved color spaces, we have added the boolean variable planar to RemoveGrain, Repair and TemporalRepair. If planar=false (the default value), then these filters reject YUY2, RGB24 and RGB32 frames. Only if planar=true, then these filters accept YUY2, RGB24 and RGB32 input, but always assume that the data are organised in a planar way. If you use planar=true with ordinary interleaved input, you get garbage. Clense and MCClense like most other purely temporal filters work the same way with planar and interleaved input. Thus these filters have no planar variable and work both with planar and interleaved input. TemporalRepair(smooth=0) is also purely temporal and thus accepts YUY2, RGB24 and RGB32 input even with planar=false. On the other hand,TemporalRepair(smooth=1) has also spatial aspects and therefore rejects any YUY2, RGB24 and RGB32 input with planar=false. In the not too distant future there should be a web site www.PlanarYUY2.de.tf , which will list filters and there compatibility with planar YUY2, RGB24, RGB32.
As an example for the application of Planar2Interleaved and Interleaved2Planar we give a version of RemoveDust, which works for YV12, and all interleaved color spaces (but not planar YUY2, RGB24, RGB32):
function RemoveDust(clip input, bool grey, int "repmode", int "_smooth") { default(repmode, 16) default(_smooth, true) clmode = 4 input = Interleaved2Planar(input) clensed = Clense(input, grey=_grey) rep=Repair(clensed, input, mode=repmode, modeU=_grey ? -1 : repmode ) rg = RemoveGrain(rep, mode=clmode, modeU=_grey ? -1 : clmode) return TemporalRepair(rg, rep, grey=_grey, smooth=_smooth).Planar2Interleaved() } |


The objective of our project was to visualize international relations at a global level over time to highlight geospatial and chronological patterns.
We used the Global Database of Events Language and Tone (GDELT). It consists of news media data from around the world in 100+ languages updated daily, with a total size of over 3.5 TB. We wrote some BigQuery to query for the data we wanted.
We queried for all worldwide events between January-December 2016 that were covered by more than 250 news articles, aggregated them by the involved countries (who did it and who it ocurred to) and computed an average Goldstein score (normalized by number of articles that covered the event) for each country pair.
We used D3 and Datamaps to plot an arc between each (one way) country pair that had sigificant media coverage of events involving the two countries. The color of the arc represents the normalized Goldstein score for a country pair on a scale of red-yellow-green, which stands for negative-neutral-positive respectively.
Click on a country to only show the arcs for that country and click on the sea to view all arcs again. The sliders below the map can be used to filter the arcs by month and their normalized Golstein value.


You are in a middle of taking an exam.
Logging out will automatically finish your exam.
You haven't answered all the questions,
Are you sure to finish your exam?
Hi, {{loggedInUser.firstName}} {{loggedInUser.lastName}}!
{{assessment.name}}


Treasury of precious thoughts gained from books.
Hello {{currentReader.displayName}}!
Welcome to MyBooks service.
Here you can maintain own interesting thoughts, quotations, comments and notes you found while reading a book.
This is for everyday or occasional readers, people who likes reading and want to record interesting and useful thoughts.


Carl Spackler: So I jump ship in Hong Kong and I make my way over to Tibet, and I get on as a looper at a course over in the Himalayas.
Angie D'Annunzio:A looper?
 So, I tell them I'm a pro jock, and who do you think they give me? The Dalai Lama, himself. Twelfth son of the Lama. The flowing robes, the grace, bald... striking. So, I'm on the first tee with him. I give him the driver. He hauls off and whacks one - big hitter, the Lama - long, into a ten-thousand foot crevasse, right at the base of this glacier. Do you know what the Lama says? Gunga galunga... gunga, gunga-lagunga. So we finish the eighteenth and he's gonna stiff me.  And he says, "Oh, uh, there won't be any money, but when you die, on your deathbed, you will receive total consciousness." So I got that goin' for me, which is nice.


In today’s lesson we’re going to be we’re going to look at 3 composition techniques to easily take portraits at home.
The activity for today is to shoot a portrait (of yourself, a friend, a pet or even a stuffed animal) and experiment with one of the three techniques that we taught you - negative space, symmetry and playing with textures and shadows.
Good luck everyone.


Places We Have Been
Places Blake Has Been
Philadelphia
Alameda
Cleveland
More Info:
Places Stormi Has Been
South Dakota
Portland
Japan
More Info:


[gecode-users] Disjunctions in gecode
Mikael Zayenz Lagerkvist
zayenz at gmail.com
Thu Sep 21 08:31:45 CEST 2006
On 9/21/06, Dhananjay Thiruvady <drthi1 at student.monash.edu> wrote:
> Hi All,
>
> I have a problem with the disjunctions in gecode. If I have a variable x (0...5) and I post the following constraint:
> tt(x>2 || x>3)
>
> I would expect now x (3...5), but the domains do not change.
When posting disjunctions in Gecode, they are handled via reification.
Reified constraints typically have very weak propagation, in many
cases the propagation will not amount to more than checking that the
constraint does in fact hold.
There are techniques, such as constructive disjunction for example,
for stronger propagation of disjunctions, but these are not available
currently in Gecode. Also, these techniques are typically not very
efficient.
> Also is
> there a way to say:
> b1 = 1 if x>2
> b2 = 1 if x>3,
>
> then I could use operator||(b1,b2) and reduce the domain to x(3...5).
This would only be an explicit way of creating the reified constraints
show above, so there would be no difference in propagation.
Hope this helps,
Mikael
--
Mikael Zayenz Lagerkvist, http://www.ict.kth.se/~zayenz/
More information about the gecode-users
mailing list


| Category: algorithms | Component type: function |
template <class ForwardIterator, class LessThanComparable> pair<ForwardIterator, ForwardIterator> equal_range(ForwardIterator first, ForwardIterator last, const LessThanComparable& value); template <class ForwardIterator, class T, class StrictWeakOrdering> pair<ForwardIterator, ForwardIterator> equal_range(ForwardIterator first, ForwardIterator last, const T& value, StrictWeakOrdering comp);
The first version of equal_range returns a pair of iterators [i, j). i is the furthermost iterator in [first, last) such that, for every iterator k in [first, i), *k < value. j is the furthermost iterator in [first, last) such that, for every iterator k in [first, j), value < *k is false. For every iterator k in [i, j), neither value < *k nor *k < value is true. [2]
The second version of equal_range returns a pair of iterators [i, j). i is the furthermost iterator in [first, last) such that, for every iterator k in [first, i), comp(*k, value) is true. j is the furthermost iterator in [first, last) such that, for every iterator k in [first, j), comp(value, *k) is false. For every iterator k in [i, j), neither comp(value, *k) nor comp(*k, value) is true. [2]
int main() { int A[] = { 1, 2, 3, 3, 3, 5, 8 }; const int N = sizeof(A) / sizeof(int); for (int i = 2; i <= 4; ++i) { pair<int*, int*> result = equal_range(A, A + N, i); cout << endl; cout << "Searching for " << i << endl; cout << " First position where " << i << " could be inserted: " << result.first - A << endl; cout << " Last position where " << i << " could be inserted: " << result.second - A << endl; if (result.first < A + N) cout << " *result.first = " << *result.first << endl; if (result.second < A + N) cout << " *result.second = " << *result.second << endl; } }The output is:
Searching for 2 First position where 2 could be inserted: 1 Last position where 2 could be inserted: 2 *result.first = 2 *result.second = 3 Searching for 3 First position where 3 could be inserted: 2 Last position where 3 could be inserted: 5 *result.first = 3 *result.second = 5 Searching for 4 First position where 4 could be inserted: 5 Last position where 4 could be inserted: 5 *result.first = 5 *result.second = 5
[1] Note that you may use an ordering that is a strict weak ordering but not a total ordering; that is, there might be values x and y such that x < y, x > y, and x == y are all false. (See the LessThan Comparable requirements for a more complete discussion.) Finding value in the range [first, last), then, doesn't mean finding an element that is equal to value but rather one that is equivalent to value: one that is neither greater than nor less than value. Note that equal_range may return an empty range; that is, it may return a pair both of whose elements are the same iterator. Equal_range returns an empty range if and only if the range [first, last) contains no elements equivalent to value. In this case it follows that there is only one position where value could be inserted without violating the range's ordering, so the return value is a pair both of whose elements are iterators that point to that position.
[3] This difference between Random Access Iterators and Forward Iterators is simply because advance is constant time for Random Access Iterators and linear time for Forward Iterators.


Help Is On The Way.
Toggle navigation
Home
Show Listings
I Have a Need
Log Out
Categories
Needs near you
Category
Baby
Adults
Region
Local
National
Sort by
Date
Urgency
About
The team
Contact us
Apps coming soon to
iPhone
Android
Follow Us
Twitter
Facebook
Company
Terms of use
Privacy


--- layout: default title: Buildr Integration ---
Domgen is typically configured so that each time a project is built, domgen loads repository and generates any required artifacts as part of the build process. Domgen provides some rake tasks to support this use case. These rake tasks detect the presence of Buildr and if present will offer additional functionality as part of the build.
Assuming domgen is braided into the
vendor/plugins/domgen
directory, the developer will typically create a
tasks/domgen.rake
file. This file will define a task that loads the repository
definition. By convention the repository definition is stored in a file named
architecture.rb
in the base directory of the project.
The developer can also pass a parameter to the define_load_task
method that
specifies the location of the repository definition.
If a task generates code or assets that are compiled or packaged within a particular
project then then the method Domgen::Build.define_generate_task
should
be invoked within the block that defines the project. The first parameter is an array
of generators that are to be run. These task will generate
the source code within the projects base directory and will automatically add the source
to the project paths as appropriate. The tasks will have a name that is prefixed by the
project tasks.
If however the generator is independent of any particular project, it is more appropriate to
define the generator task in the tasks/domgen.rake
. As the generators are outside
of projects it is also required that additional configuration be supplied. Projects with a
database typically define the generators for sql in the following manner:
| :repository_key | The name of the repository to run generators for. If there is a single repository then the repository name is the default value. |
|---|---|
| :target_dir | The base directory in which to generate artifacts, relative to the buildfile. Defaults is derived from buildr project path and :key value. |
| :key | The string name used when naming the task and used if deriving a default directory. Defaults to the local project name if a buildr project is specified or the task is defined within a project else it defaults to 'default'. |
| :buildr_project | The associated buildr project that is used to derive defaults and is extended to add paths to when source is generated. Defaults to the containing buildr project or nil. |
Due to legacy reasons, the XMI generator uses a separate method to define the xmi task.
{% highlight ruby %} Domgen::Build.define_generate_xmi_task {% endhighlight %}| :repository_key | The name of the repository to run generators for. If there is a single repository then the repository name is the default value. |
|---|---|
| :filename | The name of the xmi file that is generated by task. Default is derived from the buildr project if specified, or the top level project if there is only one and the task is defined outside the project. |
| :key | The string name used when naming the task and used if deriving a default directory. Defaults to the local project name if a buildr project is specified or the task is defined within a project else it defaults to 'xmi'. |
| :buildr_project | The associated buildr project that is used to derive defaults. Defaults to the containing buildr project or the top level project if there is only one. |


Xbox Game Pass Ultimate
Xbox Live Gold and over 100 high-quality console and PC games. Play together with friends and discover your next favorite game.
Join NowLearn about scholarships Microsoft has created for tech-obsessed high school seniors and join us at in-store events near you
Learn MoreExpress yourself powerfully with a thin, light, and elegant design, faster performance, and up to 11.5 hours battery life.
SHOP NOWXbox Live Gold and over 100 high-quality console and PC games. Play together with friends and discover your next favorite game.
Join NowShop the latest Surface for Business collection at Microsoft Store.
SHOP NOWDrop by any Microsoft Store for LinkedIn workshops and expert guidance. Plus, get a new headshot at our photo studio.
Learn MoreLearn how Kubernetes works and get started with cloud native app development today.
Get StartedGet inspired by how Corie Brown, one of the UK’s most famous voices, is helping build a more accessible workplace
Learn moreFollow Microsoft


--- layout: page title: Spatiotemporal Simulation of Invasive Species Spread subtitle: Dynamic stochastic simulation models to predict areas of potential infestation by invasive termites meta-title: "Francesco Tonini - Work" ---
Spatially-explicit simulation models can help state and local regulatory agencies to predict both the rate and direction of the spread of an invasive species from a set of surveyed locations. Such models can be used to develop successful early detection, quarantine, or eradication plans based on the predicted areas of infestation. Individual-based models (IBMs) are often used to replicate the dynamics of complex systems and are both able to incorporate individual differences and local interactions among organisms, as well as spatial details. In this work, we introduce a new stochastic lattice-based model for simulating the spread of invasive termites over a landscape and compare it to a recently published stochastic individual-based approach, based on the same ecological parameters, with the goal of improving its computational efficiency. The two modeling frameworks were tested over a homogeneous landscape with randomly located sources of infestation. Further, the setting of a case study of an invasive termite, Nasutitermes corniger (Motschulsky), was used to simulate the spread of the species in Dania Beach, Florida, U.S.A., and the results of the proposed model were compared with an earlier application of the IBM over the same area. The results show that the extent of the infested areas predicted by the new lattice-based model is similar, thus comparable, to the individual-based model while improving the computation time significantly.
Project Website:
https://doi.org/10.1016/j.ecoinf.2014.09.011
http://dx.doi.org/10.1603/EN12325
Deployment Architecture:
R, ESRI ArcGIS
Language:
R, Python


|
G24Lib
A set of convenient classes, functions and other utilities mainly for quickly writing numerical code. Provides relatively easy integration with CUDA, general Runge-Kutta methods, linear equation solvers and more.
|
An interface for the object held in the g24_lib::split_member_array
so they can be changed through an operator=
.
More...
Public Member Functions | |
| CUDA_HOS_DEV | const_split_member_accessor (const split_member_array *a, const indexer i) |
| Construct a split_member_accessor. The end-user probably shouldn't need to do this, but... More... | |
| template<g24_lib::Definitions::default_unsigned_indexer I> | |
| CUDA_HOS_DEV const auto & | get () const |
Returns the i-th element of the struct using the ordering from g24_lib::class_info::true_type , but with 0-indexing. More... | |
| template<g24_lib::Definitions::default_unsigned_indexer I> | |
| CUDA_HOS_DEV const auto & | get_element () const |
Returns the i-th element of the struct using the ordering from g24_lib::class_info::true_type , including 1-indexing. More... | |
| CUDA_ONLY_HOS | operator flat_imitation_struct< Type > () const |
| CUDA_HOS_DEV | operator Type () const |
An interface for the object held in the g24_lib::split_member_array
so they can be changed through an operator=
.
Definition at line 1011 of file split_array.h.
|
inline |
Construct a split_member_accessor. The end-user probably shouldn't need to do this, but...
Definition at line 1033 of file split_array.h.
|
inline |
Returns the i-th element of the struct using the ordering from g24_lib::class_info::true_type
, but with 0-indexing.
Provided for compatibility with structured bindings.
Definition at line 1054 of file split_array.h.
|
inline |
Returns the i-th element of the struct using the ordering from g24_lib::class_info::true_type
, including 1-indexing.
Definition at line 1041 of file split_array.h.
|
inline |
Definition at line 1059 of file split_array.h.
|
inline |
Definition at line 1064 of file split_array.h.


This form allows you to plot a single field from a model/experiment or compare
one field to itself or another. The instructions below explain each of the sections
of the form.
Field(s)
- From the Collection, select the Model, Experiment, Ensemble Member and Variable you wish to plot
- Optionally, select a second data set you wish to compare with the first.
- Click the Select Data button to bring up the options for analyzing and plotting the data you've selected.
If you make any changes in the Field(s) section, click the Update Data Selection button to refresh
the options below.
Area Statistics
- If you are plotting pressure level data, select the Level you wish to use
- You can plot either the Average, the Anomaly, the Standardized Anomaly or
(for precipitation) the Percent of Normal over the region.
Anomalies are computed relative to the 1981-2010 average for the ensemble mean.
- For times, depending on the configuration you can either select:
- Choose a starting and ending month over which to average the data.
- Choose a starting and ending year over which to average the data. Alternatively, type in
a list of years that are separated by commas (e.g. 1983, 1986, 1997)
- If you are doing a comparison, select the years for the second dataset.
OR
- Select from a list of pre-defined times.
- Select the Region that the data will be averaged over. You can select from a predefined
list of regions, or select Custom. If you choose custom, you can draw a region on the map
(use Shift+drag to draw the region), or enter the North, South, West and East coordinates of
the region.
Plot Options
- If you are doing a comparison between datasets, you can either plot the result as a difference
between the two fields, or as 2 separate plots.
- You can select to plot the data as an image (Map) or load it into Google Earth.
- For some fields, you can select the output units for the plot.
- You can select a mask for the data to block out either ocean or land areas.
- You can plot the output as color-filled contours and optionally overlay contour lines and labels.
- You can override the default contour intervals for the plots by specifying
a contour interval, minimum and maximum values.
Make Plot
- After you have made your selections, click the Make Plot button to generate the image or
load the data into Google Earth.
- If you selected Map for the plot type, an image will be displayed to the right of the
data selection region. You can click on the image to get a full sized version of it. There
is link below the image which allows you to download the image to your computer.
- If you selected Google Earth for the plot type, then the result will be loaded into the
Google Earth Plugin. You may have to download the plugin for this to work. If you do not have
the plugin, or you want to load the image into Google Earth outside the browser, then you can
use the Download Google Earth (KMZ) file link to download the file to your computer.
- There are links for downloading the files that were used to create the images and to
download all files (images, kmz, etc)


This page takes a string as a parameter, checks to see whether it contains a unix timestamp or natural date and returns the same date in both formats.
https://fcc-timestamp-otmeek.c9users.io/December%2015,%202015
https://fcc-timestamp-otmeek.c9users.io/1450137600
{ "unix":<PHONE_NUMBER>, "natural": "December 15, 2015" }


@(title: String, jsFile: String = "")(content: Html)
learn more about your New York City apartment building


The "Just In Time" Theory of User Behavior
I've long believed that the design of your software has a profound impact on how users behave within your software. But there are two sides to this story:
Encouraging the "right" things by making those things intentionally easy to do.
Discouraging the "wrong" things by making those things intentionally difficult, complex, and awkward to do.
Whether the software is doing this intentionally, or completely accidentally, it's a fact of life: the path of least resistance is everyone's best friend. Learn to master this path, or others will master it for you.
For proof, consider Dan Ariely's new and amazing book, The (Honest) Truth About Dishonesty: How We Lie to Everyone – Especially Ourselves.
Indeed, let's be honest: we all lie, all the time.  You think we should be completely honest all the time? Yeah. Good luck with that.
But these healthy little white lies we learn to tell ourselves have a darker side. Have you ever heard this old adage?
One day, Peter locked himself out of his house. After a spell, the locksmith pulled up in his truck and picked the lock in about a minute.
“I was amazed at how quickly and easily this guy was able to open the door,” Peter said. The locksmith told him that locks are on doors only to keep honest people honest. One percent of people will always be honest and never steal.
The purpose of locks, the locksmith said, is to protect you from the 98% of mostly honest people who might be tempted to try your door if it had no lock.
I had heard this expressed less optimistically before as
10% of people will never steal, 10% of people will always steal, and for everyone else … it depends.
The "it depends" part is crucial to understanding human nature, and that's what Ariely spends most of the book examining in various tests. If for most people, honesty depends, what exactly does it depend on? The experiments Ariely conducts prove again and again that most people will consistently and reliably cheat "just a little", to the extent that they can still consider themselves honest people. The gating factor isn't laws, penalties, or ethics. Surprisingly, that stuff has virtually no effect on behavior. What does, though, is whether they can personally still feel like they are honest people.
This is because they don't even consider it cheating – they're just taking a little extra, giving themselves a tiny break, enjoying a minor boost, because well, haven't they been working extra specially hard lately and earned it? Don't they of all people deserve something nice once in a while, and who would even miss this tiny amount? There's so much!
 They are everywhere. If laws don't work, if ethics classes don't work, if severe penalties don't work, how do you encourage people to behave in a way that "feels" honest that is actually, you know, honest? Feelings are some pretty squishy stuff.
It's easier than you think.
My colleagues and I ran an experiment at the University of California, Los Angeles. We took a group of 450 participants, split them into two groups and set them loose on our usual matrix task. We asked half of them to recall the Ten Commandments and the other half to recall 10 books that they had read in high school.
Among the group who recalled the 10 books, we saw the typical widespread but moderate cheating. But in the group that was asked to recall the Ten Commandments, we observed no cheating whatsoever. We reran the experiment, reminding students of their schools' honor codes instead of the Ten Commandments, and we got the same result. We even reran the experiment on a group of self-declared atheists, asking them to swear on a Bible, and got the same no-cheating results yet again.
That's the good news: a simple reminder at the time of the temptation is usually all it takes for people to suddenly "remember" their honesty.
The bad news is Clippy was right.
In my experience, nobody reads manuals, nobody reads FAQs, and nobody reads tutorials. I am exaggerating a little here for effect, of course. Some A+ students will go out of their way to read these things. That's how they became A+ students, by naturally going the extra mile, and generally being the kind of users who teach themselves perfectly well without needing special resources to get there. When I say "nobody" I mean the vast overwhelming massive majority of people you would really, really want to read things like that. People who don't have the time or inclination to expend any effort at all other than the absolute minimum required, people who are most definitely not going to go the extra mile.
In other words, the whole world.
So how do you help people who, like us, just never seem to have the time to figure this stuff out becase they're, like, suuuuper busy and stuff?
You do it by showing them …
- the minumum helpful reminder
- at exactly the right time
This is what I've called the "Just In Time" theory of user behavior for years. Sure, FAQs and tutorials and help centers are great and all, but who has the time for that? We're all perpetual intermediates here, at best.
The closer you can get your software to practical, useful "Just In Time" reminders, the better you can help the users who are most in need. Not the A+ students who already read the FAQ, and studied the help center intently, but those users who never read anything. And now, thanks to Dan Ariely, I have the science to back this up. Even something as simple as putting your name on the top of a form to report auto insurance milage, rather than the bottom, resulted in a mysterious 10% increase in average miles reported. Having that little reminder right at the start that hey, your name is here on this form, inspired additional honesty. It works.
Did we use this technique on Stack Overflow and Stack Exchange? Indeed we did. Do I use this technique on Discourse? You bet, in even more places, because this is social discussion, not technical Q&A. We are rather big on civility, so we like to remind people when they post on Discourse they aren't talking to a computer or a robot, but a real person, a lot like you.
When's the natural time to remind someone of this? Not when they sign up, not when they're reading, but at the very moment they begin typing their first words in their first post. This is the moment of temptation when you might be super mega convinced that someone is Wrong on the Internet. So we put up a gentle little reminder Just In Time, right above where they are typing:
Then hopefully, as Dan Ariely showed us with honesty, this little reminder will tap into people's natural reserves of friendliness and civility, so cooler heads will prevail – and a few people are inspired to get along a little better than they did yesterday. Just because you're on the Internet doesn't mean you need to be yelling at folks 24/7.
We use this same technique a bunch of other places: if you are posting a lot but haven't set an avatar, if you are adding a new post to a particularly old conversation, if you are replying a bunch of times in the same topic, and so forth. Wherever we feel a gentle nudge might help, at the exact time the behavior is occurring.
It's important to understand that we use these reminders in Discourse not because we believe people are dumb; quite the contrary, we use them because we believe people are smart, civil, and interesting. Turns out everyone just needs to be reminded of that once in a while for it to continue to be true.
| [advertisement] Stack Overflow Careers matches the best developers (you!) with the best employers. You can search our job listings or create a profile and even let employers find you. |


This was a less-than-official meeting. We gathered in Shutz library. The primary goal was to perform a brief analysis of Team 8's Project 1 code to see what features were missing that we should implement as well as determine what bugs if any exist.
The primary goal of the meeting was not accomplished. Our team has no experience compiling C++ with external libraries, nor with complex makefiles so we spent a great deal of time trying to determine how to compile the code so that we could test it. After a few hours of reviewing references and some naive makefile trial and error it was decided that the best course of action would be to consult with Kurt Slagle tomorrow(2-20-18).
February 20th, we met briefly on discord, on February 21st, we spend the last 20 minutes of lecture discussing the project. The goal of this meeting was to ensure everyone is on the same page and to create a clear path forward for our planning stage.
In terms of goals from the first meeting(2-19), no rules were established, no meeting facilitator was established. Kurt & Ron repackaged Team 8's project 1 code into a compilable repository on GitHub.


Welcome to ORB
Your friendly JavaScript language handler for multi language projects.
You can select one of these languages below to see ORB in action.
English
Brazilian Portuguese
Spanish


Having slippery grips can be very inconvenient and could be detrimental to your game. You may consider buying some new grips however with a simple trick you can make your old golf grips tacky again...
Having the right mental approach to a round of golf is just as important as having the correct physical approach. How to have the right mental approach?...
Bryson DeChambeau silenced a lot of people after his win last week at the Rocket Mortgage Classic. Previously he had been a top 10 machine, notching up 3 top 10’s in the last 3 starts since the PGA Tour return from lockdown. But last week he claimed a 3 shot win over Matthew Wolff which was his first win in almost 2 years....
Selecting the correct golf ball for your golf game can be tricky, especially when there are so many different types out there.  So to make it easier for you, here is a list of some of the best golf balls of 2020...
They say golf is 60% mental and 40% physical. So mastering your mind is possibly one of the biggest priorities you should have when trying to improve. I assume you have often been told to...
The golf think tank is a golf blog designed to create more discussion around the mental side of the game...


GANESH R
1355 15th cross · Kumarswamy Layout, Bangalore · 560078 ·
<EMAIL_ADDRESS>I am experienced in leveraging agile framework. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition.


{% extends 'rb/emails/base_email.html' %} {% block subject -%} [Room Assistance Request][{{ event.room.full_name }}] {% block subject_text %}{% endblock %} {%- endblock %}