text:
The Washington University Athletic Department employs licensed athletic trainers that are skilled in the prevention, recognition, treatment and rehabilitation of athletic injuries.
We have state-of-the-art facilities with a highly regarded, experienced staff of physicians and certified athletic trainers who work directly with our student-athletes. Our goal is to provide each student-athlete with efficient access to high quality medical care.
Who to Contact
We understand that having a son or daughter away from home can cause concern for their health and well being. Please feel free to contact us at anytime you have questions about their medical care.
For prompt attention, please report all injuries to the athletic trainer as soon as possible.
|Mary Collins, MS, ATC
Assistant Athletic Trainer
|Volleyball, Cross Country, Swimming & Diving, Women's Golf, Softball, Track & Field
|Grant Rohrig, MS Ed, ATC
Assistant Athletic Trainer
|Football, Men's Basketball, Men's Tennis, Baseball
|Men's Soccer, Women's Soccer, Women's Basketball, Women's Tennis
|Matthew Matava, MD
|Team Physician
|Mark Halstead, MD
|Team Internist
|Matthew Smith, MD
|Team Physician
Medical Coverage
Washington University in St. Louis provides comprehensive medical services for WUSTL student-athletes while participating in the intercollegiate athletics program as well as medical supervision of the activities associated with the athletic program. The University operates a fully equipped sports medicine facility with therapeutic modality, exercise, and rehabilitation equipment.
Certified athletic trainers, working under the direction of physicians, are the primary health care providers responsible for the prevention, evaluation, care, treatment, and rehabilitation of athletic injuries. Athletic trainers provide daily support to injured athletes throughout the recovery process. Athletes have access to sports medicine services in the sports medicine facility without personal charge.
Pre-season physical examination screenings, scheduled visits to evaluate injured athletes on campus, and home football game coverage are some of the services provided by WUSTL. All services provided on campus are at no cost to the student-athlete. Individuals with significant injuries are referred through a network of team physicians associated with Washington University School of Medicine.
If an athlete requires additional medical services at the physician's office or hospital, they are billed through their personal insurance. If surgical treatment is required for an injury, this should also be covered through their personal insurance. Any cost associated with an injury occurring outside a department sponsored activity is the responsibility of the athlete.
Athletic Insurance Coverage
The University carries NCAA Group Basic Athletic Accident insurance with a maximum medical expense limit of $75,000. The plan covers all intercollegiate student athletes for bodily injury sustained during practice or play of an intercollegiate sport, travel to or from practice or play of an intercollegiate sport, or off-season physical conditioning of an intercollegiate sport which is authorized, organized and directly supervised by a Department of Athletics representative.
The insurance coverage of the University and the Department of Athletics operates on the basis that the health and accident insurance carried by the student and/or the student's parents is the primary coverage and will be applied first for medical, dental, and hospital services. The Washington University Athletic Department insurance will then be applied after the primary benefits disposition. The Department of Athletics will pay charges for authorized services for bodily injuries sustained during participation in intercollegiate athletics within the NCAA Group Basic Athletic Accident insurance deductible. There are no benefits for pre-existing injuries or general medical conditions.
The student athlete may be responsible for the cost of treatment and rehabilitation where services are arranged without prior knowledge and approval of the Department of Athletics. Students injured while participating in the athletic department program should report the injury to the athletic training staff and obtain services through our network of physicians that are affiliated with the Washington University School of Medicine.
Student Health Insurance Coverage
The SHS health plan through UHS does not cover medical costs related to injuries sustained in the practice or play of NCAA intercollegiate sports, and while WU carries NCAA Group Basic Athletic Accident insurance, the student and parents could still be responsible for substantial out of pocket medical costs not covered by the NCAA policy, should costs exceed usual and customary charges or services that are provided are determined by the insurer as not medically necessary.
Clearance for Participation
All athletes must receive a physical examination annually from the Washington University Sports Medicine Staff before the start of their competitive season. First year participants require a comprehensive physical examination while returning athletes must compete a review of their current health status.
We would like you to use the following directions to log on to the WUSTL athletic medical record website. You will also use this website throughout your athletic career to make appointments with your athletic trainer and receive information regarding sport injuries and rehabilitations.
Login directions
Go to: Wustl2.atsusers.com (do not use www.)
Athlete ID: New
Password: New
Database: atswustl (should be filled in)
First, please complete all of your general demographic and contact information. For your athlete ID, please use your school issued student ID. You will also be using this ID and password to check-in when you come into the athletic training room. If you do not have any medical alerts, allergies, or medications please write none in the indicated box. Once you have filled out the general information, click the verify athlete information button and then click save.
Once you have clicked save, the other tabs should appear at the top of your screen. You DO NOT need to add any information in the medical history or the immunization/paperwork tabs. You then need to fill out the proper information in the tabs listed Insurance, Contacts, Forms and eFiles (tabs 3, 4, 5, and 6). These forms must be completed by July 1.
Insurance: Click on the green (+) Add button to enter your insurance information. If your insurance company does not appear in the insurance company drop down menu, then exit out of the pop-up and click on the "Add a new insurance company." If you have the student health insurance through the university, choose the "United Healthcare – Student Health Services" as your insurance company.
Contacts: Again click the green (+) Add button to enter your emergency contact information. Please add all of your legal guardians.
Forms: Fill out the orthopedic history and ppe medical history to the best of your ability. You are able to save the form, and then come back and finish it later. Only female athletes need to fill out the female athlete form.
eFiles: You will need to download each form individually, sign it, and then upload it again. It is acceptable to type your signature on the forms. Only female athletes need to fill out the female athlete form.
Other requirement is:
- Student-athletes that are trying out need to complete an entrance physical exam at home prior to arriving on campus. Please fax the form - Doctor's Physical Exam form (tryouts only) - that is provided to: (314) 935-8789.
Visiting Teams Policy
The athletic training staff at Washington University would like to take this opportunity to welcome you and acquaint you with some of the medical services we provide to visiting teams. To handle your needs, a certified athletic trainer will be available and our orthopedist will be on call.
The athletic training facility will be available prior to practice and contests or special arrangements can be made upon advance request. Water, ice and coolers will be provided while splints, stretchers and crutches are available should the need arise.
The Washington University athletic training staff can administer taping and treatment services, but we require that you provide your own supplies. The therapeutic modalities available include: whirlpools, hydrocollator, ultrasound and electrical muscle stimulation. Athletes are required to have a written prescription for electrical modality treatments.


text:
SWTChart is a chart component which has following basic functionalities.
Open Source
SWTChart is free open source software distributed under Eclipse Public License v1.0 (EPL v2.0).
Based on SWT
SWTChart is based on SWT. If you are planning to implement your application with Swing/AWT, maybe you should choose another chart component. However, if you implement Eclipse plug-ins or SWT-based standalone applications, SWTChart would be one of the candidates to choose.
High Extensibility
All of widgets in SWTChart are composed of SWT, so that you can easily hock listeners to widgets, and also you can easily extend the functionality without expertise of AWT. As an example extending SWTChart, SWTChart Extension is bundled together with SWTChart, so that you may get some idea how to extend it. SWTChart Extension has an ability to zoom with mouse or to scroll with arrow keys. Of course, instead of extending with public API, you can directly customize SWTChart itself, since SWTChart is open source software.
High Performance
SWTChart provides an ability to handle large data size of series. Even if showing 1,000,000 data points, repainting or resizing chart panel doesn't take long time. The internal algorithm is not to simply sample the data with a certain interval but to thin out only the data which doesn't make sense to show in current screen resolution. Therefore, even if there are prominent peaks in large data points, the peaks won't be lost in the screen.
Light Weight
SWTChart has minimum basic functionalities. SWTChart doesn't have any dependencies other than SWT, and even JFace is not required. The file size of deliverable (SWTChart jar file) is around 180KB including source code. This would make it easy for you to distribute your application.
Jun 5, 2019: Eclipse SWTChart 0.7.0 has been released

subset: commoncrawl


text:
Ridiculous accusations of impropriety answered
Posted 07-20-2016 at 10:26 AM by Anemone
seeing proof of a nearly 40 year old male desperately taking to the internet to tell vulnerable 16 year old girls
To back up this assertion, I gave several quotes from other people in that same post, all backing up the fact that she did not appear to be underage, many also calling her jailbait:
DieFledermouse 3 points 9 months ago:
This is exactly how Chris Hanson catches predators.
This is exactly how Chris Hanson catches predators.
[deleted] 1 point 9 months ago
You could fool so many people....8.5/10 + look 18+ imo
You could fool so many people....8.5/10 + look 18+ imo
IAmAndWillAlwaysBeMe 0 points 9 months ago
I don't think it was because of looks since you look hot. i just can't believe you are 16.
I don't think it was because of looks since you look hot. i just can't believe you are 16.
The sub has an anti-creepy-pm policy. If I was PM'ing girls to hit on them, I would have been banned already.
Your reddit allies have already combed through my entire reddit history on two accounts, over 5 years now of activity, and the worst you can find it calling a single girl jailbait in a colorful way, and that is not my only post on /r/amuiguly either.
You are unable to show anything like a pattern of hitting on women there, much less underage girls, many of which I have commented on, on /r/amiugly before.
I wish the girl had not deleted her photos so you could see just how laughingly wrong you are. No one would call someone a pedophile for calling a girl that looks 18+, I thought about 22, that she is attractive. That girl undoubtedly gets hit on by adults in the real world who cannot see the fact that she is 16 as easily as we can in that thread. And again, I was not hitting on her, it is not a sub for hitting on women, and I have never hit on anyone in that sub across all my replies.
I mixed a compliment to her looks with the fact that she doesn't remotely look underage. I also don't think my age has anything to do with it. If I were 21 or 61 one, an attractive women is an attractive women. If she had looked like a scrawny 13 year old pre-teen, you would have an actual point, but that was not who I was calling hot in the slightest.
Now again, what exactly is your problem with that.
This is an incredibly weak accusation, yet you have harped on it for months. Either it confirms you as a hater, which I admit is likely. Or you are one of those people who attack strongly what you hate about yourself. Maybe both.
As for me, I have nothing to be ashamed of.
Posted in UncategorizedViews 41859 Comments 0
Total Comments 0


