, the better; provided that it doesn't contain any unnecessary 'gibberish'.
You should provide one or more images on your blog article and they should contain title attribute too. But there is no way you can insert an image in a YouTube video description. I believe the thumbnail used on a video serves the purpose of it's SEO.
In case of a blog article, you should provide a meta description which has to contain the focus keyword. But there is no such option on a YouTube video (the metadata of a YouTube video is a lot different scenario. Below is the link to an article which describes what metadata is for a YouTube video and also how it can be misleading).
The focus keyword should be present in the url of the blog article, which doesn't apply for a YouTube video. Again, in case of a blog article you should provide internal links, like those to other articles on your blog. Whereas, you shouldn't possibly put links to other videos of your channel in the video description. This should be done by using cards.
Use AdWords to find suitable keywords and tags
Although there are other tools and web services to find suitable keywords and tags for your YouTube videos and blog articles, but I would strongly suggest you to use 'Google AdWords' instead. It is the best keyword finding tool not only in my view, but also to most other SEO experts. Let us now learn how to use it.
First you have to sign in to your AdWords account. Recently they have made changes in the dashboard interface. You should go to the portion with three vertical dots and click on it. A menu will open where you'll be clicking on 'Keyword planner', then a page will open in a new tab.
A portion of AdWords dashboard to do SEO
Can you see the three vertical dots?
Now you need to click on the link saying 'Search for new keywords using a phrase, website or category'. You'll be provided with a few blank spaces, where you need to type your options. In most cases, typing the title of your YouTube video or blog article is just enough. And you have to do it in the box that says 'Your product or service'.
You're about to enter your desired keywords for SEO purpose
After that you have to hit the blue 'Get ideas' button below, and you will have some search results. You could be using some of the results as tags in your YouTube video or blog article (I'm going to do the same for this article). Also when I'll be preparing a YouTube video with the same title and content, I'll be using some of these tags – the most popular ones.
Choose the best and the most popular keywords to serve SEO
Now that you know how to find keywords related to your particular YouTube video or blog article, you have to choose the best and the popular related keywords. Out of these, choose one as your SEO keyword (aka focus keyword) which you are going to focus in video description or article copy. The rest popular keywords could be used as tags.
For your information, I previously ran a search on AdWords using keywords like SEO and keyword planner. I had some results out of which I chose SEO as the focus keyword. Now after selecting my article title and running a search with that, I'm going to use a few results as tags on this article. If you're a YouTuber, you could use such keywords as tags on your video, as I previously mentioned.
The keywords with most search numbers like 10K-100K or 1K-10K are supposed to be the most popular ones. Nevertheless, keywords which have low search frequency but are very close to your particular theme, could be selected as well. Besides the search frequency, there is another option which shows competition: low, medium or high. In ideal situation, you should be selecting keywords with low or medium competition, for reasons I'll be describing may be in a future article. (FYI, I prefer to cover the first three pages of search results)
list of SEO keywords showing search frequency and competition level
SEO keywords you shouldn't choose
In my opinion, you shouldn't choose more than 15 tags for a YouTube video and 20/25 keywords to use as tags for a blog article. Also once you have the search results on AdWords, you might see some mouth watering and frequently searched keywords which are remotely related with your copy (article or video description). You shouldn't choose these as tags for your copy, because choosing so may harm the SEO status of your article and lead your YouTube channel to termination.
For example, upon running an AdWords search on the title of this article, I too found some mouth watering keywords as 'youtube hot videos 2016' with search frequency of 10k-100k. But I didn't select this as a tag, because this search keyword is no way related with my current article. Also I found another keyword name 'youtube generator' with a good search frequency. But I didn't accept this as a tag either, because I was not sure whether this one was relevant to my article or not. You should keep these points in your head while selecting keywords/tags for your YouTube channel/blog article.
That's all for this article. If you have properly gone through this, then I believe you should be able to learn to SEO both your YouTube videos and blog articles correctly.
You may also likeYouTube cards: How to set and use them
How YouTubers Get Paid! – How To Get Paid without Adsense on YouTube!
It is probably an age old question as to exactly how YouTubers get paid and how much do they actually earn. These are good questions. As a full-time YouTuber myself I can understand that we have really weird jobs that couldn't have existed even 5 or 6 years ago. I'm here to explain exactly how the whole thing works, from how we get paid and how much we get paid, to how you can get paid doing this.
how youtubers get paid - in multiple ways
How YouTubers get paid
Your average YouTube channel generates money every single time a viewer watches an advertisement on one of your videos. This means that they don't have an ad-blocker turned on and they watch an skippable ad for at least 30 seconds. Once a user has watched the advertisement for 30 seconds or seen other smaller ads such as banner ads, YouTube will then generate a payment for that and split the money between you and YouTube itself. You get the 55% of it, while YouTube gets the rest 45% (in case of AdSense). The money generated per view is less than 1 cent, however we will get to how much that turns out to later. (This article is on how youtubers get paid)
Sponsored deals
Another way a YouTube channel can get paid is through sponsored deals. This is usually offered to only bigger YouTube channels that take part in more hands on networks. But occasionally smaller channels will have them as well. It's just that the sponsor will pay them specific amount of money either per view or per click to the company's link, or to make a video about a product, often some kind of other YouTube channel or video game.
It's worth nothing that it's required by law for the YouTuber to tell people that it's a sponsored video in the video's description. So if you ever watch a video that you think might be a sponsored one, check the description to know for sure. Sponsored deals range from extremely shady to where they buy off people's opinion to sell games, to completely legend them, or they just want the person's honest opinion on it while doing a video to show the game off to new players. Sponsored deals generate much more money than regular advertisements. (This article is on how youtubers get paid)
Through Patreon : Receive donations from viewers
The last way to make money on YouTube isn't directly attached to YouTube, but it's so common and extremely efficient that it's worth bringing out. You see that a lot of YouTubers myself included use Patreon. It is a website where content creators can receive donations monthly from fans and give optional rewards in return. Patreon then takes 10% of the donations for themselves and gives you the rest 90% of what was sent. Not every viewer is going to donate every month, still it's a much more stable income than YouTube itself. Yes, YouTubing is such a weird job that most channels with Patreon make more money from donations every month than they do from their actual paychecks from AdSense or MCN partnership. (This article is on how youtubers get paid)
How much YouTubers get paid
As a YouTuber, how much you get paid actually depends on three factors: how many viewers you get, how many of them use ad-block and if you do sponsored videos. Let's look at the number of views first. Many Multi-channel networks will attempt to have you signed a contract with them by saying that you're going to earn $3-$10 per thousand views, where the reality is that it is not possible to pay you more than $2 for each 1000 views. That is assuming that most of your viewers are from USA, UK, Canada. If most viewers are from developing countries like India, you'd be paid much less than $2 for one thousand views.
Well, you have to be very careful before you sign a contract with an MCN. There are some contracts which won't let you go before 5 years have finished. They do this in the hope that one day your channel will really earn a lot of revenue for them. So, if you're going to choose an MCN, then choose one that will not


Onderbeke Mhh, from what I read just now, LIN is at least similar to UART with different voltage levels and a protocol imposed on the data stream. The LIN Schedule sets the send time point of the LIN message to be transmitted. LIN Tools by VCT â¢ LIN Database Manager (LDM) The LDM is a standalone offline tool, providing a user-friendly Windows interface for logically describing and configuring LIN systems at a high abstraction level. Using a Wii Nunchuk with Arduino. the arduino rest api is a mechanism to exchange data between arduino and other external systems. PSoC 4 devices support LIN slaves with both LIN v1.3 and LIN v2.1/2.2 protocol specifications. The convergence between API and IoT opens new integration scenarios. Arduino Cloud Provider Examples: Examples of how to connect various Arduino boards to cloud providers; Arduino Uno WiFi Dev Ed Library: This library allows users to use network features like rest and mqtt.Includes some tools for the ESP8266. Before start programming for SPI communication between two Arduinos.We need to learn about the SPI library used in Arduino IDE. Moreover, LIN is implemented to be a one wire interface. For the Arduino Uno, the connections are as follows: SCK: GPIO 13 or ICSP 3; MOSI: GPIO 11 or ICSP 4; MISO: GPIO 12 or ICSP 1; SS: GPIO 10 A great invention of Nintendo is the Nunchuk, a cheap extension for the Wii U remote. The LIN component in PSoC 4 supports LIN slave with both LIN v1.3 and LIN v2.1/2.2 protocol specifications. This is the LIN Master. The shield also includes a configuration and a large 270uF capacitor that allows your project to be powered over a the LIN bus itself using only 2 wires. Looking at the captured data, the bytes 0xfdfe seem suspicious to â¦ Example1 - LIN Slave Communication: Now weâll focus on SPI implementation on the Arduino using the Arduino as the master device (SPI.h). Support for using multiple interfaces at the same time. We've all grown up with game pads in our hands, which makes them ideal to combine them with literally any possible application. I need to send and receive data from Arduino to the node through the LIN protocol using MCP3004. LIN, short for Local Interconnect Network, is a network protocol used in serial communication between different components inside of vehicles. The Arduino library is independent of any host implementation, a Python API client library is provided as a reference implementation. It is built on top of the "Arduino" Serial and digital IO APIs. The development of an API ecosystem is an interesting topic and the way we access to IoT service, exposed by remote IoT boards, using API is â¦ For example, the Engine Control Unit is a major control using in a car. Developed by Robert Bosch GmbH, CAN is protocol is main used in automobiles for communication between a control unit and its components. I suggest you look at â¦ As a cheap alternative, todayâs protocol LIN, is designed for low cost and multi-nodes automotive networks.


text:
Gertrude Fitzgerald was born April 1, 1876 in Fulton, Illinois to Ebenezer Baird and Sue Mussina. In 1896 she married Benjamin Fitzgerald, an engineer. His job led the family to various locations in Latin America, especially in Mexico. The Fitzgerald family lived most of the time in the small mountain community of Madera, Chihuahua, an important part of the Pearson Company's industrial empire. Gertrude Fitzgerald became interested in photography while living in Madera, and some of her photographs were used by the Pearson Company to make postcards to show prospective employees that they would be living in comfortable modern conditions. After the beginning of the revolution in 1910, Gertrude and the children, Nellie and Gerald, became refugees from the turmoil. They finally left Mexico in 1915 and moved to El Paso, Texas, where the status of the family soon changed. Benjamin Fitzgerald could not find work in the area and left to work for his father in Louisiana. Because of health problems Gertrude stayed in El Paso. The couple separated permanently in 1916. Gertrude found no market for her photography, but continued taking pictures. In El Paso she worked in retail businesses including the Popular Dry Goods Company and the White House. Gertrude Fitzgerald died on September 26, 1956 in El Paso, Texas.
The Gertrude Fitzgerald photographs images consist primarily of photographs taken by Gertrude Fitzgerald of her family life and people and places related to the travel and work of her husband. These photographs consist of images of Madera, Chihuahua, including photographs of workers in the Pearson Lumber Company near Madera; photographs of Federal troops preparing for or returning from military actions in the Mexican Revolution (about 1910); images of Mexico City, mostly Chapultepec or the Shrine of Our Lady of Guadalupe; and landscapes and ruins near Casas Grandes in the state of Chihuahua, Mexico. Other images show scenes from the El Paso, Texas area, including local landmarks and military life at Fort Bliss, as well as some photographs of Mesilla, New Mexico. Photographs in the collection that were not taken by Gertrude Fitzgerald include scenes of the Hurley and Santa Rita mines in New Mexico and panoramic shots of Mexican revolutionaries. The collection also contains ephemeral material and a large collection of postcards of El Paso, Texas. The physical makeup of the collection consists mainly of large format negatives and four glass plates along with original photographs.

source: HuggingFaceFW/fineweb-edu


text:
This study on behalf of the Workers' Group of the European Economic and Social Committee aims to analyse early initiatives launched in the context of the European Pillar of Social Rights (EPSR) and to provide the EESC with concrete policy recommendations to ensure its effective implementation.
Four key findings stand out. First, the Pillar has, within a very short time span, relaunched an ambitious EU 'Social Agenda' which has the potential to create new rights for citizens. Second, the Pillar is already strongly influencing the substantive messages of the 2018 cycle of the European Semester. Third, the Social Scoreboard is a step forward but needs further refinement. Fourth, national trade unions seem aware of the Pillar and are generally happy with its content but highly doubtful that they will be involved in its implementation.
To ensure effective implementation of the Pillar, we recommend that it be given adequate financial resources and clearly defined governance tools through an ambitious but realistic roadmap. The EESC should play an important role in monitoring the implementation of the Pillar at EU and national levels and should act as a hub to gather and synthesise national trade unions' and civil society's proposals for effective implementation.

source: openbmb/Ultra-FineWeb


Code Quality Rank: L5
Programming language: Java
License: Apache License 2.0
Tags: Animations
Latest version: v1.1.1
MultiStateAnimation alternatives and similar packages
Based on the "Animations" category.
Alternatively, view MultiStateAnimation alternatives based on common mentions on social networks and blogs.
Do you think we are missing an alternative of MultiStateAnimation or a related project?
Add another 'Animations' Package
Android library to create complex multi-state animations.
[Demo animation](docs/images/demo_1.gif)
A class that allows for complex multi-state animations using Android's AnimationDrawable. It supports both oneshot and looped animation sections. Transitions between sections can be defined, and will play automatically when moving between the defined states. State transitions can be queued asynchronously, and the library will take car of smoothly starting the next animation once the current section is complete.
Add the following dependency to your gradle build file:
 dependencies {
 compile 'com.getkeepsafe.android.multistateanimation:library:1.1.1'
Each animation consists of a series of states. A state has some metadata and a list of frames to draw. A state can also define transitions from other states. A transition is a list of frames that will be played when moving directly from a specified state to the state where the transition is defined.
An animation can be defined either with a JSON file included as a raw resource, or directly in Java code using builders.
Defining an animation with Java code
 // The ID is used in code to specify a section to play
 MultiStateAnimation.SectionBuilder firstSection = new MultiStateAnimation.SectionBuilder("first_section")
 // If true, this section will play once and stop. Otherwise it
 // will loop indefinitely.
 // The number of milliseconds that each frame of this section will
 // play
 // Each frame is the name of an image resource. They will be
 // played in the order added.
 // The frames of a transition will be played before playing
 // the normal frames of this section when transitioning. In
 // this case, the frames for this transition will play if
 // "first_section" is playing when queueTransition("second_section")
 // is called
 MultiStateAnimation.TransitionBuilder transitionFromFirst = new MultiStateAnimation.TransitionBuilder()
 // As a special case, a transition ID of "" is a transition
 // from nothing. It will play if the associated section is the
 // first to ever play.
 MultiStateAnimation.TransitionBuilder transitionFromNothing = new MultiStateAnimation.TransitionBuilder()
 // A section with a single frame and "oneshot" set to true is
 // equivalent to a static image
 MultiStateAnimation.SectionBuilder secondSection = new MultiStateAnimation.SectionBuilder("second_section")
 .addTransition("first_section", transitionFromFirst)
 .addTransition("", transitionFromNothing)
 // Animation should be given an View that will be used to display the animation.
 ImageView view = (ImageView) findViewById(R.id.animationImageView);
 MultiStateAnimation animation = new MultiStateAnimation.Builder(view)
Defining an animation using JSON
As an alternative to using Java code, you can instead define animations using a JSON file stored as a raw resource. The following JSON file defines the same animation as the above Java code.
 "first_section": {
 "oneshot": false,
 "frame_duration": 33,
 "frames": [
 "second_section": {
 "oneshot": true,
 "frames": [
 "transitions_from": {
 "first_section": {
 "frame_duration": 33,
 "frames": [
 "": {
 "frames": [
Then a MultiStateAnimationOjbect can be created in Java:
 ImageView view = (ImageView) findViewById(R.id.animationImageView);
 MultiStateAnimation animationSeries = MultiStateAnimation.fromJsonResource(context, view, R.raw.sample_animation);
Generating JSON animation files automatically
Included in the repo is a [Python 3 script](scripts/generate_animation_json.py) that can assist in generating the JSON for an animation. To use it, place the frames for each section of the animation in a separate folder, the pass those folders to the script.
For example, to generate the JSON file above, create a folder structure like this:
 ├── first_section
 │ ├── first_section_1.png
 │ └── first_section_2.png
 ├── first_to_second_transition
 │ ├── first_to_second_transition_001.png
 │ ├── first_to_second_transition_002.png
 │ └── first_to_second_transition_003.png
 ├── nothing_to_second_transition
 │ ├── nothing_to_second_001.png
 │ └── nothing_to_second_002.png
 └── second_section
 └── second_section_01.png
These folders can be located anywhere in your filesystem. To generate the JSON file, run the script with the folders as arguments:
 python generate_animation_json.py first_section/ second_section/ first_to_second_transition/ nothing_to_second_transition/ --output=sample_animation.json
The script will ask a series of questions about each section, and save the resulting json file to sample_animation.json. You can run python generate_animation_json.py --help to see a full list of arguments
Playing animations
Once the animation object is created via one of the above methods, you can use queueTransition and transitionNow from the GUI thread to start playing the animations.
Sample application
See the [main Activity](samples/src/main/java/com/getkeepsafe/android/multistateanimation/samples/ThreeStateSampleActivity.java) and the [json animation definition](samples/res/raw/sample_animation.json) in the [sample application](samples/) for an example.
Java API
Check out the Javadocs for more API details.
Copyright 2016 KeepSafe Inc.
You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
See the License for the specific language governing permissions and
limitations under the License.
*Note that all licence references and agreements mentioned in the MultiStateAnimation README section above are relevant to that project's source code only.


text:
The Data Availability Report enables researchers to preview the number, demographics, and diagnostic results of RADC study participants before submitting a request for data and/or biospecimens.
Choose up to five criteria below to produce a demographics report giving information on age, sex, race, ethnicity, and education.
- If one criterion is chosen, a demographics report is given for participants matching that criterion.
- If two criteria are chosen, a demographics report is given for participants matching both criteria.
If three to five criteria are chosen, a cross calculation report is given that shows how many participants are available for each combination of the chosen criteria.
Choose the desired combination of criteria to produce the demographics report.


Rodians hail from the Tyrius System of The Mid Rim, their homeworld humid and choked with heavy rain forests teeming with dangerous life forms. In this hostile environment, the Rodians evolved into brutal hunters and killers to survive. As a result, Rodian culture centers around the concept of "The Hunt." Their art glorifies violence and the art of stalking prey. The more intelligent and dangerous a hunter's prey, the more honorable the hunt. Rodians have numerous annual festivals that exists solely to honor such activities.
Since joining the rest of the galaxy's spacefaring Species, the Rodians have come to view bounty hunting as the most honorable profession in existence, and many have found great success in this field.
Rodian Characteristics[edit | edit source]
Rodian NEGAS.jpg
Personality: Rodians tend to be violent, tenacious, and dedicated.
Physical Description: Rodians are humanoid, with multifaceted eyes, a tapered snout, and deep green skin, the average Rodian stands 1.6 meters tall.
Average Height/Weight: A typical Rodian stands at 1.6 meters tall and weighs 60 kilograms.
Age Groups: Rodians age at the following stages:
1-12 Years 13-15 Years 16-35 Years 36-49 Years 50-59 Years 60+ Years
Homeworld: The industrial world of Rodia.
Languages: Rodians speak, read, and write both Rodese and Basic, and many learn to speak Huttese as well.
Example Names: Andoorni, Beedo, Chido, Doda, Greedo, Greeata, Kelko, Navik, Neela, Neesh, Wald.
Adventurers: Rodian adventurers leave their homeworld to improve their skills, hoping to one day return and claim the title of Hunt Master. To this end, they take on roles that allow them to flex their hunting skills and increase their battle prowess, most commonly working as bounty hunters or mercenaries as Soldiers.
Rodian Species Traits[edit | edit source]
Rodians share the following Species Traits:
 - Ability Modifiers: All Rodians receive a +2 bonus to Dexterity, but they suffer -2 penalties to both their Wisdom and Charisma. Rodians are quick and well coordinated, but often act before thinking things through, and are often rude and try to bully others.
 - Medium Size: As Medium creatures, Rodians have no special bonuses or penalties due to their size.
 - Speed: Rodians have a base speed of 6 squares.
 - Heightened Awareness: A Rodian may choose to reroll any Perception check, but the result of the reroll must be accepted, even if it is worse.
 - Low-Light Vision: Rodians ignore Concealment (But not Total Concealment) from darkness.
 - Conditional Bonus Feat: Rodians are taught how to track and survive in the wilderness of Rodia from a very young age. A Rodian with Survival as a Trained Skill gains Skill Focus (Survival) as a bonus Feat.
 - Automatic Languages: All Rodians can speak, read, and write both Basic and Rodese.
 Additional Rodian Species Feats[edit | edit source]
Reference Book: Star Wars Saga Edition Rebellion Era Campaign Guide
Rodian characters have access to the following Species Feats. No Species Feats are considered Bonus Feats for any Heroic Class.
Fringe Benefits Reduce the cost multiplier of goods bought on the Black Market.
Hunter's Instincts Reroll Perception checks, always keeping the better result.
Master Tracker Increase the die type when adding Force Points to a Survival check.


text:
What is the purpose of this Playbook?
The 10-page playbook was developed to help customer-facing employees share accurate, timely, and consistent information with their customers about Acquirer's acquisition of Acquired Co.
What are materials in this playbook?
The following documents are for internal use only. Do not distribute these materials to anyone outside the company:
- Customer Key Messages
- Customer Talking Points
- FAQs: Customer Facing Employees
- FAQs: Customers and Distributors
These documents may be tailored and shared with customers, as approved by your respective business sales & marketing organizations:
- Customer Letter
- Customer Letter Attachment


text:
We use behavioural insights to design nudges leveraging social comparison and assignment of responsibility aimed at reducing electricity consumption in a large provincial government office building with 24 floors. Results from a randomized control trial show that floors participating in a treatment with inter-floor competitions and tips reduced energy consumption by 9%, while those that also included floor-wise 'energy advocates" reduced energy consumption by 14% over a period of 5 months.
Behavioral Economics: Underlying Principles
This paper analyses the impact of income inequality on public good provision in an experimental setting. A sample of secondary school students were recruited to participate in a simple linear public goods game where income heterogeneity was introduced by providing participants with unequal token endowments. The results show that endowment heterogeneity does not have any significant impact on contributions to the public good, and that consistent with models of reciprocity, low and high endowment players contribute the same fraction of their endowment to the public pool.


ChinaSource | Multiple Authors | Kevin Avery
Kevin Avery
Kevin Avery is a freelance writer with an interest in social science, cross-cultural communication and disability advocacy.
Peoples of China
Disability and the Three Traditional Chinese Belief Systems
Buddhism, Taoism and Confucianism
Within Chinese culture, people with disabilities have been stigmatized and devalued. This is the result of beliefs which create stereotypes leading to prejudice and discrimination. With a desire to reduce this stigma, scholars are examining Buddhism, Confucianism, and Taoism to uncover any hidden cultural prejudice and stereotypes causing these attitudes. This is a complex endeavor that requires much sensitivity to cultural nuances. However, the goal is for people to come together in honest dialog and humble sensitivity, unified in purpose and compassion to combat prejudice and discrimination.


in beach volleyball.
 PubMed
 Aagaard, H; Scavenius, M; Jørgensen, U
 1997-04-01
 This study was designed to evaluate the injuries in indoor and in beach volleyball, and to compare the injury pattern in the two different types of volleyball. Injuries in 295 volleyball players were recorded during the beach volleyball season 1993 and during the following indoor volleyball season 1993 to 1994. The method of enquiry was two identical questionnaires. Equal numbers of men and women, elite and recreational players were represented. In beach volleyball 24 injuries were reported and 286 in indoor volleyball, representing an incidence of 4.9 injuries per 1000 volleyball hours in beach volleyball and 4.2 in indoor volleyball. The most frequent injuries were acute injuries located in the ankle and finger and overuse injuries in the knee and shoulder. The injury pattern was different in indoor and in beach volleyball. In beach volleyball most injuries occurred in field defence and in spiking, with overuse injuries in the shoulder as the major site. In indoor volleyball most injuries occurred during blocking and spiking, resulting most frequently in acute finger and ankle injuries, respectively. PMID:_PHONE_
 19. High Performance EVA Glove Collaboration: Glove Injury Data Mining Effort
 NASA Technical Reports Server (NTRS)
 Reid, C. R.; Benson, E.; England, S.; Charvat, J.; Norcross, J. R.; McFarland, S. M.; Rajulu, S.
 2015-01-01
 injured during 11,704 ground EVA training events. Of the 196 glove related injury incidents, 106 related to EVA and 90 to EVA training. Over these 196 incidents, 277 total injuries (126 flight; 151 training) were reported and were then grouped into 23 types of injuries. Of EVA flight injuries, 65% were commonly reported to the hand (in general), metacarpophalangeal (MCP) joint, and finger (not including thumb) with fatigue, abrasion, and paresthesia being the most common injury types (44% of total flight injuries). Training injuries totaled to more than 70% being distributed to the fingernail, MCP joint, and finger crotch with 88% of the specific injuries listed as pain, erythema, and onycholysis. Of these training injuries, when reporting pain or erythema, the most common location was the index finger, but when reporting onycholysis, it was the middle finger. Predictor variables specific to increased risk of onycholysis included: female sex (OR=2.622), older age (OR=1.065), increased duration in hours of the flight or training event (OR=1.570), middle finger length differences in inches between the finger and the EVA glove (OR=7.709), and use of the Phase VI glove (OR=8.535). Differentiation between training and flight and injury reporting during 2002-2004 were significant control variables. For likelihood of time to first onycholysis injury, there was a 24% reduction in rate of reporting for each year increase in age. Also, more experienced crewmembers, based on number of EVA flight or training events completed, were less likely to report an onycholysis injury (3% less for every event). Longer duration events also found reporting rates to occur 2.37 times faster for every hour of length. Crewmembers with larger hand size reported onycholysis 23% faster than those with smaller hand size. Finally, for every 1/10th of an inch increase in difference between the middle finger length and the glove, the rate of reporting increased by 60%. DISCUSSION: One key finding was that
 20. Corneal injury
 MedlinePlus
 ... as sand or dust Ultraviolet injuries: Caused by sunlight, sun lamps, snow or water reflections, or arc- ... a corneal injury if you: Are exposed to sunlight or artificial ultraviolet light for long periods of ...
 1. Spinal injury
 MedlinePlus
 ... head. Alternative Names Spinal cord injury; SCI Images Skeletal spine Vertebra, cervical (neck) Vertebra, lumbar (low back) Vertebra, thoracic (mid back) Vertebral column Central nervous system Spinal cord injury Spinal anatomy Two person roll - ...
 2. Inhalation Injuries
 MedlinePlus
 ... you can inhale that can cause acute internal injuries. Particles in the air from fires and toxic ... and lung diseases worse. Symptoms of acute inhalation injuries may include Coughing and phlegm A scratchy throat ...
 3. Examiner's finger-mounted fetal tissue oximetry
 NASA Astrophysics Data System (ADS)
 Kanayama, Naohiro; Niwayama, Masatsugu
 2014-06-01
 The best way to assess fetal condition is to observe the oxygen status of the fetus (as well as to assess the condition of infants, children, and adults). Previously, several fetal oximeters have been developed; however, no instrument has been utilized in clinical practice because of the low-capturing rate of the fetal oxygen saturation. To overcome the problem, we developed a doctor's finger-mounted fetal tissue oximeter, whose sensor volume is one hundredth of the conventional one. Additionally, we prepared transparent gloves. The calculation algorithm of the hemoglobin concentration was derived from the light propagation analysis based on the transport theory. We measured neonatal and fetal oxygen saturation (StO2) with the new tissue oximeter. Neonatal StO was measured at any position of the head regardless of amount of hair. Neonatal StO was found to be around 77%. Fetal StO was detected in every position of the fetal head during labor regardless of the presence of labor pain. Fetal StO without labor pain was around 70% in the first stage of labor and around 60% in the second stage of labor. We concluded that our new concept of fetal tissue oximetry would be useful for detecting fetal StO in any condition of the fetus.
 4. Finger Length Ratios in Serbian Transsexuals
 PubMed Central
 Vujović, Svetlana; Popović, Srdjan; Mrvošević Marojević, Ljiljana; Ivović, Miomira; Tančić-Gajić, Milina; Stojanović, Miloš; Marina, Ljiljana V.; Barać, Marija; Barać, Branko; Kovačević, Milena; Duišin, Dragana; Barišić, Jasmina; Djordjević, Miroslav L.; Micić, Dragan
 2014-01-01
 Atypical prenatal hormone exposure could be a factor in the development of transsexualism. There is evidence that the 2nd and 4th digit ratio (2D : 4D) associates negatively with prenatal testosterone and positively with estrogens. The aim was to assess the difference in 2D : 4D between female to male transsexuals (FMT) and male to female transsexuals (MFT) and controls. We examined 42 MFT, 38 FMT, and 45 control males and 48 control females. Precise measurements were made by X-rays at the ventral surface of both hands from the basal crease of the digit to the tip using vernier calliper. Control male and female patients had larger 2D : 4D of the right hand when compared to the left hand. Control male's left hand ratio was lower than in control female's left hand. There was no difference in 2D : 4D between MFT and control males. MFT showed similar 2D : 4D of the right hand with control women indicating possible influencing factor in embryogenesis and consequently finger length changes. FMT showed the lowest 2D : 4D of the left hand when compared to the control males and females. Results of our study go in favour of the biological aetiology of transsexualism. PMID:24982993
 5. From frictional fingers to stick slip bubbles
 NASA Astrophysics Data System (ADS)
 Sandnes, Bjørnar; Jørgen Måløy, Knut; Flekkøy, Eirik; Eriksen, Jon
 2014-05-01
 Gas intrusion into wet porous/deformable/granular media occurs in a wide range of natural and engineered settings. Examples include hydrocarbon recovery, carbon dioxide geo-sequestration, gas venting in sediments and volcanic eruptions. In the case where the intruding gas is able to displace particles and grains, local changes in granular packing fraction govern the evolution of flow paths, resulting in complex pattern formation of the displacement flow. Here we investigate flow patterning as a compressed gas displaces a granular mixture confined in the narrow gap of a Hele-Shaw cell. We find a surprising variety of different pattern formation dynamics, and present a unified phase diagram of the flow morphologies we observe. This talk will focus on one particular transition the system undergoes: from frictional fingers to stick slip bubbles. We show that the frictional fluid flow patterns depend on granular mass loading and system elasticity, analogous to the behaviour of the well-known spring-block sliding friction problem.
 6. Ubiquitin interactions of NZF zinc fingers
 PubMed Central
 Alam, Steven L; Sun, Ji; Payne, Marielle; Welch, Brett D; Blake, B Kelly; Davis, Darrell R; Meyer, Hemmo H; Emr, Scott D; Sundquist, Wesley I
 2004-01-01
 Ubiquitin (Ub) functions in many different biological pathways,


text:
Masks of various materials have been used by the Mapuche people for centuries. Numerous stone masks have been excavated from archaeological sites in and around Mapuche lands and can be presumed to be precursors to the Mapuche masks of wood and other materials made more recently. The stone pieces are believed to have been burial masks, but masks of wood, leather, and possibly silver are still used today in various ceremonial contexts. Small maskettes are sometimes employed by the machi in performing healing rituals.
The Mapuche successfully resisted many attempts by the Inca Empire to subjugate them, despite the lack of nationwide organization. They fought against the Spaniards for over 300 years. Initial conquests of land by the Spanish in the late 16th century were thoroughly repulsed by the Mapuche, such that there were areas where Europeans did not return to until late in the 19th century.
The Mapuche are a group of indigenous inhabitants of south-central Chile and southwestern Argentina, including parts of present-day Patagonia. The collective term refers to a wide-ranging ethnicity composed of various groups who shared a common social, religious and economic structure, as well as a common linguistic heritage as Mapudungun speakers. Their influence once extended from the Aconcagua River to the Chiloé Archipelago and spread later eastward to the Argentine pampa. Today the collective group makes up over 80% of the indigenous peoples in Chile, and about 9% of the total Chilean population. They are particularly concentrated in Araucanía. Many have migrated to the Santiago area for economic opportunities.
Argentina was populated by lots of Indian tribes in the early days when that part of South America was being settled by Europeans. None but the Mapuche are still there today.
I apologize for the poor quality of this photo. For awhile I will be trying to find masks from cultures we're not used to seeing.


text:
Lua does not support classes the way that languages like C++, Java and ActionScript do. But Lua is a multi-paradigm language and have roots from prototype-based languages. In Lua, each object can define its own behaviour through metatables. Therefore, it is possible to emulate OO programming and classes in Lua.
(For the detailed discussion of object oriented programming in Lua, please refer to _URL_
Gideros follows the same paradigm in its API design. Each instance created by Gideros API is a Lua table with a metatable attached.
Instances in Gideros is created through
new function. For example, to create
Bitmap and a
local sprite = Sprite.new() local texture = Texture.new("image.png") local bitmap = Bitmap.new(texture) local timer = Timer.new(1000, 0)
Core.class function is used to create your own classes through inheritance. You
can create your own classes like:
MyClass = Core.class()
or inherit from Gideros API's own classes (
Sprite, etc.). For example, you can create your EventDispatcher class as:
MyEventDispatcher = Core.class(EventDispatcher)
By using Inheritance, you can design and implement the visual elements of your game separately:
StartButton = Core.class(Sprite) -- create your own start button class Menu = Core.class(Sprite) -- create your own menu class Player = Core.class(Sprite) -- create your own player class function Player:walk() -- walk logic end function Player:jump() -- jump logic end stage:addChild(Player.new()) -- create and add a player instance to the stage
When an instance is created,
init function is called to do the initialization:
Player = Core.class(Sprite) function Player:init() -- do the initialization of Player instance self.health = 100 self.speed = 3 end local player = Player.new() -- after Player instance is created, init function is called
Whether to use inheritance or not is related to your programming taste. It's possible to implement a whole game without creating custom classes. You can refer to "Jumping Ball" and "Jumping Balls" examples to see the difference between designing your code with classes or not.


text:
The Department for Education (DfE) and the Skills Funding Agency (ESFA) have launched the good estate management for schools (GEMS) guidance and tools, a new manual and toolkit to support schools with good estate management. The resource brings together new and existing guidance on school estate management, and it sets out the following:
- The fundamental policies and procedures needed to manage your school's estate effectively
- Guidance on strategic estate management, organisational oversight, understanding your land and buildings, energy and water management, and managing projects
- Updated guidance on health and safety, compliance and maintenance (replacing existing guidance in essential schools maintenance)
- The skills organisations need access to, links to tools and resources that can help.
The manual is broken down into the following sections:
- Strategic estate management
- Overseeing the estate
- Health and safety
- Maintaining the estate
- Understanding the land and buildings
- Energy and water management
- Estate projects.
Depending on your role, you may not need to review every section. Some sections are of particular relevance to leaders, governors and trustees of schools. Some are aimed more at school business professionals and those involved in the day-to-day management of the estate.
The manual also includes a number of tools to help you assess and manage the estate. This includes the following:
- Organisational self-assessment
- Top 10 estate checks for boards
- Required knowledge and skills
- Tips for managing energy and water usage.
First published 26 April 2018


text:
Chewing gum is a soft, flavored confectionery designed for maximum adherence to minivan carpets. It is also used for freshening breath, blowing bubbles, popping bubbles in order to annoy coworkers, and for reminding smokers that their doctor was right: nicotine is really addictive.
Tree sap vs. Manilkara zapota van Royen
The first gum chewers voluntarily put into their faces the same thing that sticks to our hands for a week after putting up a Christmas tree.Varieties of substances have been chewed for enjoyment by humans for centuries: ancient man chewed aromatic twigs from trees, ancient woman then chewed ancient man for chewing twigs when he should have been hunting wild animals they could chew for food, while the wild animals in turn chewed ancient woman while ancient man was out not hunting them, completing the great, masticating circle of life. Then, somewhere around the mid 1860s, American John Bacon "Yes, That's My Real Middle Name" Curtis and his exemplary 19th-century beard created and sold the first commercial chewing gum, which he named "State of Maine Pure Spruce Gum", an appropriate name considering IT WAS MADE FROM TREE SAP. Yes, the first gum chewers voluntarily put into their faces the same thing that sticks to our hands for a week after putting up a Christmas tree. Around that same time chicle, a rubbery tree sap made from the sapodilla tree, a member of the family Sapotaceae, known botanically as Manilkara zapota van Royen (syns. M. achras Fosb., M.) blah blah science was brought to the US by Mexican President General Antonio de Padua María Severino López de Santa Anna y Pérez de "Long Name" Lebrón. President Long Name gave the gummy sap to his former secretary Thomas Adams (not the Thomas Adams who was the Lord Mayor of London, or the son of U.S. President John Adams, or the Commander-in-Chief of India, or the English organist and composer, or the English bookseller and publisher, or the English Nottingham lace manufacturer and philanthropist, etc.). Adams first intended to use the substance as a replacement for rubber tires, but after realizing no one wanted to drive around on thin, pink wheels that popped every two feet and stuck all over your fenders, he naturally switched to using chicle to manufacture gum. He marketed this first product in 1871 as "Adams New York Chewing Gum" because the name "Most Boring Gum Name In The Universe" was already taken by the aforementioned "State of Maine Pure Spruce Gum", and soon gums such as Chiclets and Black Jack dominated the market.
The dawn of Dubble Bubble, plus: more science
The first successful gum designed specifically for blowing bubbles (previous test versions had caused hideous disfigurement) was invented by Walter Diemer for the Fleer company in 1928 (Official Motto: "Thanks a Lot For Warning Us About The Stock Market Crash, History"). Called "Dubble Bubble", it was an immediate hit among school children because it deliberately misspelled "double" and their teachers couldn't do a thing about it. The 1930s and 40s saw the replacement of chicle with synthetic substances; primarily hydrocarbon polymers such as styrene-butadiene rubber, isobutylene, isoprene copolymer, paraffin wax, blah blah more science. Although flavors and gimmicks, such as dental industry-mandated sugarless gum or bacon gumballs, have been added over the years, modern chewing gum has changed little since its inception, except for the parts about it coming from tree sap and tasting like tree sap and smelling like tree sap and sticking to your face like tree sap and also not being pink.
Chewing gum facts
- The world's oldest piece of chewing gum is over 9,000 years old. And, yes, it tastes horrible.
- Chewing gum while cutting onions can keep you from crying. Conversely, chewing onions while cutting gum causes those around you to laugh uncontrollably.
- If bubble gum gets stuck in your hair, congratulations! You're not bald. You can remove it by rubbing the stuck gum with peanut butter. To remove the peanut butter, sprinkle cornstarch on the area and let stand for 15 minutes. To remove the cornstarch, dab it with chewing gum.
- The largest bubble ever blown was 23 inches in diameter by Susan Williams of Fresno, California, who is still presumed to be floating somewhere over the Pacific Ocean.
- One of bubble gum's most famous icons is Bazooka Joe, who, curiously, is actually armed with a Smith and Wesson Model 460V Revolver and whose real name was "Alphonse LeCribbage".
- The Topps card company began packing gum in their baseball card sets in order to teach kids about the dangers of chewing pink cardboard.
- A common myth is that if you swallow chewing gum a watermelon will grow in your stomach. This, of course, is not true; watermelon's grow in your pancreas. Swallowed gum is processed normally through the digestive system, where it is excreted and used to make circus peanuts.


text:
Study of Hail with C B and Dual Linear Polarization Radar
Liu Liping Xu Baoxiang Wang Zhijun Wang Jun(Lanzhou Institute of Plateau Atomspheric Physics, Chinese Academy of Sciences, Lanzhou 730001 )
This paper presents the calculations of the scattering properties of hydrometeors with different shapes and phases. Based on these properties and ZDR features of rain and clond echos, the dual linear polarization radar RHI data observed during hailstorm processes on August 9 and August 30, 1990 are analysed. We deduced that the area with negative ZDR values corresponded to hail shafts where may appear large oblate hailstones and small conical hailstones, and the area with great positive Z D R values corresponded to raining area. The Z D R greater than 5dB was caused by huge raindrops (D0.5cm). It is possible to detect the presence of hail using ZDR as a criterion. Compared with a S-band radar, the C-band dual linear polarization radar is unique in several aspects : the Z DR values are larger in raining area and smaller and negative in hail shooting area, which are useful for the study of microphysics and spatial structure of storms. The dual linear polarization radar will be impartant to cloud physics and weather modification.


text:
Finding a Hardware Address (Windows)
- Go to the Start menu and select Run.
- Type in winipcfg and press Enter.
- Make sure you are looking at the information for your ethernet card. The pull-down menu should show the model of your ethernet card. It should not say anything about a dial up, PPP, or AOL, adapter. If it does, switch it to your ethernet card. (If your ethernet card is not an option, it may not be properly installed.) The number displayed next to Adapter Address is your hardware address. It should not begin with 44-45.
- Go to a command window by typing cmd or command in the Run text box, available from the Start menu.
- Type ipconfig /all and press Enter.
- Make sure you are looking at the information for the ethernet adapter and not the dial up, AOL, or WAN adapter. The number listed next to Physical Address: is the hardware address. It should not begin with 44-45, nor should it be 00-03-8A-00-00-11.
Note: In Windows XP you must have the ethernet cable plugged in before you attempt to get the hardware address.

source: m-a-p/FineFineWeb


Shortlisted in Campuses and Corporate Gardens in 2021:
Lupin Research Park
Pune, India, the locale of Lupin Research Park, is known for its drastic dry climate and heavy monsoon, causing the land to be semi-arid, where little rain occurs in one season and overly compensates in another. This variation in precipitation consequently leads to hostile conditions for the ecosystem to thrive.
Based on India local farmer's wisdom, we learn how this technique of employing step grading can help slow down and retain water while preventing soil erosion on the existing sloped terrains, at the end, allowing efficient agriculture practice under challenging climate. As a result, this same idea of stepping and undulating surface is applied to the landscape design and water management preparation, making the overall project survive and thrive sustainably under extreme conditions. Along with thoughtful programming, Lupin Research Park offers an ecological friendly environment and microclimate, inviting its employees to gather outside amidst greenery all-day long.
Step Mountain
Lupin's main entrance is introduced as a main pathway starting from one side of the grand steps, cut across and ramped up to form a mountain shape which negotiates a drastic level difference between the road and the building's 1st floor. It helps reduce run-off and soil erosion, offers lounging spaces on those steps while committing 1:12 ramp for people with disabilities. Local tree groves and contrasting shrubs are grown through parts of steps to soften hardscape elements. Moreover, by planting a mono-species terrace of local Silver Oaks give a nice clean visual while staying true to the subtropical forest condition.
Rain Garden Corridor
In order to sustain the dense greenery with less watering, this edging zone of Lupin is made lower to receive run-off water from the whole site, including the roof drainage. PVC-based perforated tanks are constructed along the path to collect water during wet season, and slowly release the excessive to adjacent dried-up underground soil via osmosis reaction on dry season. This becomes a rain garden that naturally dampened all year round as a result of sustainable water management, which helps mitigate unusual precipitation as well. Dense layers of trees varied in sizes and species are also planted along the site boundary, composing a forest-like backdrop and harnessing biodiversity for the campus. Employees can then come out through meandering walking paths, gather privately in timber cabanas and enjoy their times amidst lush and serene nature too.
Lupin Terrace
A large green lawn is created in front of the establishment, where the grand meeting room, a provision for Lupin's major events, is located. Between the grand meeting room and the lawn, there're a reflective pond, flowering meadow and amphitheater terrace, together forming a nice cooling space, sometimes used for training sessions. Soft violet flowers from Jacaranda trees around the area produce large panicles and play a pleasant color contrast to the luscious greenery.
Lupin Terrace also offers a subtle transition from the building to the site entrance as the amphitheater terrace is proposed, connecting different ground levels, yet forming a functional space, while the green lawn is terminated with a series of unique staggering retaining walls. Here, they also function as front feature walls seen from the outside public roadway. Once the sun sets, the lighting illuminates the wall and provides safety usage as well as denoting the place where wholesome combination of forms and functions, blending inside and outside can be experienced.
Farm Terrace
At the back of the building beside the canteen is the Farm Terrace, comprising long communal tables topped with trees and edible garden, inviting people to gather outside amidst crafted agricultural patterns. This emphasizes the blurring between interior and exterior, while fostering interaction between employees, nature and their workplace.
Forest Court
Surrounded by the building on 3 sides, the courtyard is an ideal all-day seating area as it is well protected from harsh sunlight and wind. Pocket seats are distributed among groups of trees surrounded by an immense reflective pond. As there are interactive fountains and water features operated, this then becomes an arrival point that enhances microclimate and provides soothing ambience. At the same time, the adjustable interactive water jet also gives flexibility usage according to any chosen mood, date and time or functions, supporting variety in pace of everyday lives of Lupin's researchers.
Roof Garden
Without restraining greenery only at ground level, the roof garden on the 2nd floor is created. As during the day, employees may not wish to step down to access the main landscape, they can take a quick break here instead and see the overall view of Farm Terrace from above.
Design Director: Prapan Napawongdee
Landscape Architect: Katavet Sittikit, Pat Wongkittipat, Krittaya Ngamkamollert
Horticulturist: Tanee Sawasdee
Photographer: Wison Tungthunya
Project location: Pune, India
Design year: 2015-2016
Year Built: 2017
friends, sponsors, media partners


text:
The Daily Routine Chart provides the perfect visual reminder of your child's morning and evening routines. Firstly, it enables children to build their individual routines, using the task magnets included, promoting ownership of the process. Secondly, the images are colourful and simple in design so there is no confusion as to the type of task expected. Finally, kids can tick off each task as they go using the dry-erase marker. This provides a sense of achievement, whilst promoting confidence and independence.
Each Daily Routine Chart pack includes 1 Daily Routine Chart with hanging loop, with two rows (for morning and evening routines), 36 task magnets, 1 blank magnet and a dry-erase, marker pen. The magnets depict routine tasks that your children carry out upon waking each morning and before bed each night. Furthermore, the simple and colourful designs help kids to easily identify and relate to each task.
The magnetic nature of the chart makes it completely versatile and easy to adjust when the routine changes. Provides a rigid board option for hanging the chart in the child's room or on any wall of the house, to provide an easy reminder of your child's morning and evening routines.
Work the Routine
Children respond well to routine. The Daily Routine Chart is designed to provide children with a visual reminder of what their individual routines look like. It aims to encourage your child to learn and understand the order of tasks in their morning and evening routines. Furthermore it develops independence and confidence in performing these tasks each day.
Each family can individualise their child's / children's routine by using the range of task magnets included. By involving your child in the "routine building" process, they'll develop a sense of ownership of their daily routines. Younger children will enjoy the sense of achievement from completing the tasks "all by themselves". Over time their routines will become second nature, taking the stress out of the busy morning rush and the evening wind down.
For working parents, parents of multiple children, or, parents who enjoy order at the start and end of the day, moderation of your child's behaviour can be achieved by greater understanding of their daily routine. When children know what's expected of them they are more likely to comply with accomplishing the tasks at hand.
Measures: Length 22.5 cm x width 40cm x height (thickness) 1 cm.


NASA Logo
NTRS
NTRS - NASA Technical Reports Server
Back to Results
altitude performance characteristics of tail-pipe burner with variable-area exhaust nozzleAn investigation was conducted in the NACA Lewis altitude wind tunnel to determine effect of altitude and flight Mach number on performance of tail-pipe burner equipped with variable-area exhaust nozzle and installed on full-scale turbojet engine. At a given flight Mach number, with constant exhaust-gas and turbine-outlet temperatures, increasing altitude lowered the tail-pipe combustion efficiency and raised the specific fuel consumption while the augmented thrust ratio remained approximately constant. At a given altitude, increasing flight Mach number raised the combustion efficiency and augmented thrust ratio and lowered the specific fuel consumption.
Document ID
_PHONE_
Document Type
Other
Authors
Jansen, Emmert T
Thorman, H Carl
Date Acquired
August 16, 2013
Publication Date
August 11, 1950
Report/Patent Number
NACA-RM-E50E29
Distribution Limits
Public
Copyright
Work of the US Gov. Public Use Permitted.
Keywords
TURBINES, GAS - AFTERBURNING
COOLING - GAS-TURBINE SYSTEMS
ENGINES, TURBOJET
Available Downloads
NameType _PHONE_.pdf STI


text:
Quality of Life Model
Quality of Life (QoL) refers to the experiences one has on a daily
basis. High quality refers to being engaged with others in meaningful
daily activities and having a positive experience.
of Life is a subjective image that differs for everyone.
How you define quality in your life may be different than how I
define quality in mine. However,
each of us has the opportunity to define and
carry out our own values—which enables us to experience a high quality of life.
This right is overlooked in the lives of many of the
Individuals we serve. The Quality of Model was developed to
implement the principles of Gentle Teaching, giving Individuals with
disabilities the right to define and carry out their own values.
At Globe Star, we aim to mentor Individuals with disabilities
in achieving a quality of life that fosters interdependence, or the quality of
one's life with help.
The QoL of the Individual
of Life Values
Companionship and Community
of Life Elements
of Life Assets
The QoL of the Caregiver
a Spirit of Gentleness
The QoL of the Community
the Power of the Heart
Overview of the QoL Model
State Model 460


text:
Watch a video to find out.
Stay logged in
Go to Navigation
Go to Content
Go to Search
Search the collections
Male Figure (Tiki)
Barkcloth Panel (Siapo)
Browse current and upcoming exhibitions and events.
This artwork is currently on display in Gallery 353
Although most Polynesian peoples appear to have made and used human images, few such objects have survived to the present day. Most were destroyed under the influence of Christian missionaries, who viewed such sculptures as "graven images." Small female figures in ivory were known from the Tongan archipelago as early as the late eighteenth century. Formerly referred to as goddesses, these figures are now thought to represent important female ancestors. A number of Tongan ivories were traded to the neighboring Fiji islands, where they were used during religious rites. This particularly expressive example was collected on the Fijian island of Viti Levu by the Reverend Cyril G. Hawdon in 1868.
Collected by Cyril G. Hawdon, Viti Levu, Fiji, in 1868; [John J. Klejman, New York, until 1957]; Nelson A. Rockefeller, New York, 1957, on loan to The Museum of Primitive Art, New York, 1957–1978
© 2000–2013 The Metropolitan Museum of Art. All rights reserved.


text:
Top Three Reasons New Seedings Fail
Laid out here are the top 3 (but not the only) reasons new pasture seedings can fail. Pastures are a long-term investment and getting them established is the biggest hurdle. Let's see how to jump it…
Like many people, small grass seedlings do not like crowds. They strongly dislike shade when trying to establish. Desirable or undesirable species that grow faster than newly planted grass can cause too much shade for the seedling to overcoming. Having just formed, the seedling will not have enough root reserves to pull from to outgrow lack of sunlight for an extended period of time.
When interseeding into existing pasture, a similar problem can occur with the already established species. This is why our recommended formula for interseeding into an existing stand is: Graze/Cut → Drill in new species → Graze/Cut when established stand begins to fill in. This sequence gives new seedlings the highest amount of light to establish and boost your pasture stand.
Seed Bed Prep –
Not giving a proper seed bed for new plants to establish in is a great way to start your new seeding off poorly. Treat it like the cash crop it is! No one would broadcast their corn, would they? Even in no-till situations, shattering a small section of that topsoil where the seed is places is crucial for giving that plant a strong start. That seed needs a tilthy soil area to send new roots down and healthy shoots up.
Use the drill, coulters, and seed depth that are right for the conditions you are seeding into and type of pasture species that you are planting.
Heavy rain, no rain, cold snap, hot streak. All of these situations can be detrimental to your new seedlings trying to germinate, root down, and produce above ground growth. At the end of the day, there really is no way to foresee some of these conditions unless you have a really good weather reporter or have a direct phone line to the Big Guy – if that's the case, we would love to do a conference call before every planting season! _PHONE_)
Keep following Beyond Agronomy for more take-away tips on how to successfully establish pastures!


Swagger Codegen for Eiffel
by javier (modified: 2018 Jun 14)
Swagger Codegen for Eiffel
What's Swagger RESTful API Documentation Specification?
The Swagger specification (lately renamed as OpenAPI Specification) offers a language-agnostic approach for describing RESTful APIs.
In a few words it provides:
 - API Design: A simple and powerful representation for your APIs.
 - API Consumer: An automated way to generate API clients for third-party RESTful APIs using Swagger specification.
 - API Producer: An automated way to generate server stubs from an API specification.
What's Swagger code generator?
It's an Open-source project which allows generation of API client libraries (SDK generation), server stubs and documentation automatically given an OpenAPI Spec.At the moment we only have support for API client code generator.
Getting Started with Swagger code generator
First, check the following document to get started with Swagger code generator.
Generating Client Side Code
One of the main advantages of Swagger code generator to wrap API clients is that it reduces the time to write glue code and API documentation. Swagger code generator enables us to automate this process using a language agnostic approach.
Generating Eiffel API clients
To generate a client API in Eiffel, the command line tool swagger-codegen is used as follows: Here we will describe the options we are using to run the command.
-i | --input-spec -l | --lang -o | --output


text:
Can a tempered glass break?
Breakage of some tempered glass sheets may occur in the absence of obvious causes due to inclusions of nickel sulfide during the float glass manufacturing process.
The HST – Heat Soak Test furnace was introduced to offer customers greater guarantees of quality because it significantly reduces the risk of spontaneous breakage of the tempered glass.
The test consists of three main phases.
During the first phase, the temperature inside the furnace is gradually raised to about 280°. This is followed by a temperature maintenance process that accelerates the breakage of the tempered glass panels with the presence of Nickel Sulfide, and the subsequent final phase of cooling and discharge.


text:
Science Fair Project Encyclopedia
Battle of the Kentish Knock
The Battle of the Kentish Knock (also known as the Battle of the Zealand Approaches) was a naval battle of the First Anglo-Dutch War fought on 8 October 1652 near the shoal called the Kentish Knock in the North Sea about 30 km from the mouth of the river Thames.
Dutch Admiral Maarten Tromp had been suspended after his failure to bring the English to battle off the Shetland Islands in August, and replaced by Admiral Witte de With, who saw an opportunity to concentrate his forces and gain control of the seas. He set out to attack the English fleet at anchor at the Downs near Dover on 5 October 1652, but the wind was unfavourable.
When the fleets finally met on 8 October, the United Provinces had 57 ships; the Commonwealth of England 68 ships under General at Sea Robert Blake. Action was joined at about 17:00. The English ships were larger and better armed than their opponents and by nightfall two Dutch ships had been captured and about twenty — mostly commanded by captains from Zeeland who resented the domination of Holland — had broken off the engagement. De With withdrew the rest of his force with many casualties.
The Dutch recognized after their defeat that they needed larger ships to take on the English, and instituted a major building program that was to pay off in the Second Anglo-Dutch War.
The contents of this article is licensed from _URL_ under the GNU Free Documentation License. Click here to see the transparent copy and copyright details


text:
- 1 How much money does a school bus driver make in NC?
- 2 What is a bus drivers hourly rate?
- 3 What state has the highest paid bus drivers?
- 4 Who drives the bus?
- 5 How do I train to be a bus driver?
- 6 How much do school teachers make?
- 7 What do bus drivers earn a year?
- 8 How much does a coach driver get paid?
- 9 How long does it take to become bus driver?
- 10 Do Garbage truck drivers make good money?
- 11 How many school bus drivers are there in the United States?
- 12 How much do busses cost to make?
How much money does a school bus driver make in NC?
How much does a School Bus Driver make in North Carolina? The average School Bus Driver salary in North Carolina is $33,792 as of July 28, 2021, but the range typically falls between $27,285 and $41,187.
What is a bus drivers hourly rate?
Entry-level bus drivers usually earn between minimum wage and $22 an hour. Experienced bus drivers can earn between $22 and $24 an hour.
What state has the highest paid bus drivers?
The states and districts that pay Bus Drivers the highest mean salary are New York ($62,060), Washington ($57,880), Alaska ($55,550), Massachusetts ($54,720), and California ($51,700).
Who drives the bus?
A person who drives bus is called DRIVER.
How do I train to be a bus driver?
To become a bus or coach driver, you will need to complete training for a Passenger Carrying Vehicle (PCV) licence and the Driver Certificate of Professional Competence (CPC Driver). To start training with a company, you must hold a full EU driving licence and be aged at least 18.
How much do school teachers make?
How Much Does a High School Teacher Make? High School Teachers made a median salary of $61,660 in 2019. The best-paid 25 percent made $79,820 that year, while the lowest-paid 25 percent made $49,060.
What do bus drivers earn a year?
The average London salary is £41,500 a year. The average hourly bus driver rate has been calculated as £10.18 an hour compared with the London Living Wage of £9.15 an hour, which Boris Johnson endorses as the minimum required for a decent standard of living in the high cost capital.
How much does a coach driver get paid?
Start on £12.65 per hour, rising to £13.81 per hour after two years employment.
How long does it take to become bus driver?
How long will it take to become a bus driver with Go‑Ahead London? Your initial licence acquisition training will last approximately 7-8 weeks. Our driver training programme is part of a "Level 2 Passenger Transport Driver – Bus" apprenticeship programme.
Do Garbage truck drivers make good money?
How much does a Garbage Truck Driver make in California? The average Garbage Truck Driver salary in California is $47,863 as of July 28, 2021, but the range typically falls between $40,790 and $56,238.
How many school bus drivers are there in the United States?
There are over 218,619 school bus drivers currently employed in the United States. 53.3% of all school bus drivers are women, while only 42.7% are men. The average age of an employed school bus driver is 56 years old.
How much do busses cost to make?
The first 600 new Routemasters cost TfL £212.7m, that's £354,500 per bus, the next 200 cost £69.9m a slight discount at £349,500 per bus. But look at the cost of an equivalent double decker bus and it all becomes a bit murky.


text:
Points to Note:
- High temperature, exposure under the sun, friction and force etc will cause the balloon to deflate or explode.
- Parental guidance is recommended for children to use the balloons.
- Please discard defected balloons immediately.
- Please use air pump for inflating the balloons and beware of balloons exploding due to over-inflation.
- Foil is not stretchy so please don't inflate the balloons too much.
- Beware of thermal expansion and contraction under different weather conditions.
- If there are small holes in the balloon and causes deflation, one could use tape to cover the holes and that should do the trick.
- Avoid any sharp objects and edges when placing the balloons.
- Regular air pump will NOT float the balloons. Helium could float larger size balloons.
- For regular air filled balloons, they could be stick to various surface by tape or hang by wire.
- If air could not go through at the opening tab, use a straw and insert until the blockage is cleared. Remove straw and continue with air filling.
Adult supervision is required as uninflated balloons can be a choking hazard. Keep uninflated balloons out of reach from children and discard broken balloons. Do not inhale helium gas at all time, it can be a health hazard.


text:
A recent study in the SCI's Journal of the Science of Food and Agriculture shows us how winemaking leftovers could brighten up our gelatine sweets, without breaking the bank, and toss in some health perks to boot.
The sludge that's left once wine's fermented, called wine lees, piles up to 2.5 million tons worldwide each year. This gunk could harm the environment if mishandled, but turns out, it's quite a handy addition to stuff like yoghurt, ice cream, and yes, even burgers; it boosts nutrition and ups their game.
Sweets made from gelatine are part of an industry worth a hefty $187 billion since last year and it ain't slowing down. But get this – nobody thought to mix wine lees into gelatine treats till now. The folks running this study found that not only do these lees make jellies feel better on your tongue but they also sprinkle in some extra tasty notes.
Let's face it: we love colorful candy. Industry's big on adding dyes 'cause eye-candy sells. Trouble is, those man-made colors may smell plain, lack health goodies, and sometimes pack nasty surprises.
Enter wine lees – chock-full of anthocyanins (those are good for you) – which got researchers thinking they might hit two birds with one stone: jazz up our jelly sweets naturally and throw in a bunch of health benefits.
We're splashing more cash on coloring food than ever before—it might hit $4.77 billion come 2026. The author Kaynarca points out we can't get enough of products stamped 'natural', so these budget-friendly wine lees could just be the ticket.
This isn't the end of the road for wine lees. Packed with phenolics and antioxidants that can fend off heart disease and cancer, it looks like they're ripe for a spot in dietary supplements and snacks that do more than just silence your tummy rumbles.


curling (n.)
"action of turning, bending, or forming into ringlets," mid-15c., verbal noun from curl (v.). Curling-iron "rod of iron to be used hot for curling the hair" is from 1630s.
The game played with stones on ice, originally Scottish, is so-called by 1610s, but the sense connection is obscure. "The name appears to describe the motion given to the stone" [OED]. Evidence of the sport dates to the early 16c. in Scotland; written accounts of the game date to the 1540s. A similar game is described from c. 1600 in Flanders.
Others are reading
Definitions of curling from WordNet
curling (n.)
a game played on ice in which heavy stones with handles are slid toward a target;
curling (adj.)
(of hair) making curls or having been made to curl;
Synonyms: curled


text:
Galleries: Sacred Masculine
The sun is the source of almost all the earth's electromagnetic spectrum and light is a tiny portion of that spectrum. Life on earth has evolved to be able to see these different wavelengths as colours. The colours of the rainbow. Throughout history a solar eclipse has been a time of fear and then thankfulness as the light returns bringing the magic of colour.


) { ret = -EIO; goto error; }
 text[strlen(&text[0]) - 1] = '\0'; /* remove \n */ // <=
 ....
}
PVS-Studio warning: V1010 Unchecked tainted data is used in index: 'strlen(& text[0])'. sendmail.c 102
Let's start with considering what exactly the fgets function returns. In case of successful reading of a string, the function returns a pointer to this string. In case if end-of-file is read before at least one element, or an input error occurs, the fgets function returns NULL.
Thus, the expression NULL == fgets(....) checks if the input received is correct. But there is one detail. If you pass a null terminal as the first character to be read (this can be done, for example, by pressing Ctrl + 2 in the Legacy mode of the Windows command line), the fgets function takes it into account without returning NULL. In doing so, there will be only one element in the string supposed for writing which is \0'.
What will happen next? The expression strlen(&text[0]) will return 0. As a result, we get a call by a negative index:
text[ 0 - 1 ] = '\0';
As a result, we can crash the program by simply passing the line termination character to the input. It is rather sloppy and it could potentially be used to attack systems that are using Embox.
My colleague who was developing this diagnostic rule even made a recording of an example of such an attack on the NcFTP project:
I recommend checking out if you still do not believe that it might happen :)
The analyzer also found two more places with the same error:
 - V1010 Unchecked tainted data is used in index: 'strlen(& from[0])'. sendmail.c 55
 - V1010 Unchecked tainted data is used in index: 'strlen(& to[0])'. sendmail.c 65
MISRA
MISRA is a set of guidelines and rules for writing secure C and C++ code for highly dependable embedded systems. In some way, this is a set of guidelines, following which you will be able to get rid of so called «code smells» and also protect your program from vulnerabilities.
MISRA is used where human lives depend on the quality of your embedded system: in the medical, automotive, aircraft and military industries.
PVS-Studio has an extensive set of diagnostic rules that allow you to check your code for compliance with MISRA C and MISRA C++ standards. By default, the mode with these diagnostics is turned off, but since we are looking for errors in a project for embedded systems, I simply could not do without MISRA.
Here is what I managed to find:
/* find and read symlink file */
static int ext2_read_symlink(struct nas *nas,
 uint32_t parent_inumber,
 const char **cp) {
 char namebuf[MAXPATHLEN + 1];
 ....
 *cp = namebuf; // <=
 if (*namebuf != '/') {
 inumber = parent_inumber;
 } else {
 inumber = (uint32_t) EXT2_ROOTINO;
 }
 rc = ext2_read_inode(nas, inumber);
 return rc;
}
PVS-Studio warning: V2548 [MISRA C 18.6] Address of the local array 'namebuf' should not be stored outside the scope of this array. ext2.c 298
The analyzer detected a suspicious assignment that could potentially lead to undefined behavior.
Let's take a closer look at the code. Here, namebuf is an array created in the local scope of the function, and the cp pointer is passed to the function by pointer.
According to C syntax, the name of the array is a pointer to the first element in the memory area in which the array is stored. It turns out that the expression *cp = namebuf will assign the address of the array namebuf to the variable pointed by cp. Since cp is passed to the function by pointer, a change in the value that it points to will affect the place where the function was called.
It turns out that after the ext2_read_symlink function completes its work, its third parameter will indicate the area that the namebuf array once occupied.
There is only one slight hitch: since namebuf is an array reserved on the stack, it will be deleted when the function exits. Thus, a pointer that exists outside the function will point to the freed part of memory.
What will be at that address? No one can say for sure. It is possible that for some time the contents of the array will continue to be in memory, or it is possible that the program will immediately replace this area with something else. In general, accessing such an address will return an undefined value, and using such a value is a gross error.
The analyzer also found another error with the same warning:
 - V2548 [MISRA C 18.6] Address of the local variable 'dst_haddr' should not be stored outside the scope of this variable. net_tx.c 82
Рисунок 6
Conclusion
I liked working with the Embox project. Despite the fact that I did not cite all the found errors in the article, the total number of warnings was relatively small, and in general, the project code is of high quality. Therefore, I express my gratitude to the developers, as well as to those who contributed to the project on behalf of the community. You did great!
On this occasion, let me send my best to the developers. Hope that it's not very cold in St. Petersburg right now :)
At this point, my article comes to an end. I hope you enjoyed reading it, and you found something new for yourself.
If you are interested in PVS-Studio and would like to independently check a project using it, download and try it. This will take no more than 15 minutes.
Tags:EmboxPVS-StudioCembedembedded systemsmicrocontrollersoperating systemsLinux
Hubs: PVS-Studio corporate blog C Programming microcontrollers Development for IOT
+3
178 0
Leave a comment
Top of the last 24 hours


between t F and t 1 ) if the following inequality is satisﬁed: b F +1 > ∑ ∑ F i=1 F i=1 ci−1bci−1 i . (7) As we can see, the lower bound on farm size is a weighted mean of the farm sizes already in thealliance. Moreover, the weights depend on the position where the new farm is to be inserted. It is interesting tofollow how the insertion point inﬂuences minimum size. For instance, consider Fig- ure 11, which shows theminimum size of a new farm as a function of the insertion point. The horizontal axis shows the farm in the ringbefore which the new one would be inserted. For instance, if the farm after the new one is 3 then the new farmwould be inserted be- tween farms shows the 2 and 3, pointing minimum size as to required t 2 . The verticalaxis by Equation 7. For instance, if the new farm is inserted before farm 1 the minimum size is only 4216,whereas if inserted before farm 7, the minimum size is 6167.6500 6000 5500 5000 4500 1 2 3 4 5 6 7 8 9 10 Farm after New Figure 11: Minimum farm size as function of thein- sertion point in a ring. 5.2.2 Alliances with Complete Cores Let us also investigate when it is beneﬁcial to let anewcomer join an existing complete-core alliance. Un- fortunately, it turns out that the answer for completelyconnected targets is not as straightforward as it is for rings. In this case, a newcomer with b F +1 boosting pagesis welcome (i.e., it increases every existing tar- get's score) only if it satisﬁes the following inequalities for i =1,...,F: (1 − c)Fb i + c ∑ F j=1 +1 ∑ F j=1 F + c b j ≥ (1 − c)(F − 1)b i + c F + c − 1 b j . Simplifying the terms weget an inequality for each b i : b F+1 ( ∑ F j=1 b j ) − (1 − c)b i F + c − 1 . Fortunately, a closer look at theinequalities reveals that it is enough to satisfy one of them in order to also satisfy all the rest: Theorem 6 Theinequality corresponding to the smallest farm already in the alliance determines alone the minimum size of thenewcomer farm. It follows that the lower bound on the number of boosting pages for the newcomer is given bythe in- equality b F+1 ≥ ( ∑ F j=1 b j ) − (1 − c)minF i=1 F + c − 1 {b i } . (8) From this result, we can ﬁnd aconvenient approxi- mate lower bound to the size of the new farm. Let us introduce η ≥ 1 so that ηb∗corresponds to the arith- metic mean of farm sizes in the alliance. Then, the previous inequality can be written asb F+1 ≥ ≥ Fηb∗ F − + (1 − c)b∗ c − 1 = Fη F + + c c − − 1 1 b∗ . As F ≫ (c − 1), we can safely assume that Fη + c−1F+c−1⪆ η.Hence, if the new farm satisﬁes Equation 8, it also satisﬁes ηb∗ is very b F+1 close ≥ ηb∗, to (but and below) thecurrent the lower average bound farm on size the new farm's minimum size. To illustrate the previous results,consider the al- liance of two interconnected farms with k = 20 and m = 10 boosting pages. It makes sense toaccept a third and form a complete-core alliance if { t 3 ≥ 15.4054 for farm with 10 boosting pages, t 3 ≥ 14.5946for farm with 20 boosting pages. Therefore, the third farm should have at least 16 boosting pages. 5.3 Leavingan Alliance We may also ask: When does it make sense for a farm that is part of an existing alliance to split oﬀfrom the alliance and continue to exist as a stand-alone farm instead? We have seen a lower PageRank in a inFigure ring than 9 it that would target have t 10 had had if it were alone. Our intuition is that the contribution offarm 10 to the others is too large, and it does not receive enough contribution from the others in return. Let us
 7. 7. formalize this intuition by deriving the appro- priate inequalities for rings and alliances with complete cores. 5.3.1Web Rings A farm should leave an alliance if the PageRank of its target is lower than it would be when the farmwere unconnected to others, and had an optimal internal structure as shown in Figure 1. The correspondinginequality for the ﬁrst farm in a ring is cb 1 + 1 (1 + c)N ∑ ≥ N F i=1 cib i + N 1 , with the solution b 1 ∑ F i=1 ci−1≥ cF − c(1 − c2 c2) − ∑ cF F i=1 −1 cib i+1 . (9) For instance, farm 1 should have 11389 boosting pages for it tomake sense to leave the ring. On the other hand, the limit for farm 10 is 9091. As its size is 10000, which isabove the limit, the PageRank of farm 10's target is lower than it would be if the farm were unconnected. 5.3.2Alliances with Complete Cores Similarly, it makes sense for farm 1 to leave an alliance with complete core if thefollowing inequality is satis- ﬁed: cb 1 + 1 (1 + c)N ≥ c(1 − c)(F F − + 1)b c 1 − + 1 c2 ∑ F i=1 b i + N 1 .The solution is b 1 ≥ F + c − 1 + (1 + c) ∑ F i=1 b i c2(F − 2) . (10) Here the diﬀerences between the minimumsizes for the various farms are less than they were for web rings, as the contributions get distributed moreuniformly. For instance, the limit for farm 1 is 14693, while for farm 10 is 12445. As none of the farms reachesthe size limit in Figure 9, it makes sense for all of them to stay in the alliance. 5.4 Adding More Boosting PagesAnother situation that might arise is when a spammer participating in an alliance wishes to add more boost- ingpages to its own farm. Such increase in the number of boosting pages increases the contribution of that farm toits own target and all others in the alliance, following the patterns shown in Figure 10. Obviously, the more newboosting pages are added, the closer the farm gets to the limit for leaving, as stated in Inequal- ities 9 and 10.The question is, given the current size of farm i, how many pages need to be added to farm i before it is betteroﬀ on its own? We can ﬁnd the answer to this question by tak- ing a look at the diﬀerence between the minimumsize as determined by Inequalities 9 and 10 and the cur- rent size of the farm. Figure 12 presents the corre-sponding results for our 10 spam farms connected ei- ther in a ring or in an alliance with complete core. Thehorizontal axis shows farm numbers, while the vertical axis represents the minimum number of addi- tionalboosting pages a spammer should add, so that the target PageRank after leaving the alliance would be higherthan the PageRank when staying in the al- liance. For instance, if farm 3 with a current number of 3000 boostingpages would receive approximately 10000 more boosting pages, it could achieve higher target PageRank bysplitting oﬀ from a complete-core alliance than staying within it. Please note that farm 10 is already above thelimit for the ring structure. In such an instance, the spammer might want to leave the alliance, drop someboosting pages, or charge the others for the "loss" incurred due to staying in the alliance. 6 Generalized LinkSpam Structures Our analysis so far has focused on optimal spam farms and how they can beinterconnected. However, the use of optimal structures makes it easier to detect spam farms (see Section 7), sospammers might try to de- viate from the best structures, even if the rankings of their target pages decreasesomewhat. Still, to avoid losing too much PageRank, spammers may not want to deviate too much. This meansthat "real" structures will still resemble the ones we have studied.15000 Ring 12500 10000 Complete 7500 5000 2500 0 1 2 3 4 5 6 7 8 9 10 Farm Number Figure 12: Additionalboosting pages required before leaving. 1 5 p q t 6 7 2 3 Figure 13: A spam alliance with irregular structure. Toillustrate, consider the graph in Figure 13. What seems to be an irregular, convoluted structure at ﬁrst, is in factan alliance of seven spam farms, and can be analyzed as such. For instance


text:
Chinese Luogu Percussion Ensembles
The Lion's Roar is an exciting introduction to the fire and fury of traditional percussion ensembles. For the first time in English, readers are presented with the cultural and historical background of the tradition, an overview of instruments, and transcriptions for eleven ensembles, four of which include songs featuring melody instruments and Chinese words.
The text is engaging and easy to follow, and the ensembles are appropriate for use by groups from elementary school through adult. Music and social studies faculty, students of Chinese music and culture, and ethnomusicologists will find The Lion's Roar fascinating, thorough and very accessible.
Ensembles include: Lion Dances, Dragon Dance, Festival Parade, Flower-ball Dance, processionals, and others.
The 8.5" x 11" book includes:
- Copy-OK transcriptions for each piece
- Mnemonics (chanted rhythm patterns) for each piece
- Step-by-step guide to mastery and performance
- Cultural Context
- Guides for adapting classroom instruments
- 16 photographs; paper-cuts, drawings
- Glossary and Pronunciation Guide
The companion audio recording includes:
- Chinese ensemble directed by Han
- Mnemonics and performances as written in the book
- Every selection in the book is on the recording
Set of 13 full color downloadable images (created from the original slides) with teacher's guide includes photos of:
- Traditional Chinese instruments
- Performing ensembles
- Lion Dance
Downloadable PDFs, Performance/
(both Print and Downloadable versions: 66.3MB download)


text: Benjamin R. Doolittle, M.D. '97, M.Div. '97, HS '02, assistant professor of medicine (general medicine) and pediatrics at the School of Medicine, was one of 53 nominees for the 2006 Association of American Medical Colleges Humanism in Medicine Award. The nomination by medical students is recognition of a candidate as a positive and caring role model. Five characteristics are considered: mentoring skills, compassion and sensitivity, collaboration, community service activity and observance of professional ethics.


9. Defining New Scheme Primitives
 In Elk, there exists a one-to-one relationship between Scheme primitives and C functions: each Scheme primitive--whether predefined or user-defined--is implemented by a corresponding C function. This includes special forms, which are treated as a special kind of primitives in Elk. Extensions and applications use the function Define_Primitive() to register a new Scheme primitive with the interpreter, supplying its name and the C function that implements it. In case of dynamically loadable extensions or application modules, the calls to Define_Primitive() are placed in the extension initialization functions that are called automatically as the object file is loaded. Define_Primitive() is declared as
void Define_Primitive((Object (*func)()), const char *name,
 int minargs, int maxargs,
 enum discipline disc);
The arguments are:
func
a pointer to the C function implementing the new primitive;
name
the name of the primitive as a null-terminated C string;
minargs
the minimum number of arguments accepted by the primitive;
maxargs
the maximum number of arguments (identical to minargs in most cases);
disc
the calling discipline (usually EVAL).
 Define_Primitive() creates a Scheme variable of the specified name in the current (i.e. the caller's) lexical environment and binds it to the newly created procedure. Each C function that implements a primitive has a return type of Object and, for a calling discipline of EVAL, zero or more arguments of type Object which are bound to the evaluated arguments passed to the Scheme primitive when it is called. The calling discipline must be one of the following:
EVAL
The primitive expects a fixed number of arguments; minargs and maxargs must be identical[note 2] .
VARARGS
The primitive has a variable number of arguments, and the underlying C function is called with an argument count and an array of arguments. Defining primitives with a variable number of arguments will explained in more detail in section @(ch-varargs).
NOEVAL
The arguments are passed as a Scheme list of unevaluated objects--a single argument of the type Object. Primitives using this discipline will then use Eval() as described in section @(ch-funcall) to evaluate some or all of the arguments. NOEVAL is only rarely used (with the exception of the built-in special forms of Elk); extensions and applications mostly use macros as a more convenient way to defined new syntactical forms.
Figure @(defprim) shows a simple example for defining a new Scheme primitive.
#include "scheme.h"
Object p_vector_reverse(Object vec) {
 Object tmp, *s, *t;
 Check_Type(vec, T_Vector);
 for (s = VECTOR(vec)->data, t = s+VECTOR(vec)->size; --t > s; s++)
 tmp = *s, *s = *t, *t = tmp;
 return vec;
}
void elk_init_vector(void) {
 Define_Primitive(p_vector_reverse, "vector-reverse!", 1, 1, EVAL);
}
Figure 2: Defining a new Scheme Primitive
 The primitive vector-reverse! defined by the example extension reverses the elements of a Scheme vector in place and returns its argument (note the final exclamation mark indicating the destructive operation). Check_Type() is a simple macro that compares the type field of the first argument (an Object) with the second argument and signals and error if they do not match. This macro is used primarily for type-checking the arguments to Scheme primitives. A call to the macro Check_Mutable() with the vector as an argument could have been inserted before the loop to check whether the vector is read-only and to automatically raise an error if this is the case. The example code forms a complete extension including an extension initialization function and could be linked with the interpreter, or loaded dynamically into the interpreter as follows:
% cc -c -I/usr/elk/include vec.c; makedl vec.o vec.o
% scheme
> (load 'vec.o)
> (define v '#(hello word))
v
> (vector-reverse! v)
#(world hello)
> v
#(world hello)
>
9.1. Making Objects Known to the Garbage Collector
 Consider the non-destructive version of the primitive vector-reverse shown in Figure @(vecrev1), which returns a new vector instead of altering the contents of the original vector.
Object p_vector_reverse(Object vec) {
 Object ret;
 int i, j;
 Check_Type(vec, T_Vector);
 ret = Make_Vector(VECTOR(vec)->size, False);
 for (i = 0, j = VECTOR(vec)->size; --j >= 0; i++)
 VECTOR(ret)->data[i] = VECTOR(vec)->data[j];
 return ret;
}
Figure 3: Non-destructive Scheme primitive vector-reverse
 The code in Figure @(vecrev1) is identical to that shown in Figure @(defprim), except that a new vector is allocated, filled with the contents of the original vector in reverse order, and returned as the result of the primitive. Make_Vector() is declared by Elk:
Object Make_Vector(int size, Object fill);
size is the length of the vector, and all elements are initialized to the Scheme object fill. In the example, the predefined global variable False is used as the fill object; it holds the boolean Scheme constant #f (any Object could have been used here).
 Although the C function may look right, there is a problem when it comes to garbage collection. To understand the problem and its solution, it may be helpful to have a brief look at how the garbage collector[note 3] works (the following description presents a simplified view; the real algorithm is more complex). In Elk, a garbage collection is triggered automatically whenever a request for heap space cannot be satisfied because the heap is full, or explicitly by calling the primitive collect from within Scheme code. The garbage collector traces all ''live'' objects starting with a known root set of pointers to reachable objects (basically the interpreter's global lexical environment and its symbol table). Following these pointers, all accessible Scheme objects are located and copied to a new heap space in memory (''forwarded''), thereby compacting the heap. Whenever an object is relocated in memory during garbage collection, the contents of the pointer field of the corresponding C Object is updated to point to the new location. After that, any constituent objects (e.g. the elements of a vector) are forwarded in the same way.
 As live objects are relocated in memory, all pointers to an object need to be updated properly when that object is forwarded during garbage collection. If a pointer to a live object were not in the root set (that is, not reachable by the garbage collector), the object would either become garbage erroneously during the next garbage collection, or, if it had been reached through some other pointer, the original pointer would now point to an invalid location.[note 4] This is exactly what happens in the example shown in Figure @(vecrev1).
 The call to Make_Vector() in the example triggers a garbage collection if the heap is too full to satisfy the request for heap space. As the Object pointer stored in the argument vec is invisible to the garbage collector, its pointer field cannot be updated when the vector to which it points is forwarded during the garbage collection started inside Make_Vector(). As a result, all further references to VECTOR(vec) will return an invalid address and may cause the program to crash (immediately or, worse, at a later point). The solution is simple: the primitive just needs to add vec to the set of initial pointers used by the garbage collector. This is done by inserting the line
GC_Link(vec);
at the beginning of the function before the call to Make_Vector(). GC_Link() is a macro. Another macro, GC_Unlink, must be called later (e.g. at the end of the function) without an argument list to remove the object from the root set again. In addition, a call to GC_Node (again without an argument list) must be placed in the declarations at the beginning of the enclosing function or block. Figure @(vecrev2) shows the revised, correct code.
Object p_vector_reverse(Object vec) {
 Object ret;
 int i, j;
 GC_Node;
 GC_Link(vec);
 Check_Type(vec, T_Vector);
 ret = Make_Vector(VECTOR(vec)->size, False);
 for (i = 0, j = VECTOR(vec)->size; --j >= 0; i++)
 VECTOR(ret)->data[i] = VECTOR(vec)->data[j];
 GC_Unlink;
 return ret;
}
Figure 4: Non-destructive Scheme primitive vector-reverse, corrected version
 Appendix


text:
Brazil's National Department of Mineral Production (DNPM) is coordinating an analysis of the largest Brazilian sylvite beds found in the state of Amazonas, with the objective of establishing partnerships for exploration.
Sylvite is a mineral from which potassium chloride (KCl) is extracted to be used as a fertilizer. Currently, Brazil imports 85% of the total potassium chloride consumed in the country.
The remaining 15% come from the Taquari-Vassouras mine, located in the state of Sergipe, in the Northeast of the Brazil.
Amazon sylvite beds were found in the 1980s, by Petrobrás. Estimated reserves are to the order of 1 billion tons, more than twice the 450 million-ton beds found initially in Sergipe, where sylvite is explored by the Companhia Vale do Rio Doce.
Current annual production of potassium chloride is 600 thousand tons, which supplies part of the Center-South of the country.
One of Brazil's government priorities is to invest in mineral research and exploration, says minister of Mines and Energy, Dilma Rousseff.
According to the minister, if Brazil is to have development in mining, the government has to have an updated and modern mining department.
Brazil was told last year that Canadian mining interests could invest as much as US$ 2 billion in gold, nickel, copper and diamond operations in Brazil.
Last year the DNPM inaugurated a data bank network connecting its 25 districts nationwide at a cost of US$ 25 million.
Translation: Andréa Alves