text:
Ethicurean Reviews New Documentary 'Food Fight,' Underwhelmed
The Ethicurean, a blog devoted to the organic and sustainable eating ethos, is predisposed to love a film like Food Fight (not to be confused with Foodfight!), where the premise rests on the same mantra. But get ready for a plot twist—they didn't love it.
Here's where I bite the nice hands who fed me the DVD review copy. We three found ourselves squirming restlessly in our pews. Too many putative saints were being paraded past us on litters of glistening lettuces, and the familiar hymns sounded off key in their new arrangements.
Ethicurean founder Bonnie Powell watched a preview copy (screenings are just in Los Angeles currently) and while she found it beautiful visually, said it could have used "a little less food, and a little more fight." Media savvy icons like Alice Waters, chef Dan Barber, and activist Michael Pollan were very celebritized, whereas no-name farmers didn't get much love.
All products linked here have been independently selected by our editors. We may earn a commission on purchases, as described in our affiliate policy.


text:
A.S. Affordable Textbook Program
Associated Students (A.S.) recognizes the need for students that receive Financial Aid to be provided the opportunity to access affordable textbooks. Barnes & Noble, SJSU, has collaborated with the Financial Aid and Scholarship Office to provide a more sustainable and affordable approach of Textbook Rental.
To participate in the A.S. Affordable Textbook Program, students are required to present a copy of their financial aid award letter to the A.S. General Services Center upon request. The A.S. General Services Center shall proceed in verifying students ID number, award letter, class schedule and course list each semester. Only textbooks that are "rentable" according to the SJSU Bookstore are eligible for subsidy by Associated Students.
The A.S. General Service Center will issue a voucher for students to redeem at the SJSU Bookstore:
- Voucher will provide access to Rental Textbooks up to $60 maximum per eligible student per semester
- There is no limit to the number of textbooks as long as the total does not exceed $60
- Rental Textbooks are open to General Education, Upper Division and Graduate level students
- All Rental Textbooks must be returned to the SJSU Bookstore according to the date and requirements set by the bookstore
- Penalties will apply for non-returned, or damaged textbooks including but not limited to fees and holds on academic records
- Students will be required to sign a Rental Agreement for each textbook and provide a credit card or USBank linked Tower Card as payment and collateral in the event that a book is not returned or has been damaged
Contact A.S. General Services for more information - 408.924.6200


text:
Early last month, China's top environmental authority, the State Environmental Protection Administration (SEPA), announced a decision to suspend the approval of all new industrial projects in 13 cities and industrial parks along four major rivers that are suffering from severe water pollution
Early last month, China's top environmental authority, the State Environmental Protection Administration (SEPA), announced a decision to suspend the approval of all new industrial projects in 13 cities and industrial parks along four major rivers that are suffering from severe water pollution—the Hai, Huai, Yangtze, and Yellow. Pan Yue, vice president of SEPA, says the move was the agency's final "˜trump card' to stem the rampant violation of environmental laws and regulations by some local industries, given its limited authority. He says there is an urgent need to set up a cross-sectoral and cross-departmental mechanism to prevent and control pollution in China's major river basins.
SEPA is giving priority to integrated strategies to restore and protect China's rivers in the wake of several serious pollution incidents that threatened the safety of local drinking water—including most recently the massive algae outbreak in eastern China's Lake Tai. In May, the agency launched a 10-year pilot project to rehabilitate the Songhua River in the northeast, one of the country's most polluted waterways and the victim of a major chemical spill in November 2005. Measures include restricting the load of pollutants discharged into the river, raising the environmental bar for high-polluting industries, accelerating the shutdown of energy-intensive and high-polluting industrial facilities, conserving drinking water source areas, and constructing local wastewater treatment plants, according to Xinhua News.
China set up water resources management institutions for its seven major river systems as early as the 1950s. But only recently has the government begun to embrace the idea of "integrated river basin management," an approach that combines the conservation, management, and development of water and related resources across sectors within a river basin. The success of this approach typically requires long-term agreement and participation by all major stakeholders, the integration of polices across sectors, decision-making at various levels, and a transparent planning framework. In China, however, the lack of public participation, transparency, and cooperation across government departments all pose major obstacles.
According to the 2006 China environment report, as much as 26 percent of the water in the nation's seven major rivers is considered "V level" or worse, meaning that it is not even suitable for irrigation. China's water crisis has become a critical challenge for the government as well as for the entire society, says Pan. He believes that establishing an integrated river basin management mechanism that will coordinate administrative power, market forces, and public participation is the key to tackling China's current water woes.
China Watch is a joint initiative of the Worldwatch Institute and Beijing-based Global Environmental Institute (GEI) and is supported by the blue moon fund.


text: So after a long hiatus Mixology Monday has returned. With a big thank you to Paul Clarke of Cocktail Chronicles for running it the past 6 years. Now the torch has been passed to Frederic Yarm of Cocktail Virgin Slut. The theme for this event, which is hosted by Frederic is as follows: For this… Continue reading Mixology Monday – Equal Parts


text:
PSYC 391: Practicum (2-4 credits)
Course Description: Practicum is an experiential learning course designed to provide students with the opportunity to gain experience at sites in the community where psychology is applied. Practicum students witness first hand how the knowledge, methods, and models they have studied in the classroom apply in real life situations. The hands-on, practical experiences that are provided in practicum are especially valuable for students who intend to seek employment in a human service area upon graduation. Additionally, students considering graduate school in a therapy-related or human service field will also benefit greatly from these structured field experiences. For questions about practicum, please contact the practicum supervisor (Dr. Benjamin Jeppsen).
A few local agencies that have partnered with for practicum:
- Augustana University – HR office, student affairs office
- Avera Behavioral Health Center – Inpatient psychiatric services
- Children's Home Society – Residential treatment center for children
- Compass Center – Sexual and domestic violence programs
- Help!Line Center – Information and crisis help center
- Keystone (Canton, SD) – Adolescent addictions programs
- Minnehaha County Human Services – Indigent, homeless, and/or addicted populations
- Sioux Falls School System – Occupational therapy services
- Summit Oaks Center – Residential treatment center for adolescents
- VA Hospital – Inpatient/outpatient work with veterans
- Volunteers of America – Multiple programs (mostly adolescent based)
Practicum Requirements:Practicum is reserved for students with junior or senior standing to assure the student has sufficient background in psychology. Practicums are arranged with the practicum supervisor and students may not enroll for credit until the practicum has been arranged. Practicum can be taken for 2-4 credits. Each credit requires 40 hours of in-agency time under the supervision of agency staff. A typical 3-credit practicum requires 120 hours of time in-agency (approximately 9-10 hours per week during a semester). Practicum schedules are arranged in conjunction with the practicum agency based on students' schedules and the structure of the agency. Practicum students are required to keep a daily journal of practicum experiences and complete a paper relating to their practicum experience.
Some agencies require fingerprint background checks and/or certification of immunization record. This process can take several weeks. Expenses associated with this (if any) are to be paid by the student.
Enrollment in practicum is selective. It is based on the availability of practicum sites and an appropriate match between the student and available sites. Interested students must apply and a practicum must be arranged before you are allowed to enroll in the course. Please direct questions regarding practicum to the practicum supervisor (Dr. Benjamin Jeppsen).
If you are interested in doing a practicum, you need to do the following:
- Complete the application form and return it to Dr. Jeppsen (MC 132).
- Contact Dr. Jeppsen to arrange a meeting to discuss your practicum interests in more detail.
- Give a copy of the recommendation checklist to two faculty members who are willing to provide a recommendation for you (at least one of the faculty members should be from outside of the psychology department). Ask them to return the completed checklist directly to Dr. Jeppsen as soon as possible (MC 132).
We will do our best to place you into a practicum that matches your interests. This may take a bit of time as we are working with outside agencies. We will keep you updated regularly regarding the status of your application. You will be cleared to enroll in practicum only when a practicum experience has been officially arranged.


text:
Cicerone Chat: Beer Festival, Pairings and Events with Bill Carl
Bill Carl is a Certified Cicerone, the beer equivalent of a master sommelier. (Though it doesn't quite have the historical heft—the Cicerone Certification Program was started in 2007, while the Court of Master Sommeliers was established three decades before that.) He's one of only two on Oahu.
We chatted with Carl for his current favorite beer and food pairings, and some tips for this week's upcoming beer festival:
Favorite latest beer and food pairings?
"I did a beer and burger pairing with Pint and Jigger's stout burger, paired with a Deschutes Black Butte Porter. When you do burgers, especially on the grill, they have a nice char. For a darker beer, the grain has been roasted more, so the flavors can really match up with the burger. Nothing against wines, but they can't really do that."
For a really porky, rich ramen, like Lucky Belly's Belly Bowl, with pork belly, bacon and sausage, Carl recommends a rauchbier from the beer list. "Rauchbier in Germany means 'smoked beer,' and the grain is roasted over beech wood, so it takes on a really smoky flavor. It's a wheat beer; wheat adds a really nice kind of softness on the mouthfeel."
What he's excited to drink at the upcoming Real Beer Festival:
- Breakside Passionfruit Sour: "a low-alcohol wheat beer brewed with lilikoi. The use of lactic acid gives the beer a pleasing acidity similar to a lilikoi-ade."
- Christian Drouin Poire: "It's going to be hot out there, so a Perry is going to hit the spot! This is a very traditional Perry from Normandy, France, fermented with wild yeast for a dry, complex, thirst-quenching finish."
- Thornbridge Halcyon: "You have to try an IPA when at a beer fest. This English-style, American-inspired Double IPA is full of hops but not so heavy, and perfect for outdoors."
- Beers from San Diego's Hess brewery and Karl Strauss: "I always want to try something that's not available locally."
Real Beer Festival will be pouring more than 60 craft beers, with food from Duke's, Pint and Jigger, Poke Stop and more. $60, August 16, Find the full line up of beers at facebook.com/RealBeerFestival2013. Buy tickets here.
Upcoming beer events with Bill Carl:
- Meet the Experts at Bar 35, tonight: Every second Tuesday, Bar35 explores beers with "the pros." This week, it's IPAs.
5 to 7 p.m., drop-ins welcome
- Beer Versus Wine dinner at Lucky Belly, August 13: For each course, Carl and a sommelier will choose a beer and wine, respectively, and "duke it out for who has a better pairing," he says.
$60/person, at the time of this writing, only 5:30 p.m. seatings were left, 531-1888
- End of Summer Beer dinner at 12th Ave Grill, August 18: Five courses and nine different beers from breweries including Dogfish Head, Clown Shoes and Big Island Brewhaus.
$80/person, 6:30 p.m., 12thavegrillendofsummerbeerdinner.eventbrite.com


text:
Merridun, an Antebellum mansion listed on the National Register of Historic Places, is surrounded by shady oaks and century old magnolias and is located in the gently rolling upstate region of South Carolina. The nine-acre property is located in the tranquil community of Union, South Carolina. The mansion, although very secluded, is only 3-4 blocks from the main section of downtown Union. We invite you to make Merridun your home away from home. Join us in a small Southern college town where you are offered the opportunity to savor life at a more leisurely pace. Look at the beautiful colannaded homes General Sherman missed. See the South in its colorful splendor - blooming azaleas, magnolias and wisteria.
HistoricStay.com Has Launched!
HistoricStay.com is a human-curated, invitation only
presentation of select, distinctly historic lodging accommodations,
including bed & breakfasts, inns, hotels and lodges worldwide.
Historic lodging facilities (Stays) are demonstrably
significant to world history with respect to their architecture,
engineering, archeology or culture, as well as their location,
design, materials, workmanship, feeling or association.
Historic bed & breakfasts, inns, hotels and lodges offer
travelers a truly unique and memorable lodging experience.
They provide visitors a genuine opportunity to
connect with the past, while enjoying restful lodging,
excellent cuisine, gracious hospitality and more.
Sadly, countless historically significant structures
have been (and continue to be) lost forever.
Many of those that endure, do so largely because of the
vision, passion and dedication of devoted and enterprising
proprietors, companies and others, who (usually after great effort
and expense) offer them as living, interactive lodging facilities
reflecting the rich historical fabric within which they are woven.
Discover Historic Stays
When you travel, use HistoricStay.com
to discover Historic Stays
in and around your destination(s).
Enrich your life today:
Make It An Historic Stay!
Welcome Historic Stay Owners & Management
For details on having your
Union, South Carolina Historic Stay
presented on HistoricStay.com
kindly email:
- Historic Stay Name
- Historic Stay Website Address
- Contact Name
- Contact Telephone Number
Vertical Market Portals


text: ContractorTools helps construction contractors quickly create estimates, invoices, and payments on an iPhone or iPad and sync them with QuickBooks Online. You can also sync between multiple people within your company using the iPhone, iPad, or Mac versions of the app. We know how difficult it is to manage a contracting business, and our goal is to make your life easier. FEATURE SUMMARY • Estimating • Change Orders • Credits • Draw Schedules • Invoicing • Payments • Job Templates • Custom Costbooks • Craftsman costbooks (optional in-app purchase) • Sync with QuickBooks Online • Sync between multiple users and multiple devices • Full support for international currencies and units QUICKLY CREATE PROFESSIONAL ESTIMATES AND WIN MORE JOBS • ContractorTools takes care of the paperwork so you can focus on your work. • Create an estimate at the job site and have your customer sign it on your iPhone or iPad. • Email a PDF estimate to the customer directly from your iPhone or iPad. • Win more jobs by creating professional estimates in minutes instead of hours. SYNC WITH QUICKBOOKS AND ELIMINATE REDUNDANT DATA ENTRY • Create an invoice and collect a payment at the tap of a button. • Sync your estimates, invoices, and payments to QuickBooks Online. • Eliminate hours of redundant data entry. • Your bookkeeper will love you! INSTANT ACCESS TO 40,000 COST ITEMS WITH CRAFTSMAN COSTBOOKS • Subscribe to the Craftsman costbooks (optional), and access 40,000 construction cost items. • Costs are localized to your area based on your zip code in the US or your postal code in Canada. FULLY FUNCTIONAL OFFLINE – SYNCS TO THE CLOUD WHEN ONLINE • ContractorTools is a native app that is fully functional without an internet connection. • Keep working in a basements or at remote job sites. • Your data automatically syncs to the cloud when you're online. We're dedicated to providing outstanding customer support, so if you have any questions, feel free contact us any time at email@example.com or (888)802-1040. PLANS AND PRICING Download the app, create an account, and try it FREE for 30 days. Choose from 3 different plans, based on your needs. • Basic: $9.99 per month • Essentials: $19.99 per month • Pro: $49.99 per month • Craftsman costbooks: $9.99 per month The prices above are in US dollars. If you're outside the US, you can see the prices for each plan on the "Choose a Plan" screen within the app. The first 30 days are free. Payment will be charged to your iTunes Account at the end of the free 30-day trial. The subscription automatically renews unless auto-renew is turned off at least 24 hours before the end of the current period. You can manage your subscriptions and turn off auto-renewal in the Account Settings screen within the App Store. Privacy Policy: https://contractortools.com/privacy Terms of Use: https://contractortools.com/terms


text:
Big Ideas for Haskell
In a conversation last night, a friend and I talked about the following thought experiment:
If you had a few million dollars and a few years to spend on hiring/recruiting and leading a strike force to make some big improvements in the infrastructure of your favorite programming language… what would you do?
Note that the changes have to be to infrastructure. We aren't interested in language changes, which tend to get too much play already; but rather in the tools and fundamental libraries available to us. Here's my list for Haskell.
Project #1: Fix Dependencies in GHC/Cabal
Managing dependencies is a HUGE issue in Haskell right now. Any substantial software project seems to require nearly as much time managing the various versions of different dependent libraries as writing code. And there's one really big thing that can be done about it: don't expose dependencies from a library unless they are really, truly needed.
Let's look at an example. A gazillion different libraries use Parsec internally to parse various things from text. They use various different versions of Parsec. Even though there is no reason why two different versions of Parsec can't be used in the same program, still Cabal's dependency resolution will try very hard to avoid combining those two libraries together, just because of some inconsequential implementation details. Parsec isn't the only such package, either: QuickCheck, for years, split the Haskell world because various different packages depended on different versions of QuickCheck for their internal testing. The situation with mtl and transformers is a little more complicated, since it's possible in principle that libraries that depended on both actually needed the same versions; but poking around a bit reveals that for the most part, these libraries used mtl or transformers internally to build monads that could very well have been wrapped up in opaque newtype wrappers at the package boundary.
Basically, we have a lot of confusion between implementation dependencies, and exposed dependencies.
So this idea has two steps: Step #1, instead of just telling GHC about all of the packages your code depends on, you should be able to give it a list of hidden dependencies, and a separate list of exposed dependencies. It should check that any types accessible via exports of your package's exposed modules is in the list of exposed dependencies. Step #2, Cabal should get separate fields for exposed and hidden dependencies, and pass them along to GHC. And its constraint solver should be set up to never fail to install a package because of needing different versions of hidden dependencies.
I don't know an easy way to measure this, but my strong suspicion is that this would save 80% of the time Haskell programmers currently spend on maintaining the dependencies of large Haskell projects. It would be a huge obstacle to real-world use of Haskell, removed in one fell swoop. It easily gets the #1 position on my list.
Project #2: Expand STM to External Systems
In my opinion, one of the most underestimated bits of potential in Haskell is software transactional memory. The STM library is, as Don Stewart so elegantly pointed out recently, done and working and quite usable. The problem is that it's just about transactional memory.
I'd say that from my experience, a very dangerous source of software bugs comes from the fact that so much software is written from the perspective of someone standing on the outside, looking in to a transaction. Managing transactions properly can be very difficult, and many programmers just plain get it wrong. I shudder to think of the number of web applications we trust every day that probably have data loss bugs because of poor transaction handling. This is something that desperately needs a solution.
One solution is database stored procedures, and they are used liberally for this purpose. The ability to write code that sees the world from inside of the transaction is, I think, at the root of why it's generally considered safer to write data-related code in stored procedures rather than in applications. But stored procedures are specific to a single data source. Most significant information stores provide some support for distributed transactions these days… but using them requires doing your data manipulation in application code, which means back outside the transaction. Very little work has been done on writing code at the application level that nevertheless lives inside of a (distributed) transaction. A big reason for that is that applications have always been effectful, and we've had no good way to take the side effects of the code in the application itself and manage even that central bit in a transaction-safe way.
Enter STM. Now we do have a nice, working, fully functional system for writing application level code that sees the world from inside of a transaction. STM was developed as a means of writing composable code that gets speedups from parallelism; I think that's missing the bigger picture. Speedups from parallelism are nice, but what STM really gives us is a way to write composable code that's organized as concurrent processes acting on data with safety offered by transactions. The next step is to expand those transactions. I want to write code that makes changes to both a database and my data structures in memory, and have that code run as a transaction, which either succeeds or fails as a whole.
There are challenges here, to be sure: STM's crucial retry operation is unlikely to be supported by any kind of external transaction system, for example, and the transaction models of different external systems may be hard to bring together under a single interface (savepoints? nested transactions? isolation levels?). But even a simple lowest common denominator here would be a huge step forward.
I feel like Haskell has a huge opportunity here to be the first popular general-purpose languages in which it's possible to easily write and compose code that is really transaction-safe. It would be a true shame to miss the opportunity.
Project #3: Universal Serialization
This is cheating a little bit, because it's almost asking for a language feature… but I can get away with it because it doesn't actually require a change to the language: just exposing a somewhat magical new API from the compiler.
Basically, it's possible to take a lot of types in Haskell, and turn them into some kind of serialized form from which they can be recovered later. This is what Data.Binary (from the binary package) and Data.Serialize (from the cereal package) both do. But it's not possible for all types. First class functions, for example, cannot be serialized. It's not just that no one has written the code yet; in Haskell, it simply can't happen.
But in a magic library provided by a Haskell compiler, it definitely could happen.
You'd have to be willing to live with a few limitations: recompiling your code would most likely invalidate serialized first-class functions. The interpreter is an even harder challenge. Serialized values would need to embed checksums of various bits of the code, and I haven't even begun to think through which checksums would be needed. But it should be possible. After all, a closure is just a function pointer (to a function which has some offset in the compiled binary code) together with an environment consisting of values of other types. Throw in some smart handling of cyclic data structures based on a lookup table, and you've got something.
Even a half-baked attempt to make higher-order programming with functions and closures compatible with the existing world of SQL databases and binary network protocols would be a huge benefit.
15 CommentsLeave a Comment
Derek Elkins / Jan 3 2011 2:13 pm
See Clean for #3, it has been doing this for several years now. For example, http://www.st.cs.ru.nl/papers/2003/verm2003-LazyDynamicIO.abs.
Arthur van Leeuwen / Jan 4 2011 4:34 am
Ofcourse, the *big* problem that separates Haskell from Clean in this regard is the open world assumption, which Haskell does have, and Clean does not.
Basically, this means that Clean assumes that all code that will ever be run as part of the program was seen at the time of compilation. This means that it is possible guarantee that the particular numbering of types chosen is the same for all parts of the code.
With Haskell's open world assumption, numbering of types becomes a much harder problem. How do you consistently number your types (and thereby specify what the exact types of e.g. a higher order function are) in the case that there are multiple numbering passes?
Sandro Magi / Jan 4 2011 2:50 pm
I'm not sure what numbering passes you're referring to, but the standard way to designate code in open networks is via cryptographic identifiers. In this case, I would impose a total order on constructors making up a type (say, alphanumeric), then construct a cryptographic hash of the resulting type from its constructors. This also supplies versioning based on the shape of a type. Upgrades which change the shape are incompatible with existing code, upgrades which do not change the shape are compatible. Other hashing approaches with different tradeoffs are possible as well, for instance, adding legs keeps compatibility but changing or removing existing legs does not.
I agree whole-heartedly with the sentiment that every modern language should be able to serialize any construct in the language. This is absolutely necessary for long-running, robust distributed systems like web programs.
Johan Tibell / Jan 4 2011 4:22 pm
Any and all contributions to Cabal are a big boon to the community. Cabal has a large impact on productivity. For example, I'm really excited about what the new support tests will do for code quality. No more cut-n-pasting large Makefiles between projects just to run tests!
Jost Berthold / Jan 13 2011 5:36 am
Just stumbled over this post (from Haskell Weekly News).
About the serialisation, you might find be interested in this paper: Orthogonal Serialisation for Haskell, accepted for publication in LNCS.
In short: use a runtime system feature that exists in the parallel runtime system, and add some Haskell code on top to make it reasonably type safe. It has severe limitations (you already mention them, the recompilation is the most severe one) but it can be used for a few nice things even though.
Lemming / Feb 1 2011 2:59 am
Arbitrary instances for datatypes are also exported, thus you cannot simply hide a dependency on QuickCheck. If you do not need custom Arbitrary instances, you can import QuickCheck only in the test executable and disable building that executable and the QuickCheck dependency by default using a Cabal flag.
Anonymous / Jun 12 2011 9:21 am
This is going to be a controversial comment but Scala has all of these things.


text:
The Stock Market's Embarrassing Fall after the Fed Reneged on the Taper
Unlike nearly everyone else, I have argued that the Fed's latest round of "quantitative easing" is not why stock prices went up until recently, and that "tapering" Fed bond purchases would have had only a negligible effect on long‐term interest rates.
This was a testable hypothesis. If I was wrong, the Fed's unexpected decision to back away from its previously‐expected tapering of bond purchases would have been greeted by a significant, sustained rally in stock and bond prices. That didn't happen. Instead, stocks fell for at least five days in a row and bond yields barely budged until stocks swooned (triggering a modest flight toward safe havens).
Before the Federal Reserve's "surprise" at 2 p.m. on Wednesday September 18, nearly every financial reporter was confident the yield on 10‐year Treasuries had increased to 2.86 percent from 1.66 percent in early May, simply because Fed officials hinted in May that they might begin to slow the pace of bond‐buying by September. If that story had been true, we should have expected bond yields to retrace most of their rise as soon as the Fed removed that fear of the taper. Instead, the 10‐year bond yield ended the week of the Fed announcement at 2.75 percent – no lower than the average yield in August (2.74) and merely a trivial 11 basis points lower than the day before the Fed's surprise.
Financial analysts and reporters were likewise certain the stock market had been terrified about the possible taper before September 18. If that was true, stocks should have soared for days or weeks on the supposedly terrific news that a taper was off the table. On the contrary, U.S. stocks were rising briskly for many days before the Fed meeting, but have since fallen persistently. A few hours of speculative stock gains on Wednesday the 18th were more than erased by Friday the 20th and stocks kept falling the following Monday, Tuesday and Wednesday.
Reporters and analysts who claimed stocks had been shored up by quantitative easing were logically obligated to expect a stock boom from the Fed's message of no change. When stocks instead moved in the wrong direction, baffled reporters tried to blame their bad forecasts on mysterious "uncertainties" about the taper although there is obviously less uncertainty now than before.
Anyone who bases investment decisions on trendy theories that fail to predict what actually happens is either a poor journalist or a poor investor who pays undue attention to poor journalists. The market's thumbs down vote on the Fed's gutless decision to stick with quantitative easing provides added evidence that QE never helped stocks or the economy, and that ending such an obviously unsustainable policy will one day be welcomed as the good news that it really will be.


text:
JoeJoesCoffee necesitaba un nuevo diseño de otro y lanzó un concurso de diseño en 99designs.
Un ganador ha sido elegido entre 24 diseños de 6 diseñadores freelance.
Joe Joe's Coffee Roasters
I own a specialty coffee roasting business in MS, that is looking to make a push nationally via website sales, and a few wholesale accounts. I am a member of the Specialty Coffee Association of America's Roaster's Guild http://www.roastersguild.org Anyhow, I need a package label for our brown craft bag that will stick out. We aren't big enough yet to have custom printed bags. We will use Avery 5164 size labels on all 1 lb bags.
We carry very high end specialty coffees (still correcting links on our website). The new label and website will launch together.
This label needs to stand out amongst other coffees online and on the shelves. In short, packaging gets noticed.
Speciality coffee drinkers that are coffee snobs and those brewing great coffees at home. Generally, ages 31-61 with above average incomes, male. Doctors, lawyers, other professionals. Also the alternative hipster crowd is a consideration, but primarily I am gearing the company towards those interested in great wines, great foods, great coffees. 70% male vs female.
Not sure on this one, other than we must stick out. Our website is joejoescoffee.com Others I like are PT's Coffee, Counter Culture, Higher Grounds, Intelligentsia, Water Avenue Coffee. Back Porch Coffee Roasters.


text:
whenever I reply or compose a new email in Thunderbird, my personal account sends the email my default. I want to make it so that my school account is the default, but I don't know how to set that. Does anyone have any idea on how to fix it? I'm sure I'm just missing a button or box to check.
Thanks all!


text:
Washed up: Car wash owner defies water ban
On Thursday, September 19, the day the City of Charlottesville and the Albemarle County Service Authority ordered all car washes to close down, the sprays were still spraying in the bays of at least one local car wash.
Express Car Wash stayed open that day while its owner's lawyers investigated the constitutionality of the City's ruling.
"It is discriminatory that's clear," says Henry Weinschenk, owner of Express Car Wash on Seminole Trail within city limits.
Weinschenk says all the area car washes combined account for just 1/3 of one percent of the area's water use far less than other types of businesses. He believes his industry has been scapegoated for political purposes.
"If we were using 10 percent of the water, I could understand," Weinschenk says. "But to single us out for near extinction is patently unfair and un-American."
Dave Bascom, general manager at Clean Machine on Pantops in Albemarle County, agrees that the recent water restriction ordinances passed have elevated symbolism over substance.
Several months ago before any mandatory restrictions were put into place, Clean Machine spent $20,000 on new water recycling equipment, which enabled the business to increase its water recycling to "70-80 percent," according to Bascom. "We got to use it for about three weeks," he says.
"We know we're in a serious situation," he says. But closing car washes, he claims, "is a political thing."
City spokesperson Maurice Jones, however, says the decision was based on need. "It's not political at all," says Jones. "Car washes are something most people can do without."
Weinschenk, however, says he needs to keep his staff employed. With a monthly payroll of approximately $50,000, Express is known for its legion of yellow-shirted workers who swarm over cars like worker bees. Weinshenk says he plans to keep his long-term employees on including paying their health care and child care benefits– even if business drops precipitously.
But as a City business owner for the past 19 years with a wall of civic awards and letters of thanks to prove it Weinschenk says he considers the City's decision "a slap in the face." He points to hard numbers to make his case.
According to data from the City's data, Golden Corral, the buffet a few blocks away from Express Car Wash, used 525,030 cubic feet of water in 2001, compared to Express Car Wash's 410,080 cubic feet during the same period.
So what do people need more: all-u-can-eat or wash-n-wax? Weinschenk says the government shouldn't be making that decision.
"This is like the Soviet economy," he rages. "Eventually," he says, "somebody will have to decide whether it's better to make shoes than hats."
The alternative Weinschenk proposes? Rationing, in which all businesses and individuals are subject to harsh but equal cutbacks. It is the system used in Orange County where the drought conditions are even more severe than here in Charlottesville. "Rationing would work," says Weinschenk, "if there was true management in the city."
But Jones disagrees. "It's much more complicated to do it that way," he says. "The thing to remember is the rationing system would have a much more damaging effect on the economy."
For now, both Express Car Wash and Clean Machine have come up with ways to stay in business.
Weinshenk and his crew have come up with an alternative to traditional "wet washes." By Saturday, September 21, Express Car Wash had switched over completely to a "dry wash," in which just three quarts of bottled water which Weinschenk purchases from nearby K-Mart– are mixed with two ounces of a cleaning chemical.
Weinschenk estimates the cost of this process is approximately 35-50 percent higher than the wet wash method, and as a result Express has eliminated its lowest-priced cost wash. The cheapest is now $14.95, compared to $11.95 a week ago, and it's not suitable for heavily soiled cars.
Clean Machine began shipping in water on Tuesday, September 24, something Bascom says is possible only because of the efficiency of the new recycling equipment. But, he explains, he'll probably have to raise costs to cover the increased expenses. To his customers, he fears, "it will make us look bad."
The city, Jones says, is more than happy to see the car washes stay in business. "We not only encourage them [to find alternative methods]; we applaud them."
Whether the car washes will take any further legal steps to protect their business remains to be seen.
Bascom says he's not aware of immediate plans to sue the County, though he has heard some talk of it. And Weinschenk says it's unlikely that he would initiate a lawsuit. "At this time, no," he says. "Personally, it would bankrupt me." But, he qualifies, "If the [car wash] trade association decides to make this an issue, then maybe it will happen."
One thing is certain right now: If the drought doesn't end, car washes won't be alone in their suffering. As Albemarle County spokesperson Lee Catlin says, "This is not the end of the pain that the community is going to feel."Read more on: drought


text:
Rick Vegsund necesitaba un nuevo diseño de logotipo y lanzó un concurso de diseño en 99designs.
Un ganador ha sido elegido entre 72 diseños de 19 diseñadores freelance.
Stressfree Property Solutions
After 6 years in the Property Management business, I have learned that investors in rental property, either single family houses or Multi-Family, need a property management company that makes their lives as easy as possible at a fair price. They want service, advise and mostly dependable results. We have all the systems to take the stress out of being a landlord and handling any and all peices of Property Management, Tenant Issues, Leasing, Repairs and Maintenance. WE REMOVE THE STRESS.
Looking to target current and future landlords of single and multi-family properties who are looking for a full service company that produces the results that have been looking for.
I need a logo designed that will match the message of Stressfree. Be Creative. There can be an outline of a house in the logo, but not required. I am looking for a Logo that instills the feeling of Stress Free. Color choices are open to suggestions. I would like the logo to show we are serious and detailed for our customers so they can relax and be STRESSFREE.
Descubre cómo funciona un concurso de diseño u obtén más información sobre nuestros servicios de diseño de logo.


text:
Contributor(s): Than Garson
The present folder structure for THL can be viewed through a CGI script at http://www.thdl.org/cgi-tibet/thdl_struct.pl It starts at the root level, /thdl, and gives a progressively indented hierarchy of the THL folder structure. If the parameter "loc" is given set to the location (from /lv1) of a particular folder, the hierarchy of that folder is displayed. Thus,
displays the structure of the Art Collection's folder.
Each folder name in the hierarchy is also linked. Clicking on one of them will activate another script called, showfolder.pl. This script will display the contents of the selected folder. Sub-folders are listed first. Then, files. Both are listed alphabetically irregardless of capitalization. The showfolder.pl script also takes a "loc" parameter that contains the location (from /lv1) of the folder. Thus, the contents of the Collections folder may be seen by clicking on:
This script also displays a "Back" link (equivalent to the browser's back button) and a "Show folder hiearchy" link that calls thdl_struct.pl for that folder.
Both perl files are located in the "cgi-tibet" folder at /www/cgi-tibet. This means to get there you have to go up from /lv1/thdl to the root. Choose the symlink to "www" and then open the cgi-tibet folder. It is for this reason that the "loc" parameter must identify the folder location beginning with "/lv1/thdl....". The showfolder.pl script requires a "loc" parameter and will crash without it. The thdl_struct.pl does not necessarily need a "loc" parameter. If none is given, then the script automatically sets it to "/lv1/thdl" and displays the hierarchy for THL's root folder. Should THL be moved to another server or the present server somehow rearranged, this may need to be changed. The relavent code is at the top of the script and is as follows:
$q = new CGI;
$folder2srch = $q->param( "loc" );
$headStr = "THDL Directory: " . $folder2srch;
if($folder2srch eq '') {
$folder2srch = '/lv1/thdl';
$headStr = "THDL Root Directory";
The first line sets the variable $q to an new CGI object. Then, the $folder2srch variable is set to the parameter passed to the script by the name of "loc". The header string is then set appropriately. The next block of statements says that "if the $folder2srch variable is empty, set it to '/lv1/thdl' and set the header to 'THL Root Directory'." The line that would need to be changed in the event of a moving or restructuring of the server would be:
$folder2srch = '/lv1/thdl';
The '/lv1/thdl' would have to be changed to the location from the server's root level of THL's main folder. This is not in anyway connected to our permanent URL, www.thdl.org. This has to do with the location of our root folder on the server. So, if the whole THL got moved to /lv9/asia/thdl, then that line would have to be changed to: $folder2srch = '/lv9/asia/thdl';


text:
Veteran entertainment journalist Army Archerd, who wrote a column for the entertainment trade publication Variety for over 50 years, has died. He was 87.
Archerd's spokeswoman said he died Tuesday at UCLA Medical Center of mesothelioma, a cancer of the lungs strongly tied to asbestos exposure.
Archerd began his career at The Associated Press and later went on to write about the entertainment industry at Variety. His most significant scoop came in 1985 when Archerd reported that Rock Hudson was undergoing treatment for AIDS, despite denials by Hudson's spokesman.
He was one of the first journalists to be honored with a star on the Hollywood Walk of Fame.
Related Content from AccessHollywood.com:
VIEW THE PHOTOS: Sudden Endings: Stars Who Died Too Soon
MORE ACCESS ON THESE TOPICS: Deaths - News - Celebrities


text:
Men's Citizen Eco-Drive Brycen Vintage Watch AW1598-70X
- Free 2-Day Shipping on $300 and Free Returns
- 30-Day Money Back Guarantee
- Promotional Financing Options
- 43mm stainless steel case
- Green dial
- Date window
- Mineral crystal
- Luminous hands and indices
- Water resistant to 100 meters
- Powered by light
- Stainless steel bracelet with fold over clasp
- Citizen Style #: AW1598-70X
- Band Materials: Stainless Steel
- Case Sizes: Large (40mm & Over)
- Case Shapes: Round
- Display: Analog
- Movements: Quartz
- Watch Styles: Casual
- Dial Color: Green
- Watch Type: Bracelet
- Features: Calendar/Date, Luminous, Water Resistant
- Diameter: 43 mm
Since 1946, REEDS Jewelers has promised to provide exceptional customer service and high quality merchandise. Even today, we are still a proud family-run business and it is our goal to make every customer "feel like family". That's why we want you to be completely satisfied with all of your experiences with REEDS. We offer a 30-day money back guarantee and 30-day exchanges on most items. Please see our Returns & Exchanges Policy for more information. Or, if you are ever NOT satisfied for any reason at all, please contact us ! We are always here to help.For Your Peace Of Mind
REEDS offers numerous ways to help you protect your investment. Our online Education Library provides you with all of the information that you need to care for modern heirloom .
The REEDS Care Plan
Keep your watch running like new.
Protect your new watch purchase with a REEDS Jewelers Service Plan. Our watch service plan provides two years OF UNLIMITED FREE quality watch repairs at any REEDS Jewelers store nationwide or by calling our toll-free service number.
The service plan provides coverage for repairs to virtually every part of your watch including:
- Movement
- Crystal
- Case
- Bezel
- Band
- Clasp
- Stem
- Crown
60 Month Offer
9.99% APR for 60 MONTHS†
On qualifying purchases with your REEDS Jewelers credit card. Fixed monthly payments required for 60 months.
Other financing options available. Click here to learn more.
- Monthly Payment
Enter amount to finance at 9.99% APR until paid in full$60 fixed monthly payments of$0.00/mo‡Total payment of$0.00
9.99% APR for 24, 36, 48, or 60 Months: On purchase made with your REEDS Jewelers credit card. 24, 36, 48, or 60 Fixed Monthly Payments Required.
†Qualifying purchase amount must be on one receipt. Interest will be charged on the promo purchase from the purchase date at a reduced 9.99% APR, and fixed monthly payments are required until paid in full. These payments are equal to 2.70% of initial promo purchase amount and rounded up to the next whole dollar. These payments may be higher than the payments that would be required if this purchase was a non-promo purchase. Regular account terms apply to non-promo purchases. For new accounts: Purchase APR is 29.99%. Minimum interest charge is $2. Existing cardholders: See your credit card agreement terms. Subject to credit approval. We reserve the right to discontinue or alter the terms of this offer at any time.
‡Monthly payment shown is equal to the purchase price (excluding [taxes and delivery]) divided by the number of months in the promo period, rounded to the next highest Whole dollar, and only applies to the selected financing option shown. If you make your payments by the due date each month, the monthly payment shown should allow you to pay off this purchase within the promo period if this balance is the only balance on your account during the promo period. If you have other balances on your account, this monthly payment will be added to the minimum payment applicable to those balances.
Education is key when making a purchase that will last a lifetime. All of the items that we offer have many characteristics and we want to make sure that you are familiar with all of them. Below we have provided a glossary on the details of this item to aid you in your purchase decision. If for some reason we didn't cover everything, please visit our Education Library for additional information.


text: Spring is in the air, and this month we teamed up with the beauty and wellness experts of Women's Health to fine-tune our lifestyles. The magazine's editors put together a hardworking team of samples. Our motto? Tiny tweaks, big results. After all, we know that the little things—weekly face masks, nightly eye creams, five minutes inthe sun—can make a lasting difference. If you're not a Birchbox subscriber, sign up now!


text:
Wednesday, Jun 03, 2020 | Last Update : 04:08 PM IST
Will southern states be next on Swiggy, Zomato liquor delivery route after Jharkhand and Odisha?
JioMart, self-declared as a kirana store aggregator, launches in 200 cities without them
Big technology firms should be stopped from turning the world into a China, Noam Chomsky says
'Death sentence given over Zoom inhumane, man should have right to see accusers face to face in court'
Can you believe America still uses fax machines?
Copyright © 2016 - 2020 The Asian Age. Designed, Developed & Maintained By Daksham


text:
A couple of days ago, I was pointed to a post by Döra about social anxiety, and about her guild Paranoid.
Paranoid is a guild for the socially awkward, the shy, the people who'd like to raid, but get a headache just thinking about all the things they could screw up. The people who type a message to someone who's LFM in trade, then backspace, then type, backspace, type, stare at what they've written, backspace again and go quest on their own. And if they do press enter, they're relieved if they get the reply: "Sorry, full."
Can I tell how much I wish I'd found a guild like this when I first started playing WoW? Maybe it wouldn't have taken me a year to reach max level. Maybe I would have gotten to experience end-game dungeons and Vanilla raiding. Heck, maybe it wouldn't have taken me two years to get over my "never going to play with others" mentality!
I know I have a couple of readers who've mentioned they'd like to be part of a guild that understood shyness. So if you play on the EU side of the pond and you'd give group play a try if it weren't for those blasted butterflies/stomach knots/icky sweating, there's a guild out there for you, where you can meet quite a few fellow players who totally get you.
I also got the opportunity to exchange briefly with Döra/Thriftee and Mershelle (an officer and the GM of Paranoid, respectively) and both are lovely ladies whom I'm positive would make for fantastic guildies.
To find them, look up Paranoid on Emerald Dream EU, or drop by their webpage.
Going off on a tangent, I noticed a link on my stats page from a thread on the official forums. "Uh oh" I thought! But it turned out that one of my early posts was linked in the thread that spawned Paranoid. Can I tell you how excited I was? (Except for the fact that it was an early post and my writing back then was atrocious! I cringed so many times rereading that post!)
Being a blogger, I think of myself as a bit of an artist. Like maybe a part time artist. I attempt to turn elements of myself into something somewhat creative in order to share them. Whether or not I succeed is up to the reader to decide. But when a piece I've written contributes, however minimally, to something greater, the feeling is incredible. It's at times like these that I feel like I've succeed as a part-time bit-of-an-artist. When I feel like I've had a part, though tiny, in making a difference.
Anyway, props to Mershelle, Döra and the rest of the crew behind Paranoid! As you guys (and many of us too) know, WoW is a refuge to a lot of socially anxious or socially isolated (or both!) persons, but quite often we find ourselves just as cut off in the virtual world as we do in the real one. You guys have build a network, a support system, and maybe even a stepping stone for a lot of people. And, to me, that's beautiful.


text:
By continuing to use our site you agree to us using cookies in accordance with our Cookie Policy.
Accept & Close
Put your best foot forward in a pair of shoes from our fabulously fashionable footwear collection
Give your feet a treat with a pair of shoes from our fierce line of footwear. From the highest heels to the lowest flats, our range offers all the shoes your heart could desire – add some sparkle to a night out with special occasion sandals or complete your daytime look with cute ankle boots. We have the best footwear collection online with the perfect pair of shoes waiting for you, with delivery options to rival Prince Charming.


text:
When you want to create and link complex animations, but want to avoid creating tens or hundreds of keyframes by hand, try using expressions. An expression is a small piece of code, much like a script— that you can plug into your After Effects projects, that evaluates to a single value for a single layer property at a specific point in time. However, scripts tell an application to do something, an expression says that a property is something.
If this sounds complex, watch the following video to kickstart exploring expressions.
Two sources of example expressions are the Expression Sampler template project (File > Browse Template Projects) and the animation presets in the Behaviors category (Animation > Browse Presets).
The expression language is based on the standard JavaScript language, but you do not need to know JavaScript to use expressions. You can create expressions by using the pick whip or by copying simple examples and modifying them to suit your needs.
To open the expression controls, pick the layer property you want to affect and hold Option on Mac or Alt on PC while you click the keyframe (stopwatch) icon. The expressions box displays, you can use it to write. edit expfll then see the expression options including a place to write or paste your expression. You can also use the pick whip tool to reference another layer for your expression. And you can enable or disable your expression here without having to delete it.
Let's look at an example of a common and simple expression known as wiggle.
If you want to layer to change positions randomly over time, you can change You could go into the position and set keyframes for different positions over the course of the timeline. You can also paste the below value in your timeline.
The first number represents the number of wiggles per second, and the second number represent the intensity or value of the wiggle.
Tip: For a quicker wiggle effect, set both the values high.
Animation presets can include expressions, or even consist entirely of an expression. Animation presets that use expressions instead of keyframes are sometimes called behaviors.
After you add an expression to a property, you can continue to add or edit keyframes for the property. An expression can take the value of a property as determined by its keyframes and use that as input to generate new, modified values. For example, the following expression on the Rotation property of a layer adds 90 degrees to the value of the Rotation property, in addition to the keyframed motion:
value + 90
Some methods—such as wiggle—operate directly on the keyframed property values. (See Property attributes and methods (expression reference).)
The following expression on the Position property of a layer preserves the keyframed motion of the layer and causes it to wiggle a little:
wiggle(10, 10)
Using the wiggle expression is often much faster and easier than using the Wiggler.
When you are animating text, you can use the Expression selector to specify how much you want an animator property to affect each text character. You can add one or more Expression selectors to an animator group, and that animator group can contain one or more properties.
While you are editing an expression, previews of all kinds are suspended; a red bar appears at the bottom of panels that are waiting for you to exit text-editing mode.
The values for a property that contains an expression appear in red or pink type.
A good way to begin working with expressions is to create a simple expression with the pick whip and then adjust the behavior of the expression using simple math operations, such as those listed in the following table:
Perform opposite of original, such as counterclockwise instead of clockwise
Replace the argument names written by the Expression Language menu with actual values.
Jeff Almasol provides a script that automatically processes expressions, making specified changes. For example, the script can be used to automatically remove or enable disabled expressions.
You can customize the code editor interface of the expression editor, including highlighting JavaScript syntax with custom colors, line numbers, code folding, and auto-complete. To customize these options, select Preferences > Scripting and Expressions.
Composition names, layer names, footage names, and effect names are all pulled into the autoComplete and shown in the correct context with their respective comp(), layer(), footage(), and effect() methods. This allows you to keep your expression active while referencing items in the project. You do not need to scroll the Timeline or open other panels to refer to properties or items using the pickwhip.
- To add an expression to a property, select the property in the Timeline panel and choose Animation > Add Expression or press Alt+Shift+= (Windows) or Option+Shift+= (Mac OS); or Alt-click (Windows) or Option-click (Mac OS) the stopwatch button next to the property name in the Timeline panel or Effect Controls panel.
- To link a set of properties across layers and compositions, use property links.
Select any one property or set of properties and choose Edit > Copy With Property Links or Edit > Copy With Relative Property Links, and then paste those properties on any layer in a composition. The pasted properties remain connected to the layer from which the properties were copied, such that any change made to the original property is reflected in all of the instances of the pasted property links.
You can even copy an entire layer with property links and paste it to create duplicates that follow the changes made to the original.
The command Copy With Relative Property Links, works like the command Copy With Property Links, except that the Copy With Relative Property Links command creates expressions that do not reference the source composition by name. This maintains a relative link between the layer with the expression and the composition containing that layer. This can be useful when, for example, you want to move expression-rigged layers from one composition to another but let the layers reference a control layer only in the same composition. The expressions created using the Copy With Relative Property Links command are identical to those created using the expression pick whip.
The result of copying a layer's Position property with the Copy With Relative Property Links command is as follows:
The result of copying a layer's Position property with the Copy With Property Links command is as follows, which specifically references the layer's source composition in the expression:
- To temporarily disable an expression, click the Enable Expression switch . When an expression is disabled, a slash appears through the switch .
- To remove an expression from a property, select the property in the Timeline panel and choose Animation > Remove Expression, or Alt-click (Windows) or Option-click (Mac OS) the stopwatch button next to the property name in the Timeline panel or Effect Controls panel.
If you are not familiar with JavaScript or the After Effects expression language, you can still take advantage of the power of expressions by using the pick whip. You simply drag the pick whip from one property to another to link the properties with an expression, and the expression text is entered in the expression field at the insertion point. If text is selected in the expression field, the new expression text replaces the selected text. If the insertion point is not in the expression field, the new expression text replaces all text in the field.
You can drag the pick whip to the name or value of a property. If you drag to the name of a property, the resulting expression displays all the values as one. For example, if you drag the pick whip to the name of the Position property, an expression like the following appears:
thisComp.layer("Layer 1").transform.position
If you drag the pick whip to one of the component values of the Position property (such as the y value), an expression like the following appears, in which both the x and y coordinates of the property are linked to the y value of the Position property:
temp = thisComp.layer("Layer 1").transform.position[1]; [temp, temp]
If the layer, mask, or effect that you drag the pick whip to does not have a unique name in its local context, After Effects renames it. For example, if you have two or more masks named "Mask" on the same layer, and you drag the pick whip to one of them, After Effects renames it "Mask 2."
The format of expressions created by the pick whip is determined by the Expression Pick Whip Writes Compact English preference (Edit > Preferences > General (Windows) or After Effects > Preferences > General (Mac OS)). By default, the pick whip creates compact English expressions, which use the names for properties as they appear in the Timeline panel for the properties within an expression. Because these names are coded into the application and never change, these expressions can work when After Effects is running in another language. Any property names that you can change are enclosed in double quotation marks and remain the same in any language. If you don't plan on sharing your projects across languages, you can deselect this preference. This preference does not affect effect names or effect properties.
Here is an example in compact English:
thisComp.layer("Layer 1").transform.position
thisComp.layer("Layer 1")("Transform")("Position")
Because the default is to use compact English, this document uses compact English in most examples and illustrations.
If you use the pick whip to create an expression to refer to a layer, and that layer has the same name as another layer in the same composition, then the targeted layer's name changes. The new layer name is the old layer name with a numeral at the end. This change is necessary to ensure that the expression unambiguously refers to a single layer in the composition.
In Graph Editor mode, the single expression field appears as a resizable box at the bottom of the Graph Editor and shows only the expression for the selected property. To show multiple expression fields simultaneously, the Timeline panel must be in layer bar mode.
To toggle between layer bar mode and Graph Editor mode, press Shift+F3.
- To show only properties with expressions, select one or more layers, and then press EE.
- To show the expression field in the Graph Editor, choose Show Expression Editor from the Choose Graph Type And Options menu at the bottom of the Graph Editor. When you add an expression to a property, the expression editor is shown, regardless of this setting.
To resize the expression field, drag its bottom edge up or down.
- To see how an expression changes the value or velocity graph, click the Show Post-Expression Graph button while showing the value or velocity graph in the Graph Editor.
The dimly colored graph displays the value or velocity before the expression is applied, and the brightly colored graph displays the value or velocity after the expression is applied. Turning on the graph overlay for the Position property also changes the motion path display in the Composition panel so that you can see the expression-affected path.
You can use the search field in the Timeline panel to search expressions as well as other components of a property. If the search string appears in an expression, the property and its containing property groups and layer are shown in the filtered set of search results.
The Source Text property of a text layer is interpreted by expressions as a JavaScript String. You can use the pick whip to retrieve the source text from another text layer; however, only the style of the first character of the destination layer is used.
In the Essential Graphics Panel, in the Source Text Properties menu, you can select the Use layer as fallback text box. When checked on, you can select a comp/subcomp and a shape or clip layer to determine an alternate text box for editing the text in Premiere Pro Program Monitor.
For more information on the JavaScript String object, consult a JavaScript reference resource.
You can use "\r" in a string expression to start a new line of text. For example, to copy the original text from one layer onto the same layer and repeat it in all uppercase characters on a new line, use the following expression:
text.sourceText + "\r" + text.sourceText.toUpperCase()
Adding a text layer to a composition and adding an expression to its Source Text property can be a great way to examine the property values of other layers. For example, the following expression on a Source Text property reports the name and value of the Opacity property for the next layer in the layer stacking order:
thisComp.layer(index + 1).name + "\rOpacity = " + thisComp.layer(index + 1).opacity.value
The following example reports the name of the footage item used as the source of the topmost image layer in the stacking order at the current time that has its Video switch set.
source_footage_name = ""; for (i = 1; i <= thisComp.numLayers; i++){ if (i == index) continue; my_layer = thisComp.layer(i); if (! (my_layer.hasVideo && my_layer.active)) continue; if (time >= my_layer.inPoint && time < my_layer.outPoint){ try{ source_footage_name = my_layer.source.name; }catch(err1){ source_footage_name = my_layer.name } break; } } source_footage_name
Aharon Rabinowitz provides a video tutorial and example expressions on Red Giant TV that show how to animate a video game score with the Source Text property and a Slider effect (an Expression Controls effect).
You can use expressions to control text styling as well as the text itself. Work with any text expression as well as with Motion Graphics Templates. You can link multiple titles together and update their styling at once, which is used for title design, especially main and end titles.
For more information, see Use expressions toedit and access text properties.
If you write a complex expression and intend for you or someone else to use it later, you should add comments that explain what the expression does and how its pieces work.
- Type // at the beginning of the comment. Any text between // and the end of the line is ignored. For example: // This is a comment.
For examples of this type of comment, see Expression example: Fade opacity of a 3D layer based on distance from camera.
- Type /* at the beginning of the comment and */ at the end of the comment. Any text between /* and */ is ignored. For example: /* This is a multiline comment. */
For examples of this type of comment, see Save and reuse expressions.
Once you have written an expression, you can save it for future use by copying and pasting it into a text-editing application or by saving it in an animation preset or template project. However, because expressions are written in relation to other layers in a project and may use specific layer names, you must sometimes modify an expression to transfer it between projects.
You can define your own functions within expressions using normal JavaScript function syntax. In this example, a function is defined that calculates the average of two values, and the last line uses this function:
function average(a, b) { return (a + b) / 2; } average(position, thisComp.layer(1).position);
You must define each function fully within each expression in which it is used. There is no global library of functions that you can add to.
If you want to save an expression for use in another project, you should add comments to the expression. (See Add comments to an expression.) You should also use variables so that you can change a value in one place rather than having to change it in several places.
For example, this expression has a multiline comment at the beginning that explains what the expression does and a short comment after a variable is declared and initialized that tells what the variable is for:
/* This expression on a Source Text property reports the name of a layer and the value of its Opacity property. */ var myLayerIndex = 1; // layer to inspect, initialized to 1, for top layer thisComp.layer(myLayerIndex).name + ": \rOpacity = " + thisComp.layer(myLayerIndex).opacity.value
You can save an animation preset that includes an expression and reuse it in other projects, as long as the expression does not refer to properties that don't exist in the other projects. When you save a preset in which a property has an expression but no keyframes, only the expression is saved. If the property has one or more keyframes, the saved preset contains the expression along with all keyframe values.
You can copy an expression from a layer property, with or without the keyframes for the property.
- To copy an expression and keyframes from one property to other properties, select the source layer property in the Timeline panel, copy the layer property, select the target layer properties, and paste.
- To copy an expression from one property to other properties without copying keyframes, select the source property, choose Edit > Copy Expression Only, select the target properties, and paste.
Copying an expression without keyframes is useful when you want to simultaneously copy multiple expressions and paste them onto one or more new layers, or when you want to copy one expression and paste it onto more than one layer.
As with pasting keyframes and other items, you can often paste the item into the target layer and rely on After Effects to determine which property should be the target of the paste operation. For example, this works for copying Position properties from one layer to another, but you must select the target property yourself if you are pasting an expression from a Position property into a Scale property.
Use an Expression Controls effect to add a control that you can use to manipulate the values of one or many properties by linking the property to the control using expressions. A single control can affect several properties at once.
You can use them to control other parameters using expressions. You can add a slider that moves a layer only within certain limits, or let the user select between several options by dragging a slider. You can add check boxes that turn layers on or off, or change color schemes on text and graphics layers. You can add angle controls that drive the rotation of several layers, and you can add color controls that change the color of text, glows, or shapes. There are seven types of Expression Controls in After Effects, but the 3D Point Control and the Layer Control are not supported by the Essential Graphics panel, so they're not used for MOGRT design.
The names for the Expression Control effects indicate what type of property control they provide: Angle Control, Check box Control, Color Control, Layer Control, Point Control, Slider Control, and Dropdown Menu Control. After Effects CS5.5 and later includes a 3D Point Control, as well.
If you apply an animation preset from the Animation Presets > Shapes > Backgrounds category, you can see a custom Animated Shape Control effect in the Effect Controls panel. This custom effect is a specialized expression control effect that was created specifically for these animation presets. You can copy and paste this effect to other layers, or you can save it as an animation preset itself so that you can apply it elsewhere.
You apply Expression Controls effects to a layer in the same ways that you apply other effects, such as dragging the effect onto the layer from the Effects & Presets panel.
You can apply Expression Controls effects to any layer; however, it is useful to apply them to a null layer, which you can simply use as a controlling layer. You then add expressions to properties on other layers to take input from that control. For example, you can add the Slider Control effect to a null layer (Null 1), and then apply this expression to the Position properties of multiple layers:
position+[0,10*(index-1)*thisComp.layer("Null 1").effect("Slider Control")("Slider")]
In this example, as you drag the slider, each layer with this expression moves. The layers with greater index numbers (layers toward the bottom in the Timeline panel) are shifted more than the layers with lower index numbers, at 10-pixel intervals. You can set keyframes for the slider on the null layer, and all the other layers animate accordingly.
It is often useful to rename each instance of an Expression Control effect to indicate its use. For example, renaming an instance of the Color Control effect to sky color makes it easier to tell what the effect is controlling. You can rename each instance of an Expression Control effect just as you rename any other effect: select it in the Timeline panel or Effect Controls panel and press Enter on the main keyboard (Windows) or Return (Mac OS).
To modify the range of a control, right-click (Windows) or Control-click (Mac OS) the underlined property value for the control and choose Edit Value from the context menu.
In some situations, it's useful to convert an expression to keyframes. For example, if you want to freeze the values in an expression, you can convert the expression to keyframes and then adjust the keyframes accordingly. If an expression takes a long time to evaluate, you can convert it to keyframes so that it renders more quickly. When you convert an expression to keyframes, After Effects evaluates the expression, creating a keyframe at every frame, and then disables the expression.
Though the expression language is based on a scripting language, a subtle but important difference exists between a script and an expression: Whereas a script tells an application to do something, an expression says that a property is something.
For more information about JavaScript, see a JavaScript reference resource.
When creating expressions, keep in mind the following:
The value of an expression is the value of the last statement evaluated.
JavaScript is a case-sensitive language.
Semicolons are required to separate statements or lines.
Spaces between words are ignored, except within a string.
In JavaScript, a value stored in an object is called a property. However, After Effects uses the term property to refer to layer components as defined in the Timeline panel. For this reason, After Effects refers to JavaScript properties as either methods or attributes. In general practice, the difference between a method and an attribute is that a method usually does something to create its output (return) value, whereas an attribute simply refers to an existing value to determine its output (return) value. You can tell a method from an attribute most easily by looking for the parentheses following the method name, which surrounds any input arguments to the method.
An object is an item that can contain other objects, attributes, and methods. Compositions, layers, and footage items are examples of objects. Specifically, compositions, layers, and footage items are global objects, which means that they can be referred to in any context without reference to some higher-level object.
You use the expression language to access attributes and methods of layer properties. To access a value, use a chain of object references separated by the period (.) operator. To chain object references past the layer level (for example, to refer to effect properties, masks, or text animators), you can also use parentheses. For example, to link the Opacity property in Layer A to the Blurriness property of the Gaussian Blur effect in Layer B, enter the following expression in the expression field for the Opacity property for Layer A:
thisComp.layer("Layer B").effect("Gaussian Blur")("Blurriness")
Reading this expression from left to right, you progress from the higher-level, containing object down to the specific property:
The global object used refers to the current composition: thisComp.
A specific layer object within that composition is referred to by its name: layer("Layer B").
A specific effect object within that layer is referred to by its name: effect("Gaussian Blur").
A specific effect property within that effect is referred to by its name: ("Blurriness").
For the nth component of a multidimensional property, like the y component of an effect control point, append [n] at the end, like this:
thisComp.layer("Layer B").effect("Advanced Lightning")("Origin")[1]
The default object for an expression is the property on which the expression is written, followed by the layer containing the expression; therefore, you do not need to specify the property. For example, a wiggle expression written on the Position property of a layer can be either of the following:
wiggle(5, 10) position.wiggle(5, 10)
Include the layer and property when retrieving them from outside the layer and property on which the expression is written. For example, an expression written on the Opacity property of Layer B, linking it to the Rotation property of Layer A would look like this expression:
thisComp.layer("Layer A").rotation
To see more examples of how expressions work, use the pick whip to link one layer property to another, and look at the expressions it creates.
Jeff Almasol provides a script on his redefinery website with which you can determine how to refer to any property in expressions.
An Array is a type of object that stores an ordered set of numbers. An Array is represented as a list of numbers separated by commas and surrounded by brackets, as in this example:
[10, 23]
You can assign an Array object to a variable, making it easy to refer to array values in other areas of the expression. For example:
myArray = [10, 23]
The dimension of an Array object is the number of elements in the array. The dimension of myArray is 2. Different properties in After Effects have different dimensions depending on the number of value arguments they have. In the expression language, the values of properties are either single values (Number objects) or arrays (Array objects).
The following table provides examples of some properties and their dimensions:
Rotation °
Opacity %
Scale [x=width, y=height]
Position [x, y]
Anchor Point [x, y]
Audio Levels [left, right]
Scale [width, height, depth]
3D Position [x, y, z]
3D Anchor Point [x, y, z]
Orientation [x, y, z]
Color [red, green, blue, alpha]
You can access the individual elements of an Array object by using brackets and an index number to indicate which element you want. The elements in an Array object are indexed starting from 0. Using the previous example, myArray[0] is 10 and myArray[1] is 23.
The following two expressions are equivalent:
[myArray[0], 5] [10, 5]
position[0] is the x coordinate of position.
position[1] is the y coordinate of position.
position[2] is the z coordinate of position.
Colors are represented as four-dimensional arrays [red, green, blue, alpha]. In projects with a color depth of 8 bpc or 16 bpc, each value in a color array ranges from 0 (black) to 1 (white). For example, red can range from 0 (no color) to 1 (red). So, [0,0,0,0] is black and transparent, and [1,1,1,1] is white and opaque. In projects with a color depth of 32 bpc, values under 0 and over 1 are allowed.
If you use an index that is greater than the index of the highest-dimension component in an Array object, After Effects returns an error. For example, myArray[2] causes an error, but position[2] returns the z coordinate of Position.
Many of the properties and methods in the After Effects expression language take Array objects as arguments or return them as values. For example, thisLayer.position is an Array object that is either two-dimensional or three-dimensional depending on whether the layer is 2D or 3D.
If you want to write an expression that keeps the y value of an animation of Position but fixes the x value at 9, you would use the following:
y = position[1]; [9,y]
[9, position[1]]
This is an important point, so let's look at one more example. If you want to combine the x position value from Layer A with the y position value from Layer B, you would use the following:
x = thisComp.layer("Layer A").position[0]; y = thisComp.layer("Layer B").position[1]; [x,y]
You can create an expression that refers to just one value within the array of a 2D or 3D property. By default, the first value is used, unless you specify otherwise. For example, if you drag the pick whip from the Rotation property of Layer A to Scale property of Layer B, the following expression appears:
thisComp.layer("Layer B").scale[0]
By default, this expression uses the first value of the Scale property, which is width. If you prefer to use the height value instead, drag the pick whip directly to the second value instead of the property name, or change the expression as follows:
thisComp.layer("Layer B").scale[1]
Conversely, if you drag the pick whip from the Scale property of Layer B to the Rotation property of Layer A, After Effects automatically creates a variable, assigns the one-dimensional Rotation property value to it, and then uses that variable for both dimensions of the Scale property:
temp = thisComp.layer(1).transform.rotation; [temp, temp]
In After Effects, many properties and methods take or return vectors. After Effects refers to an array as a vector if it represents either a point or direction in space. For example, After Effects describes position as returning a vector.
However, though a function like audioLevels does return a two-dimensional value (the left and right channel levels), it is not called a vector because it does not represent a point or direction. Some functions in After Effects accept vector arguments, but they are generally only useful when the values passed represent a direction. For example, cross(vec1, vec2) computes a third vector that is at right angles to the input vectors. The cross product is useful when vec1 and vec2 are two vectors representing directions in space, but not if they just represent two arbitrary collections of numbers.
Indexing for Layer, Effect, and Mask elements in After Effects starts from 1. For example, the first layer in the Timeline panel is layer(1).
Generally, it is best to use the name of a layer, effect, or a mask instead of a number to avoid confusion and errors if the layer, effect, or mask is moved, or if the arguments are changed during product updates and upgrades. When you use a name, always enclose it in straight quotes. For example, the first of these expressions is easier to understand than the second expression, and the first expression continues to work even if you change the order of effects:
effect("Colorama").param("Get Phase From") effect(1).param(2)
Time within an expression is always in composition time (not layer time) and is measured in seconds. The default time for any expression is the current composition time at which the expression is being evaluated. The following expressions both use the default composition time and return the same values:
thisComp.layer(1).position thisComp.layer(1).position.valueAtTime(time)
To use a relative time, add an incremental time value to the time argument. For example, to get the Position value 5 seconds before the current time, use the following expression:
Default time references to properties in nested compositions use the original default composition time, not remapped time. However, if you use the source function to retrieve a property, the remapped time is used.
For example, if the source of a layer in the containing composition is a nested composition, and in the containing composition you have remapped time, when you get the position values of a layer in the nested composition with the following expression, the position values use the default time of the composition:
comp("nested composition").layer(1).position
However, if you access layer 1 using the source function, the position values use the remapped time:
thisComp.layer("nested composition").source.layer(1).position
If you use a specific time in an expression, After Effects ignores the remapped time.
Because expressions operate on time in units of seconds (not frames), you sometimes need to use time conversion methods to convert time values to perform operations on frames. (See Time conversion methods (expression reference).)
When an expression fails to evaluate, expression errors appear in a warning banner at the bottom of the Composition and Layer panels. After Effects does not disable the expression but continues to evaluate it. The warning banner is displayed as long as the expression fails to evaluate; that is, until the expression is either fixed or manually disabled.
A. Left or Right arrow buttons B. The Reveal Expression C. The Expand/Collapse Warning
- The Left or Right arrow buttons display the previous or next expression error when multiple expressions fail to evaluate.
- The Reveal Expression (magnifying glass) button exposes the property with the failing expression in the Timeline panel. If the expression is in a different composition, that composition opens.
- The Expand/Collapse Warning (up/down arrows) button shows or hides the error text.
The expression error text is one line only, and is clipped to the width of the Composition panel.
To see the full expression error text:
Click next to the expression. The complete error appears in a dialog box.
To hide the warning banner:
Choose After Effects (Mac OS) or Edit (Windows) > Preferences > General and disable Show Warning Banner When Project Contains Expressions Errors.
When this option is disabled, the warning banner remains hidden even when new expression errors occur.
Re-enable this option to view expression errors.
Now that you have understood some of the concepts behind expressions, come to the community for some real-life examples, and to share your work.
You can also check out Dan Ebberts' excellent collection of example expressions and tutorials on his MotionScript website.
The AE Enhancers forum also provides many examples and much information about expressions, as well as scripts and animation presets.