text:
AMERICANA DREAM
Welsh singer Jade Bird tells how she's already surpassed her wildest dreams by touring and releasing her debut album
Five years ago the singer wrote a list of dreams she hoped to achieve, sealed it and gave it to her grandma for safekeeping and now she's going to open it on the day of her debut album's release
By Jacqui Swift
FIVE years ago, Jade Bird wrote a list of dreams she hoped to achieve, sealed it and gave it to her grandma for safekeeping.
She was 16 and a student at the Brit School in Croydon when she penned those hopes.
Former Brit School student Jade Bird has just released her self-titled debut album
Now, Jade is one of 2019's biggest "new names" and releases her self-titled debut album today.
She tells me: "On the release day I'm going to open the letter and see what I wished for.
"Back then my ambitions were just to make music and be able to play gigs.
"I never expected I was going to travel the world playing gigs with my band and best friends. I have surpassed any dreams I had."
Jade says she never expected she would be able to travel the world playing gigsCredit: Francesca Allen
Jade, 21, is the real deal. A singer-songwriter who does not rely on co-writers and her album is based on the "experiences of the past two years".
It is evident Jade has star quality when I meet her for lunch in New York.
In a few hours she will play live on The Tonight Show Starring Jimmy Fallon, the huge US evening chat show, and she has just finished a cross-country tour with the Irish Take Me To Church singer Hozier.
After the show, Jade posts on her Instagram: "The Fallon performance . . . it's the highlight of my whole year so far."
'YOU HAVE TO BE A BIT SELF-INDULGENT'
Earlier, over a lunch of sushi and green tea, she tells me: "I love playing live, and doing big TV shows are exciting. It's my second time on Fallon."
Jade is good company. Chatting and jumping from one topic to another, she has a confidence that makes her an old head on young shoulders.
She says with a laugh: "I am a bit of a granny, I feel older than my years. I like to read rather than go to parties but at the same time my band and I have a lot of fun on tour and can be big kids.
"I like to keep morale up and not take things so seriously all the time. I enjoy life and laughs but I'm serious about the music. Serious about the craft of songwriting.
Jade is serious about the craft of songwriting and admits you sometimes have to be a little self-indulgent
"Balance is the key to understanding the context of the album and how it represents the experience of my past two years.
"You have to be a bit self-indulgent with a debut record and write about how you see the world."
Jade made the album in London before decamping to upstate New York to work with producer Simone Felice, of the Felice Brothers.
She says: "I'd been having a bad time with anxiety and so where we were in New York really helped.
Jade worked with producer Simone Felice, of the Felice Brothers, on the album
"We were in the countryside, like Wales, with hills and incredible seasons — snow, falling leaves and silence. We tracked everything live and then there was a tiny vocal booth and piano room.
"In those four rooms, the whole record was made. There was even a studio dog, who was great when I was a bit stressed. I've found anxiety really crippling at times.
"It sounds pretty precocious, but I got into transcendental meditation, which pretty much saved me at one point. It was two years ago and things were bad for me."
Standout songs on the album include Ruins "about when everything is perfect one minute and the end of the world the next", Side Effects "I wrote that one after my boyfriend (guitarist Luke Prosser in Jade's band) went for a walk to get away.
Jade Bird - Jade Bird
1. Ruins
2. Lottery
3. I Get No Joy
4. Side Effects
5. My Motto
6. Does Anybody Know
7. Uh Huh
8. Good At It
10. Love Has All Been Done Before
11. Going Gone
12. If I Die
Sometimes relationships can feel claustrophobic" and I Get No Joy "about saying it's OK to have negative feelings sometimes".
The album's closer, the poignant piano ballad If I Die, is about Jade's mum and is the singer's favourite track on the record.
Jade says: "I am so close to my mum. She has worked so hard for me since I was a kid. I don't know anyone who works as hard as my mum. She is thrilled for me now.
"But she said if something happened to me, she wasn't bothered about sticking around without me.
The most poignant track on Jade's album, If I Die, is about her mum
"I know parents feel like that about their children but I wrote that song to say if I died, I'd want my mum to stick around.
"There are so many personal moments like that across the album and I'm so proud of it."
Jade is labelled Americana, country and indie, which proves how diverse the 12 tracks on her record are. She says: "You can't really put my music in a box.
"I get the Americana thing but the one thing I really don't connect with is being called a country artist.
'I FEEL REALLY STRONGLY ABOUT WOMEN'S RIGHTS'
"I find that quite limiting. I don't sing with an American accent. It's just a bit unimaginative and people calling me country need to listen to my record.
"Ruins, fair enough, it's open. But then you get I Get No Joy, Love Has All Been Done Before and My Motto and you are like, country?
Come on, really? Cut me a break."
She cites Tori Amos, Alanis Morissette and Patti Smith as her icons. Jade, who grew up with her single mum and gran, admits she had these two strong women as role models.
"I feel really strongly about women's rights and making young girls feel like they can do it. The more educated we can get as a gender as women, the better."
Jade cites Tori Amos, Alanis Morissette and Patti Smith as her iconsCredit: Rex Features
Jade feels strongly about these issues and wants to get involved with Tori Amos' RAINN (Rape Abuse & Incest National Network) charity.
She says: "I've been reading a Tori Amos book about some of the misogyny she had to experience in the industry. It's unbelievable and so even if I was selling RAINN products on her merch stand it would be great. I really want to stand for that cause and get involved."
Singer Ryan Adams declared himself a fan of Jade (and her of his music) when he tweeted her before claims of inappropriate behaviour emerged against him. How does that make her feel today?
She says: "You just delete his music and move on. But it's not just Ryan, there's others. Sun Kil Moon (Mark Kozelek) called a female journalist a bitch on stage.
Jade feels strongly about women's rights and making girls feel they can do anythingCredit: Getty - Contributor
"Sun Kil Moon is another whose music I won't be listening to again.
"I think it's great that women have spoken out. Luckily, I've been surrounded by good men in the industry.
"My manager and my label head have been nothing but supportive and I know I am fortunate in that respect. But it is not the same for everyone."
Jade says her independence comes from travelling around as a child. She was born to Army parents in Northumberland before moving to Germany, London and then settled in Bridgend, South Wales when her mum and dad split up.
'I HAMMER MY VOICE TO TRY TO GET TO PLACES'
She says: "I guess I found my escape in music when I was about 12 or 13, post my parents' and grandparents' divorces.
"We had a family friend who played the acoustic guitar and I was just transfixed by it.
"So I borrowed my grandma's and would sit on the floor, try out chords and started writing music virtually straight away.
"Anything to do with words sparks a thing in me. It was quite therapeutic at the time as I was going through a lot and I've not stopped songwriting since then."
Jade was born in Northumberland and lived in Germany and London before settling in Bridgend, South Wales
It was moving to London at 16 and performing at school and doing open mic nights where Jade found her voice.
She says: "I had to get up on stage and sing and keep doing it. It's where everything started.
"I'd got into the Brit School — the second time round as I was rejected the first time — and I'm glad I went there. I learned a hell of a lot.
"There's a preconception that it's like a fame academy, where you see people dancing in the hallways. It's not. They really work you hard. And my voice has improved so much over the years. For me, I've hammered it to try and get to places.
Jade moved to London at 16 and began performing at school and doing open mic nights
"A big turning point was hearing other artists do that. When I moved to London, I played at Spiriyual, this blues bar in Camden owned by Ref, a Brazilian
"He was like my mentor. We became really close friends and he pushed me. I was playing with these burly guys and would get drowned out, so I had to figure out a way to drown them out. That's when I started to really sing."
After being away from home for the tour, Jade says she is excited to get back to the UK and has a week of record store performances to celebrate her album release.
She says: "I'm looking ahead and already thinking of the next album. I never stop writing and the whole album was an attempt for people to see me as a songwriter first.
MOST READ IN TV AND SHOWBIZ
"I wrote the whole album by myself. Someone told me only two singles in the charts in the past five years have been written solely by one person and that was Ed Sheeran and Pharrell. Jesus, that's crazy!
"I've had an amazing two years making this record and I hope to make a classic all-time record one day too.
"It's great to be compared to icons like Alanis Morissette but I want to do my own thing in a way, that is my biggest aspiration. I'd love to just be Jade Bird. And when I open that letter of dreams and start writing the next list, that's what will be at the very top."
The album Jade Bird is out today.


Garfield :: Doesn't it bother you that your cat is always underfoot? Not at all. Garfield is very fond of me. We're inseparable, aren't we, Garfield? You're standing on my tail.
Doesn't it bother you that your cat is always underfoot? Not at all. Garfield is very fond of me. We're inseparable, aren't we, Garfield? You're standing on my tail.


Home / Posts Tagged "original mattress factory owner"
Match the patterns and colours of the original mattress factory. Matched patterns and colors will create your modest mattress appears more spacious. A mattress carpet in a beige, white, and..


Founded in Atlanta, Georgia in 1978, Executive Order was established to provide project consulting, custom applications, professional services, and software development to our corporate clients.
Executive Order builds complex systems for automated network management, business rules, business process management, natural language understanding, ontology, real-time planning, and visualization. We provide Artificial Intelligence (AI), Business Rule Management Systems (BRMS) DROOLS and Business Process Management (jBPM) research and development. We also offer a variety of training courses and books on these and other topics.
Our offerings span business and technology consulting, business application development, mobile messaging solutions, custom web design, E-commerce development, web maintenance, software re-engineering, IoT, GPS tracking, environment monitoring, equipment condition, telematics solution, remote sensors, hardware engine solutions, internet applications, hosting solutions for enterprises, GPS and remote sensing services, and development program planning and management.
At Executive Order, you will work with one of our experienced consultants assigned to your team as a technical adviser to get the skills you need to develop on-going enterprise applications. A project consultant can be scheduled for the complete project or just for the critical portions such as start-up, mid-course corrections, or final packaging and testing. Our project consultants can provide the guidance for your Enterprise IT management. Executive Order is an innovator. We help our customers achieve their most challenging goals. We are always happy to discuss our current and future plans with you.


text:
package view.componentdisplays;

import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import view.enums.DefaultStrings;

import java.util.ResourceBundle;

public class GuiObjectTextField extends GuiObject {
    private final TextField textField;
    private final Label textFieldLabel;

    public GuiObjectTextField(String name, String resourceBundle, String language, SimpleObjectProperty<?> property) {
        super(name, resourceBundle);

        ResourceBundle myPropertiesNames = ResourceBundle.getBundle(language + DefaultStrings.PROPERTIES.getDefault());
        textFieldLabel = new Label(myPropertiesNames.getString(getObjectName()));
        textField = new TextField();
        bindProperty(property, textField);
    }

    @SuppressWarnings("unchecked")
    private void bindProperty(SimpleObjectProperty property, TextField textField2) {
        textField2.textProperty().addListener((ov, old_val, new_val) -> {
            property.setValue(new_val);
        });
    }

    @Override
    public Object getCurrentValue() {
        return textField.getText();
    }

    @Override
    public Object getGuiNode() {
        VBox vbox = new VBox();
        vbox.getChildren().addAll(textFieldLabel, textField);
        return vbox;
    }

}

redpajama_set_name: RedPajamaGithub


text:
Q: Python: intercommunication between shells A Python program is running on a shell, how to communicate with it using another Python shell?
Let say we have started running a very long simulation which is going well on a shell. We realised a need to capture the current values, say, in a numpy array.
How to pause the simulation, capture desired values and resume using another Python shell?

A: Here is a package to work with subprocesses, capture an output: http://pymotw.com/2/subprocess/
For instance to capture an output, you can check_output
import subprocess

output = subprocess.check_output(['ls', '-1'])
print 'Have %d bytes in output' % len(output)
print output

A: Your best bet is to use IPython. It runs code in one or more kernels, which can then be communicated with by different subprocesses. All of the values in the running kernel can be shared, allowing you to do exactly what you're looking to do. Sites like Wakari offer free IPython Notebook instances so you can experiment.

redpajama_set_name: RedPajamaStackExchange


(small squares). Good scrap quilt.
Backing - 61" square – can be pieced to add more interest.
Sewing machine in good working order – with all leads, attachments and manual.
Rotary cutting mat, long ruler and sharp cutter.
This quilt is planned with 5" squares. We can make it larger – please bring more squares and sashing fabric.
You can change the size of the squares – my sample uses 4 ½" squares (what I had to use up) We can adjust the sashings and cornerstones to suit.
Please do not purchase backing and wadding if you want to make size changes.
Looking forward to seeing you on the day – drinks provided but don't forget your lunch. There are many food outlets in the street where you can treat yourself.


represented by IMG model management, sasha pivovarova appears in one of three different covers shot for i-D magazine. as a tribute to the late alexander mcqueen, pivovarova is seen in a SS10 piece rocking the wet look. shot by emma summerton, pivovarova also appears editorially within the issue, once more, appearing in alexander mcqueen. sasha can also be seen in the spring/summer 2010 campaigns for both longchamp & mulberry. though im not a fan of the wet look, it works in this shot.


for a delicious and refreshing balance.
At a WA Beer Week event with Old Faithful, we all put our heads together a decided "lets brew a BBQ sauce beer!". Best drank with smoked brisket or pork ribs, try our BBBQ Alt Beer. Brewed with smoked plums and apples, paprika, black pepper, brown sugar and Swan Valley honey.
What's the extra 'B' in BBBQ for you ask?
Cheers to White Labs, Coopers Maltings & Ellerslie Australia for your involvement.
This beer is loosely based on a refreshing Summer mint and watermelon salad.
It has a punchy watermelon nose that is backed up with a wheaty sweetness. The pallet starts with the sweet watermelon hit followed by a refreshing mint finish.
Best enjoyed with a snag around the BBQ.
Looking for the perfect function idea? look no further! Get in touch with our friendly team today.


Kevin Breeze got a second win yesterday, can he get a third to end the week?
Join Anthony for the recap alter.
I got 702.5 for the second numbers game, would that have been allowed?
Steven M. McCann wrote: I got 702.5 for the second numbers game, would that have been allowed?
Only if you're willing to get 8.5 points for your solution.
I think there's a 7 in the OOTIDS+XGA round.
Has anybody else ever got the same score three days in a row?
NIce game today, I like Kevin and Bill was a dude.
my reaction was great when I spotted THEREUNTO in round 5, I was delighted, what a 9!
Edward Byrne wrote: my reaction was great when I spotted THEREUNTO in round 5, I was delighted, what a 9!
And the rider to that, what is the greatest number of consecutive wins on the same score, as there was an 89 before Kevin began?


Jordan Brand is all set to release the Nike Air Jordan 1 High Laser, as a part of the brand's 30th anniversary celebration.
The pair is dressed in a great combination of metallic silver and off-white. It features an off-white upper that includes laser printed overlays. There is also 3M reflective Nike Swoosh on the sidewalls. Another special feature of the silhouette is the "30" branded insole, which represents the Brand's 30th anniversary. The shoe is finished with an icy translucent outsole.
The Nike Air Jordan 1 High Laser is scheduled to release on 7th February (8am GMT) via the following retailers.


text:
package com.elminster.easydao.db.handler;

import java.sql.ResultSet;
import java.util.List;

import com.elminster.common.util.CollectionUtil;

public class ObjectResultSetHandler extends ResultSetHandler implements IResultSetHandler {

	public ObjectResultSetHandler(Class<?> mappingClass) {
		super(mappingClass);
	}

	@SuppressWarnings({"rawtypes"})
	public Object handleResultSet(ResultSet rs) throws Exception {
		List list = mapping(rs);
		if (CollectionUtil.isEmpty(list)) {
			return null;
		}
		return list.get(0);
	}
}


text:
Product Documentation Help
Safety & regulatory documentation
Pixelbook, Pixelbook Pen and accessories
Pixelbook (2017) safety info
Required Safety Statement
This page provides important safety and regulatory information that you should read before you start using your Pixelbook.
WARNING: HEALTH AND SAFETY INFORMATION
To avoid damaging your Pixelbook, accessories or any connected devices, and to reduce the risk of personal injury, discomfort, property damage or other potential hazards, follow the precautions below.
Handle your Pixelbook with care. You may damage the device or the battery if you disassemble, drop, bend, burn, crush or puncture your device. Do not use a device with a cracked screen. Using a damaged device may cause battery overheating or injury. Don't expose your Pixelbook to liquids, which can cause a short circuit and overheating. If your Pixelbook gets wet, do not attempt to dry it using an external heat source. Your Pixelbook is designed to work best in ambient temperatures between 50° and 95° F (10° and 35° C), and should be stored between ambient temperatures of -4° and 113° F (-20° and 45° C). Do not expose your Pixelbook to temperatures outside of these operational and storage temperature ranges as this may damage the product, overheat the battery, or pose a risk of fire.
Be sure the power adapter and device are well ventilated when in use or charging. Using damaged cables or power adapters, or charging when moisture is present, can cause fire, electric shock, injury, or damage to your Pixelbook or other property. When charging your Pixelbook, make sure the power adapter is plugged into a socket near your Pixelbook and is easily accessible. Avoid charging the device in direct sunlight. This product is intended for use with a certified Limited Power Source (LPS) per IEC 60950-1 rated: 5/9/12/15 Volts DC, maximum 3 Amp; 20 Volts DC, maximum 2.25 Amp. Only charge your Pixelbook with the included power adapter and cable, or compatible charging accessories. Failure to use compatible charging accessories can cause fire, electric shock, injury, or damage to the device and the accessories. Compatible charging accessories are available on the Google Store and at Google authorized resellers (look for Google's "made for" badge).
Prolonged exposure to loud sounds (including music) can cause hearing loss. To prevent possible hearing damage, avoid listening at high volume for prolonged periods of time. Continued exposure to high volumes and background noise can make loud sounds seem quieter than they actually are. Check the volume before using headphones or earphones.
Caution: Your Pixelbook contains a lithium-ion battery, which is a sensitive component that can cause injury if damaged. Do not attempt to remove the battery. Contact Google or a Google authorized service provider to replace the battery. Replacement by non-qualified professionals can damage your device. Use of an unqualified battery or improper battery use may present a risk of fire, explosion, leakage, or other hazard. Do not modify or remanufacture the battery, attempt to insert foreign objects into the battery, immerse or expose the battery to water or other liquids, or expose the battery to fire, explosion or other hazard. Only use the battery for the system for which it is specified. Do not short circuit the battery or allow metallic or conductive objects to contact the battery terminals. Avoid dropping your Pixelbook or battery. If the Pixelbook or battery is dropped, especially on a hard surface, and you suspect damage, contact Google or a Google authorized service provider for inspection.
Dispose of your damaged Pixelbook, battery, and/or accessories promptly and in accordance with local regulations. Do not dispose of any part of your Pixelbook, its battery, or its accessories in normal household waste. Improper disposal may lead to fire, explosion, and/or other hazards.
Do not attempt to repair your Pixelbook yourself. Disassembling your Pixelbook may cause injury.
Your Pixelbook should only be repaired by Google or a Google authorized service provider. Unauthorized repairs or modifications could result in permanent damage to the device, and may affect your warranty coverage and regulatory authorizations.For online help and support, visit g.co/pixelbook/help. To reach a Pixelbook specialist, visit g.co/pixelbook/support.
Your Pixelbook and its accessories are not products designed for children. Do not allow children to use them without adult supervision because they could hurt themselves or others and damage the device. Keep your Pixelbook and all of its parts and accessories out of the reach of children.
Prolonged Heat Exposure
Your Pixelbook and its charger generate heat during normal operation. They comply with applicable surface temperature standards and limits. Avoid prolonged, direct or indirect skin contact when the device is in use or charging because exposing skin to hot surfaces for a long period of time may cause discomfort or burns. Do not sleep on your Pixelbook or its power adapter, or cover them with a blanket or pillow. Be aware of this if you have a physical condition that affects your ability to detect heat against your skin.
Wi-Fi and BluetoothⓇ can interfere with the navigation systems of an aircraft, so use your Pixelbook in accordance with instructions provided by the airline.
Medical Device Interference
Your Pixelbook uses radios and other components that emit electromagnetic fields, and also contains magnets. These electromagnetic fields and magnets may interfere with pacemakers and other implanted medical devices. Always keep your Pixelbook and its charger more than 16 cm (6") from the surface of the skin near the pacemaker or other implanted medical device. If you have questions about using your Google device with or near your pacemaker or other implanted medical device, consult your healthcare provider before using your Pixelbook. If you suspect your Pixelbook is interfering with your pacemaker or other implanted medical devices, turn off your Google device and consult your physician for information specific to your medical device.
Do not charge, use, store, or transport your device where flammables or explosives are stored (in gas stations, fuel depots, or chemical plants, for example). Do not use your device where blasting operations are in progress, or in potentially explosive atmospheres such as in areas where the air contains high levels of flammable chemicals, vapors, or particles (such as grain, dust, or metal powders). Sparks in such areas could cause an explosion or fire resulting in bodily injury or even death. Observe all notices and signs where these hazards might be present.
Repetitive Motion
Performing repetitive activities with your Pixelbook such as typing, tapping or swiping may lead to occasional physical discomfort in your hands, arms, wrists, or locations in your body. Consult a healthcare provider if you experience prolonged symptoms while using the Pixelbook repetitively.
Regulatory information, certification, and compliance marks specific to Pixelbook can be found on your device under Settings > About Chrome and on the bottom of your device. E-label can be found on your device under Settings > About Chrome.
Manufacturer address: Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043.
EMC Compliance
Important: This device and power adapter have demonstrated Electromagnetic Compatibility (EMC) compliance under conditions that included the use of compliant peripheral devices and shielded cables between system components. It is important that you use compliant peripheral devices and shielded cables between system components to reduce the possibility of causing interference to radios, televisions, and other electronic devices.
FCC Compliance Statement
This device complies with part 15 of the FCC rules. Operation is subject to the following two conditions: (1) This device may not cause harmful interference, and (2) this device must accept any interference received, including interference that may cause undesired operation.
This device has been tested and found to comply with the limits for a Class B digital device, pursuant to part 15 of the FCC Rules. These limits are designed to provide reasonable protection against harmful interference in a residential installation. This device generates, uses and can radiate radio frequency energy and, if not installed and used in accordance with the instructions, may cause harmful interference to radio communications. However, there is no guarantee that interference will not occur in a particular installation. If this device does cause harmful interference to radio or television reception, which can be determined by plugging in, then unplugging, this device, the user is encouraged to try to correct the interference by reorienting or relocating the receiving antenna and/or consulting the dealer or an experienced radio/TV technician for help.
Changes or modifications not expressly approved by the party responsible for compliance could void the user's authority to operate the equipment.
Model: C0A
FCC ID: HFSC0A
The antenna used for this transmitter must not be co-located in conjunction with any other antenna or transmitter.
Canada, Innovation, Science and Economic Development Canada (ISED) Notices
CAN ICES-3 (B)/NMB-3(B).
This device complies with Innovation, Science and Economic Development Canada (ISED) licence-exempt RSS standard(s). Operation is subject to the following two conditions: (1) this device may not cause interference, and (2) this device must accept any interference, including interference that may cause undesired operation of the device.
Under ISED regulations, the radio transmitter(s) in this device may only operate using an antenna of a type and maximum (or lesser) gain approved for the transmitter by ISED. To reduce potential radio interference to other users, the antenna type and its gain should be so chosen that the equivalent isotropically radiated power (e.i.r.p.) is not more than that necessary for successful communication.
The device for operation in the band 5150-5250 MHz is only for indoor use to reduce the potential for harmful interference to co-channel mobile satellite systems.
The radiated output power of this device is below the ISED radio frequency exposure limits. This device has been evaluated for and shown compliant with the ISED Radio Frequency (RF) Exposure limits. The device should be used in such a manner such that the potential for human contact during normal operation is minimized.
This device has been certified for use in Canada. Status of the listing in the ISED's REL (Radio Equipment List) can be found at the following web address: http://www.ic.gc.ca/app/sitt/reltel/srch/nwRdSrch.do
Additional Canadian information on RF exposure also can be found at the following web address: http://www.ic.gc.ca/eic/site/smt-gst.nsf/eng/sf08792.html
Pixelbook ENERGY STAR® Program
Your Pixelbook is ENERGY STAR® compliant. The following information applies.
Pixelbook was designed to meet the latest ENERGY STAR guidelines for energy efficiency. Your Pixelbook ships with the power management options preset to a configuration that will provide the most stable operating environment and optimum system performance for both AC power and battery modes.
By default, Pixelbook turns off its screen after 70 seconds of inactivity on battery mode and 8 minutes of inactivity on AC mode to save power. It is recommended that you leave this and other energy saving features active, so that your Pixelbook will operate at its maximum energy efficiency. Press the power button to turn the screen back on.
For more information about ENERGY STAR, visit: http://www.energystar.gov.
EU Compliance Statement
The device must be installed and used in strict accordance with the manufacturer's instructions as described in the product documentation that comes with the device. Google is not responsible for any radio or television interference caused by unauthorized modification of the devices included with this device, or the substitution or attachment of connecting cables and equipment other than that specified by Google. The correction of interference caused by such unauthorized modification, substitution or attachment is the responsibility of the user. Google and its authorized resellers or distributors are not liable for any damage or violation of government regulations that may arise from the user failing to comply with these guidelines.
RED Compliance Statement
Hereby, Google declares that the radio equipment Pixelbook is in compliance with Directive 2014/53/EU. The full text of the EU DoC is available at the following internet address g.co/pixelbook/declaration. The device is restricted to indoor use only when operating in the 5150 to 5350 MHz frequency range for member states: AT, BE, BG, CZ, DK, EE, FR, DE, IS, IE, IT, EL, ES, CY, LV, LI, LT, LU, HU, MT, NL, NO, PL, PT, RO, SI, SK, TR, FI, SE, CH, UK, HR
Product Wireless Information
2400–2483.5MHz: Wi-Fi (Max 19.5 dBm), BT (Max 10 dBm), BLE (Max 10 dBm). 5150–5250MHz: Wi-Fi (Max 19 dBm). 5250–5350MHz: Wi-Fi (Max 19 dBm). 5470–5725MHz: Wi-Fi (Max 19 dBm).
RF Exposure Information (MPE)
This device meets the EU requirements and the International Commission on Non-Ionizing Radiation Protection (ICNIRP) on the limitation of exposure of the general public to electromagnetic fields by way of health protection.
Google's EU importer is Google Commerce Limited, 70 Sir John Rogerson's Quay, Dublin 2, Ireland.
Waste Electrical and Electronic Equipment (WEEE) & Batteries Directives
EU Recycling and Disposal Information
The WEEE symbol above means that according to local laws and regulations your product [and its battery] must be disposed of separately from household waste. When this product reaches its end of life, take it to a collection point designated by local authorities for safe disposal or recycling. The separate collection and recycling of your product and its battery will help conserve natural resources, protects human health, and help the environment.
Additional regulatory information: Germany
§ 10 I 2 ElektroG: Vor der Entsorgung dieses Geräts (i) Altbatterien/-akkus, sofern sie nicht vom Gerät umschlossen sind, und zerstörungsfrei entnehmbare Lampen zerstörungsfrei trennen und (ii) alle personenbezogenen Daten löschen. § 17 I und II ElektroG: Viele Vertreiber müssen Altgeräte kostenlos zurücknehmen.
We are committed to providing our customers with information about the chemical substances in our products in accordance with our obligations under legal requirements such as REACH (Regulation EC No. 1907/2006 of the European Parliament and the Council).
© 2017 Google LLC All rights reserved.
Pixelbook, Google, G logo, Chrome, and other marks and logos are trademarks of Google LLC.
Declaration of conformity (Pixelbook 2017)
Pixelbook Pen safety info
Pixelbook Pen Declaration of Conformity
Pixelbook power adapter safety info
Pixelbook Go Declaration of Conformity
Warranty periods by country
Safety, Warranty & Regulatory Manual for Pixelbook Go
catalàdanskdansk (Danmark)DeutscheestiEnglish (Australia)English (Canada)English (Finland)English (India)English (Singapore)English (United Kingdom)españolespañol (Latinoamérica)Filipinofrançaisfrançais (Canada)hrvatskiIndonesiaitalianolatviešulietuviųmagyarMelayuNederlandsnorskpolskiportuguêsportuguês (Brasil)românăslovenčinaslovenščinasuomisvenskaTiếng ViệtTürkçečeštinaΕλληνικάбългарскирусскийсрпскиукраїнськаעבריתالعربيةفارسیहिन्दीไทย中文(简体)中文(繁體)中文(香港)日本語한국어 English

redpajama_set_name: RedPajamaCommonCrawl


October 24, 2014 in Articles, Features.
In 2012 Donal Creedon led a one-month retreat in BMC in Sikkim. He taught from Tsele Natsok Rangdrol's Lamp of Mahamudra, not an easy text by any means. In order to retain some sort of equilibrium to the teachings which often left me confused about some of the complicated techniques propounded, I found solace in talking to the resident monk, Lama Tsering Paljor, who passed away at 7 pm on 15th October.
I'm not sure how old Lama La was; he had that youthful appearance, which many Tibetans have, and a calm deportment that affected all who came in contact with him. His easy manner of speech and his openness with others put them immediately at ease, and one felt that they were in the company of an exceptional individual.
During his time in retreat in Pharphing near Kathmandu in Nepal, he told me of his practice of tummo and how he wore three sets of wet robes consecutively and dried them with the heat of his own body. This he performed in the winter. He also joined me in qigong, together with others early in the morning after performing his ritual offerings at the fire house on the roof of the gompa. We also enjoyed watching a film about Milarepa on the laptop and he would explain each part of the story to me, especially the power of Milarepa's sorcery and his later tutelage under Marpa.
Lama Paljor also liked to demonstrate his skills of singing and dancing and once led an extended session of chanting the mantra, om mani peme hum, in the shrine room.
In his little kitchen at the top of the building, he made chai and offered sweets. These times provided welcome moments of relaxation.
To us, the first knowledge of his problems came about half-way through the retreat. Lama La was experiencing a burning sensation in his lower chest and decided that he wanted to seek medical advice. We accompanied him for a consultation with a homeopathic practitioner in Gangtok and he was prescribed various 'remedies', but to no avail. He was later diagnosed with cancer and the prognosis was not good.
Lama La was a gentle man. He showed us his photograph album and it was surprising to see him stand out with his long hair and beard while the others retreatants had shaved heads.
Fortunately, he was able to travel back to Tibet and passed away amongst his family and friends.
Lama Paljor will be remembered fondly by all who met him and he will live on in our thoughts.
Hi Albert, It is really nice to read of your own connection with Lama Tsering Paljor, and to be able to broaden the landscape of his life a little bit more. A lovely article, Thank you.


I know it seems to be somewhat tough for getting or selecting perfect honeymoon destination which you can go for. As you are going to go for your memory of life for once than why to go for getting any of the wrong which cannot let you go for selecting perfect honeymoon destination which you have thought of right? But you don't worry at all because there are many tips which can help you in the process of selecting perfect honeymoon destination which you can go for experiencing while planning for having your honeymoon to be one of the most romantic and memorable experience of your life and your partner's too. Well, according to me you must not at all go for compromising your wishes because these days are not going to come back again which you must take in to account.
Going for selecting perfect honeymoon destination is considered to be the duty of the couple which they must go for because it is considered to be beneficial for you and the list of the memories which you want to go for saving up for life time. Do not go for taking this decision to be lightly because it will be your dream which you want to live for with your loved one. There are many tips which can help you in going for selecting perfect honeymoon destinations like the first thing is to decide the budget, deciding the days of trip you want to go for, checking for the season where you are planning of visiting, etc. and many more of the things which you can go for considering to be the tips of going for selecting right and perfect honeymoon destination.
Budget is considered to be one of the most important factor which you need to go for taking in to account because it will help you in deciding that the place which you have selected for your honeymoon is considered to be appropriate and according to your planning of not.
Before going for thinking any of destinations, it is considered to be important for deciding and making the decision about the reservation s of the hotels and the place or the fares which you are going to incur.
Next thing which can help you in the matters of going for selecting perfect honeymoon destination for your trip is to decide for the length of the trip which you are going to have. Yes, it is important to note down the days which you want to spend for your honeymoon because it will help you in gathering the exact amount of budget you need to go for planning.
Before thinking of any destination, checking for the weather and the season of that place is considered to be mandate because it will help you in making the firm decision that you need to go at that place for your wedding honeymoon or not.
Not only theses, there are many other tips which can help you in the matters of going for selecting perfect honeymoon destination which can help you out with your honeymoon.


text:
Spanish SP
Chinese CH
Swedish SW
Activision Ac
EA EA
Bethesda Bs
Klei Kl
Paradox Pd
SEGA Se
Ubisoft Ub
Valve Vl
Warner Wa
Action Ac
Strategy St
RPG Rp
Indie In
Adventure Ad
Sports Sp
Simulation Si
Early Access Ea
Ex Early Access Ee
MMO Mo
Free Fr
Atmospheric At
Crafting Cr
Experimental Ex
Female Protagonist FP
Kickstarter KS
Open World OW
Remake Re
Space Sim SS
Stealth St
Warhammer 40K WH
Zombies Zb
Dark Fear
App data
Dark Fear is a pixel horror game with RPG and adventure game elements. Explore a diverse landscape filled with forests, mountains, lakes and deserts. Make allies in the local village, upgrade your weapon and armor, go hunting/fishing and fight your way to the truth by slaying your foes, solving puzzles and helping people with their...
Store | Hub | SteamDB | Site
Developer: Arif Games Publisher: Arif Games
Genre: Adventure, Indie, RPG
Tags: Adventure (29), RPG (27), Indie (25), Horror (14), Point & Click (9), Pixel Graphics (9), Retro (7)
Category: Single-player, Steam Achievements
Old userscore: 94% Metascore: 66%
Owners: 0 .. 20,000
Peak concurrent players yesterday: 1
YouTube stats: 3 new videos uploaded yesterday.
Steam Spy is still in beta, so expect major bugs.
Audience (2 weeks)
CCU (daily)
CCU (hourly)
Twitch (daily)
Twitch (hourly)
Tags over time
Playtime (total)
Playtime (2 weeks)
Owners data:
Access restricted.
This feature is only available to users with special access rights. Sorry.
If you want to proceed, you need to register or log in first and then back Steam Spy on Patreon. Look for Indie or Pro pledge.
Don't forget to use the same email as on Steam Spy!
If you've recently backed Steam Spy on Patreon, please note, that it might take around 15 minutes for your access rights to sync. In most cases you'll need to re-login on Steam Spy too.
Audience in 2 weeks:
Peak daily concurrent players:
CCU data courtesy of SteamDB. Used with permission.
Hourly concurrent players:
Daily Twitch stats:
Hourly Twitch stats:
Followers over time
Views for top 50 videos on YouTube for this game:
Games similar to this one:
Score rank
(Userscore / Metascore)
Playtime (Median)
1 ALICE VR Oct 27, 2016 $0.99 N/A (N/A/55%) 50,000 .. 100,000 0% 00:00 (00:00)
2 Tactical Genius Online Jan 20, 2017 N/A N/A (N/A) 50,000 .. 100,000 0% 00:00 (00:00)
3 Dragon Saga Oct 28, 2010 Free N/A (N/A/65%) 200,000 .. 500,000 0% 00:00 (00:00)
4 Relic Hunters Zero: Remix Aug 18, 2015 Free N/A (N/A) 1,000,000 .. 2,000,000 0% 00:00 (00:00)
5 WARMODE Sep 13, 2019 Free N/A (N/A) 2,000,000 .. 5,000,000 0.81% 00:02 (00:01)
6 Lost Lands: A Hidden Object Adventure Sep 24, 2015 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
7 Iron Snout Jan 27, 2016 Free N/A (N/A) 2,000,000 .. 5,000,000 1.85% 00:32 (00:31)
8 Formicide Jun 12, 2017 Free N/A (N/A) 100,000 .. 200,000 0% 00:00 (00:00)
9 Lost Lands: Mahjong Mar 14, 2016 Free N/A (N/A) 100,000 .. 200,000 0% 00:00 (00:00)
10 Z1 Battle Royale: Test Server Feb 24, 2016 N/A N/A (N/A) 2,000,000 .. 5,000,000 0% 00:00 (00:00)
11 Istrolid May 6, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
12 Xenoraid: The First Space War Sep 30, 2016 $9.99 N/A (N/A) 0 .. 20,000 0% 00:00 (00:00)
13 MANDAGON Aug 4, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
14 Forge of Gods (RPG) May 6, 2016 N/A N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
15 Gabriel Knight 3: Blood of the Sacred, Blood of the Damned Nov 18, 1999 $5.99 N/A (N/A/80%) 50,000 .. 100,000 0% 00:00 (00:00)
16 Trick & Treat Sep 26, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
17 RPG MO Aug 18, 2015 Free N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
18 Drop Alive Dec 6, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
19 Containment Initiative Apr 14, 2017 $9.99 N/A (N/A) 20,000 .. 50,000 0% 00:00 (00:00)
20 Awkward Dimensions Redux Jul 26, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
21 √Letter - Root Letter - Jul 7, 2017 $19.99 N/A (N/A) 0 .. 20,000 0% 00:00 (00:00)
22 Black Squad Jun 26, 2019 Free N/A (N/A) 10,000,000 .. 20,000,000 0.16% 25:51 (12:55)
23 Super Blue Boy Planet Dec 16, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
24 Galactic Junk League Jul 26, 2017 N/A N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
25 Fausts Alptraum Aug 14, 2015 Free N/A (N/A) 100,000 .. 200,000 0% 00:00 (00:00)
26 BRAIN / OUT Feb 24, 2017 Free N/A (N/A) 1,000,000 .. 2,000,000 0% 00:00 (00:00)
27 Sounds of Her Love Mar 9, 2017 Free N/A (N/A) 50,000 .. 100,000 0% 00:00 (00:00)
28 Realm Grinder Jun 15, 2017 Free N/A (N/A) 1,000,000 .. 2,000,000 0% 00:00 (00:00)
29 Zombidle : REMONSTERED May 30, 2017 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
30 Detective Butler: Maiden Voyage Murder May 26, 2017 Free N/A (N/A) 50,000 .. 100,000 0% 00:00 (00:00)
31 Confess My Love May 20, 2017 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
32 1982 Jun 28, 2017 Free N/A (N/A) 100,000 .. 200,000 0% 00:00 (00:00)
33 Fairy Tale About Father Frost, Ivan and Nastya Dec 20, 2000 $0.59 N/A (N/A) 20,000 .. 50,000 0% 00:00 (00:00)
34 Jade Empire: Special Edition Feb 27, 2007 $14.99 N/A (N/A/81%) 200,000 .. 500,000 0% 00:00 (00:00)
35 Sacred Gold Aug 14, 2006 $9.99 N/A (N/A/74%) 200,000 .. 500,000 0% 00:00 (00:00)
36 The Bard's Tale ARPG: Remastered and Resnarkled Jun 17, 2005 $19.99 N/A (N/A/70%) 500,000 .. 1,000,000 0% 00:00 (00:00)
37 Gothic 1 Mar 15, 2001 $9.99 N/A (N/A/81%) 500,000 .. 1,000,000 0% 00:00 (00:00)
38 Gothic 3: Forsaken Gods Enhanced Edition Mar 22, 2011 $9.99 N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
39 Super Crate Box Oct 22, 2010 Free N/A (N/A) 1,000,000 .. 2,000,000 0% 00:00 (00:00)
40 Dwarfs - F2P Oct 18, 2012 Free N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
41 Divine Divinity Jul 5, 2012 $5.99 N/A (N/A/81%) 500,000 .. 1,000,000 0% 00:00 (00:00)
42 Ragnarok Online Jun 1, 2003 Free N/A (N/A/79%) 500,000 .. 1,000,000 0% 00:00 (00:00)
43 Champions of Regnum May 24, 2007 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
44 Sven Co-op Jan 19, 1999 Free N/A (N/A) 5,000,000 .. 10,000,000 0.52% 10:12 (05:06)
45 Soldier Front 2 Jul 3, 2013 Free N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
46 Enclave Mar 10, 2003 $1.99 N/A (N/A/71%) 2,000,000 .. 5,000,000 0% 00:00 (00:00)
47 Lost Saga NA Dec 8, 2013 N/A N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
48 Counter-Strike Nexon: Studio Oct 7, 2014 Free N/A (N/A) 5,000,000 .. 10,000,000 0.28% 00:23 (00:11)
49 Bloodline Champions Jan 13, 2011 Free N/A (N/A/79%) 500,000 .. 1,000,000 0% 00:00 (00:00)
50 Duelyst Aug 23, 2016 N/A N/A (N/A/82%) 500,000 .. 1,000,000 0% 00:00 (00:00)
51 Card Hunter Jul 13, 2015 Free N/A (N/A/80%) 1,000,000 .. 2,000,000 0% 00:00 (00:00)
52 Necronomicon: The Dawning of Darkness Jun 9, 2001 $4.99 N/A (N/A) 20,000 .. 50,000 0% 00:00 (00:00)
53 Age of Conquest IV Apr 5, 2016 Free N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
54 Deep Dungeons of Doom Oct 14, 2014 $4.99 N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
55 Dirty Bomb Jun 2015 Free N/A (N/A/63%) 5,000,000 .. 10,000,000 0% 00:00 (00:00)
56 Anno Online Jan 31, 2013 N/A N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
57 Destination Sol Feb 5, 2015 Free N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
58 BrainBread 2 Jul 20, 2016 Free N/A (N/A) 1,000,000 .. 2,000,000 0% 00:00 (00:00)
59 Rustbucket Rumble May 4, 2015 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
60 Eternal Senia Jun 18, 2015 Free N/A (N/A) 500,000 .. 1,000,000 0% 00:00 (00:00)
61 LoveBeat Jan 13, 2016 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
62 Survarium Apr 2, 2015 N/A N/A (N/A) 2,000,000 .. 5,000,000 0% 00:00 (00:00)
63 Cards and Castles Dec 18, 2015 Free N/A (N/A) 100,000 .. 200,000 0% 00:00 (00:00)
64 Ultimate Tic-Tac-Toe Apr 28, 2015 Free N/A (N/A) 200,000 .. 500,000 0% 00:00 (00:00)
Tags over time:
Owners of this game also own:
Playtime distribution:
Playtime (2 weeks):
Please register or log in to see this information.
Copyright © 2015-2021 Sergey Galyonkin Steam_Spy Powered by Steam | About | Privacy Policy


Remember, the #nsfw tag also applys to those that work for google. So if it isn't silicon groupthink you might want to be courteous to them too.
#Petya / #NotPetya by SECON.
#DEFCON201 this friday, 7pm, maker bar. Be there or be square!


text:
Q: Work Group Sizes For a given Kernel, why are work_groups of always the same size?
I read somewhere (for the case in which we don't specify the local work size) that openCL creates 3 work groups(of 217 work-items each) for kernel with 651 work-items(divisible by 3) while it creates 653 work-groups of 1 work-item each, as 653 is a prime number.
Suppose we specify the local_work_size(i.e. no. of work-items in a work-group), let's say,5. And we have given the total work-items(global_work_size) as 9. How will the work groups be created? is this why the global_work_size have to be a multiple of local_work_size? If the data requires only 9 work-items, how do I increase it to 10(multiple of local_work_size,5)?
Why can't host allocate the memory for result array if it doesn't know how many work groups will execute the kernel?
Please help.
I read all this on this:
http://www.openclblog.com/2011/09/work-group-sizes.html

A: OpenCL Work groups sizes don't need to be always the same size.    The Global work group size is  frequently related to the problem  size.  The Local Work Group Size is selected based on maximizing Compute Unit throughput and the number of threads that need to share  Local Memory.
Let consider a  couple of examples;
A)  Scale a image from N by M to  X by Y.
B)  Sum  N  numbers.
For A)
The  obvious Global Work Group Size is X ,Y, 1. Why?  This gives 1 thread per out pixel.
The  Local Work Group Size  should be chosen based on  the number of  Input pixels  that need to be processed to generate an output pixel.
Eg.
A.1)Scale an image from 4K by 3.2K to  64 by 64. GWG Size  [64,64,1] LWG Size 256
A.2)Scale an image from 4k by 3.2k to 800 by 600.GWG Size  [800,60,1] LWG Size 256
For B)
The obvious Global Work Group Size is  N/2,1,1,  Why? So each thread starts by summing 2 values  together.  The Local Work Group should be set to the device max.
There are some caveats;
1) Global Work Group Size  is constrained by the Global Memory Size and the Max Global Memory Allocation size.
2)  Each device has a max Local Work group size  often 256


text:
#ifdef HAVE_CONFIG_H
#include <kdrive-config.h>
#endif
#include <string.h>
#include <X11/extensions/Xv.h>
#include <xcb/xcb.h>
#include <xcb/xcb_aux.h>
#include <xcb/xv.h>
#include "ephyrlog.h"
#include "kdrive.h"
#include "kxv.h"
#include "ephyr.h"
#include "hostx.h"

struct _EphyrXVPriv {
    xcb_xv_query_adaptors_reply_t *host_adaptors;
    KdVideoAdaptorPtr adaptors;
    int num_adaptors;
};
typedef struct _EphyrXVPriv EphyrXVPriv;

struct _EphyrPortPriv {
    int port_number;
    KdVideoAdaptorPtr current_adaptor;
    EphyrXVPriv *xv_priv;
    unsigned char *image_buf;
    int image_buf_size;
    int image_id;
    int drw_x, drw_y, drw_w, drw_h;
    int src_x, src_y, src_w, src_h;
    int image_width, image_height;
};
typedef struct _EphyrPortPriv EphyrPortPriv;

static Bool ephyrLocalAtomToHost(int a_local_atom, int *a_host_atom);

static EphyrXVPriv *ephyrXVPrivNew(void);
static void ephyrXVPrivDelete(EphyrXVPriv * a_this);
static Bool ephyrXVPrivQueryHostAdaptors(EphyrXVPriv * a_this);
static Bool ephyrXVPrivSetAdaptorsHooks(EphyrXVPriv * a_this);
static Bool ephyrXVPrivRegisterAdaptors(EphyrXVPriv * a_this,
                                        ScreenPtr a_screen);

static Bool ephyrXVPrivIsAttrValueValid(XvAttributePtr a_attrs,
                                        int a_attrs_len,
                                        const char *a_attr_name,
                                        int a_attr_value, Bool *a_is_valid);

static Bool ephyrXVPrivGetImageBufSize(int a_port_id,
                                       int a_image_id,
                                       unsigned short a_width,
                                       unsigned short a_height, int *a_size);

static Bool ephyrXVPrivSaveImageToPortPriv(EphyrPortPriv * a_port_priv,
                                           const unsigned char *a_image,
                                           int a_image_len);

static void ephyrStopVideo(KdScreenInfo * a_info,
                           void *a_xv_priv, Bool a_exit);

static int ephyrSetPortAttribute(KdScreenInfo * a_info,
                                 Atom a_attr_name,
                                 int a_attr_value, void *a_port_priv);

static int ephyrGetPortAttribute(KdScreenInfo * a_screen_info,
                                 Atom a_attr_name,
                                 int *a_attr_value, void *a_port_priv);

static void ephyrQueryBestSize(KdScreenInfo * a_info,
                               Bool a_motion,
                               short a_src_w,
                               short a_src_h,
                               short a_drw_w,
                               short a_drw_h,
                               unsigned int *a_prefered_w,
                               unsigned int *a_prefered_h, void *a_port_priv);

static int ephyrPutImage(KdScreenInfo * a_info,
                         DrawablePtr a_drawable,
                         short a_src_x,
                         short a_src_y,
                         short a_drw_x,
                         short a_drw_y,
                         short a_src_w,
                         short a_src_h,
                         short a_drw_w,
                         short a_drw_h,
                         int a_id,
                         unsigned char *a_buf,
                         short a_width,
                         short a_height,
                         Bool a_sync,
                         RegionPtr a_clipping_region, void *a_port_priv);

static int ephyrReputImage(KdScreenInfo * a_info,
                           DrawablePtr a_drawable,
                           short a_drw_x,
                           short a_drw_y,
                           RegionPtr a_clipping_region, void *a_port_priv);

static int ephyrPutVideo(KdScreenInfo * a_info,
                         DrawablePtr a_drawable,
                         short a_vid_x, short a_vid_y,
                         short a_drw_x, short a_drw_y,
                         short a_vid_w, short a_vid_h,
                         short a_drw_w, short a_drw_h,
                         RegionPtr a_clip_region, void *a_port_priv);

static int ephyrGetVideo(KdScreenInfo * a_info,
                         DrawablePtr a_drawable,
                         short a_vid_x, short a_vid_y,
                         short a_drw_x, short a_drw_y,
                         short a_vid_w, short a_vid_h,
                         short a_drw_w, short a_drw_h,
                         RegionPtr a_clip_region, void *a_port_priv);

static int ephyrPutStill(KdScreenInfo * a_info,
                         DrawablePtr a_drawable,
                         short a_vid_x, short a_vid_y,
                         short a_drw_x, short a_drw_y,
                         short a_vid_w, short a_vid_h,
                         short a_drw_w, short a_drw_h,
                         RegionPtr a_clip_region, void *a_port_priv);

static int ephyrGetStill(KdScreenInfo * a_info,
                         DrawablePtr a_drawable,
                         short a_vid_x, short a_vid_y,
                         short a_drw_x, short a_drw_y,
                         short a_vid_w, short a_vid_h,
                         short a_drw_w, short a_drw_h,
                         RegionPtr a_clip_region, void *a_port_priv);

static int ephyrQueryImageAttributes(KdScreenInfo * a_info,
                                     int a_id,
                                     unsigned short *a_w,
                                     unsigned short *a_h,
                                     int *a_pitches, int *a_offsets);
static int s_base_port_id;

/**************
 * <helpers>
 * ************/

static Bool
adaptor_has_flags(const xcb_xv_adaptor_info_t *adaptor, uint32_t flags)
{
    return (adaptor->type & flags) == flags;
}

static Bool
ephyrLocalAtomToHost(int a_local_atom, int *a_host_atom)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_intern_atom_cookie_t cookie;
    xcb_intern_atom_reply_t *reply;
    const char *atom_name = NULL;

    EPHYR_RETURN_VAL_IF_FAIL(a_host_atom, FALSE);

    if (!ValidAtom(a_local_atom))
        return FALSE;

    atom_name = NameForAtom(a_local_atom);

    if (!atom_name)
        return FALSE;

    cookie = xcb_intern_atom(conn, FALSE, strlen(atom_name), atom_name);
    reply = xcb_intern_atom_reply(conn, cookie, NULL);
    if (!reply || reply->atom == None) {
        EPHYR_LOG_ERROR("no atom for string %s defined in host X\n", atom_name);
        return FALSE;
    }

    *a_host_atom = reply->atom;
    free(reply);

    return TRUE;
}

/**************
 *</helpers>
 * ************/

Bool
ephyrInitVideo(ScreenPtr pScreen)
{
    Bool is_ok = FALSE;

    KdScreenPriv(pScreen);
    KdScreenInfo *screen = pScreenPriv->screen;
    static EphyrXVPriv *xv_priv;

    EPHYR_LOG("enter\n");

    if (screen->fb.bitsPerPixel == 8) {
        EPHYR_LOG_ERROR("8 bits depth not supported\n");
        return FALSE;
    }

    if (!xv_priv) {
        xv_priv = ephyrXVPrivNew();
    }
    if (!xv_priv) {
        EPHYR_LOG_ERROR("failed to create xv_priv\n");
        goto out;
    }

    if (!ephyrXVPrivRegisterAdaptors(xv_priv, pScreen)) {
        EPHYR_LOG_ERROR("failed to register adaptors\n");
        goto out;
    }
    is_ok = TRUE;

 out:
    return is_ok;
}

static EphyrXVPriv *
ephyrXVPrivNew(void)
{
    EphyrXVPriv *xv_priv = NULL;

    EPHYR_LOG("enter\n");

    xv_priv = calloc(1, sizeof(EphyrXVPriv));
    if (!xv_priv) {
        EPHYR_LOG_ERROR("failed to create EphyrXVPriv\n");
        goto error;
    }

    if (!ephyrXVPrivQueryHostAdaptors(xv_priv)) {
        EPHYR_LOG_ERROR("failed to query the host x for xv properties\n");
        goto error;
    }
    if (!ephyrXVPrivSetAdaptorsHooks(xv_priv)) {
        EPHYR_LOG_ERROR("failed to set xv_priv hooks\n");
        goto error;
    }

    EPHYR_LOG("leave\n");
    return xv_priv;

 error:
    if (xv_priv) {
        ephyrXVPrivDelete(xv_priv);
        xv_priv = NULL;
    }
    return NULL;
}

static void
ephyrXVPrivDelete(EphyrXVPriv * a_this)
{
    EPHYR_LOG("enter\n");

    if (!a_this)
        return;
    if (a_this->host_adaptors) {
        free(a_this->host_adaptors);
        a_this->host_adaptors = NULL;
    }
    free(a_this->adaptors);
    a_this->adaptors = NULL;
    free(a_this);
    EPHYR_LOG("leave\n");
}

static Bool
translate_video_encodings(KdVideoAdaptorPtr adaptor,
                          xcb_xv_adaptor_info_t *host_adaptor)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    int i;
    xcb_xv_query_encodings_cookie_t cookie;
    xcb_xv_query_encodings_reply_t *reply;
    xcb_xv_encoding_info_iterator_t encoding_it;

    cookie = xcb_xv_query_encodings(conn, host_adaptor->base_id);
    reply = xcb_xv_query_encodings_reply(conn, cookie, NULL);
    if (!reply)
        return FALSE;

    adaptor->nEncodings = reply->num_encodings;
    adaptor->pEncodings = calloc(adaptor->nEncodings,
                                  sizeof(*adaptor->pEncodings));
    if (!adaptor->pEncodings) {
        free(reply);
        return FALSE;
    }

    encoding_it = xcb_xv_query_encodings_info_iterator(reply);
    for (i = 0; i < adaptor->nEncodings; i++) {
        xcb_xv_encoding_info_t *encoding_info = encoding_it.data;
        KdVideoEncodingPtr encoding = &adaptor->pEncodings[i];

        encoding->id = encoding_info->encoding;
        encoding->name = strndup(xcb_xv_encoding_info_name(encoding_info),
                                 encoding_info->name_size);
        encoding->width = encoding_info->width;
        encoding->height = encoding_info->height;
        encoding->rate.numerator = encoding_info->rate.numerator;
        encoding->rate.denominator = encoding_info->rate.denominator;

        xcb_xv_encoding_info_next(&encoding_it);
    }

    free(reply);
    return TRUE;
}

static Bool
translate_xv_attributes(KdVideoAdaptorPtr adaptor,
                        xcb_xv_adaptor_info_t *host_adaptor)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    int i = 0;
    xcb_xv_attribute_info_iterator_t it;
    xcb_xv_query_port_attributes_cookie_t cookie =
        xcb_xv_query_port_attributes(conn, host_adaptor->base_id);
    xcb_xv_query_port_attributes_reply_t *reply =
        xcb_xv_query_port_attributes_reply(conn, cookie, NULL);

    if (!reply)
        return FALSE;

    adaptor->nAttributes = reply->num_attributes;
    adaptor->pAttributes = calloc(reply->num_attributes,
                                  sizeof(*adaptor->pAttributes));
    if (!adaptor->pAttributes) {
        EPHYR_LOG_ERROR("failed to allocate attributes\n");
        free(reply);
        return FALSE;
    }

    it = xcb_xv_query_port_attributes_attributes_iterator(reply);
    for (i = 0; i < reply->num_attributes; i++) {
        XvAttributePtr attribute = &adaptor->pAttributes[i];

        attribute->flags = it.data->flags;
        attribute->min_value = it.data->min;
        attribute->max_value = it.data->max;
        attribute->name = strndup(xcb_xv_attribute_info_name(it.data),
                                  it.data->size);

        /* make sure atoms of attrs names are created in xephyr */
        MakeAtom(xcb_xv_attribute_info_name(it.data), it.data->size, TRUE);

        xcb_xv_attribute_info_next(&it);
    }

    free(reply);
    return TRUE;
}

static Bool
translate_xv_image_formats(KdVideoAdaptorPtr adaptor,
                           xcb_xv_adaptor_info_t *host_adaptor)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    int i = 0;
    xcb_xv_list_image_formats_cookie_t cookie =
        xcb_xv_list_image_formats(conn, host_adaptor->base_id);
    xcb_xv_list_image_formats_reply_t *reply =
        xcb_xv_list_image_formats_reply(conn, cookie, NULL);
    xcb_xv_image_format_info_t *formats;

    if (!reply)
        return FALSE;

    adaptor->nImages = reply->num_formats;
    adaptor->pImages = calloc(reply->num_formats, sizeof(XvImageRec));
    if (!adaptor->pImages) {
        free(reply);
        return FALSE;
    }

    formats = xcb_xv_list_image_formats_format(reply);
    for (i = 0; i < reply->num_formats; i++) {
        XvImagePtr image = &adaptor->pImages[i];

        image->id = formats[i].id;
        image->type = formats[i].type;
        image->byte_order = formats[i].byte_order;
        memcpy(image->guid, formats[i].guid, 16);
        image->bits_per_pixel = formats[i].bpp;
        image->format = formats[i].format;
        image->num_planes = formats[i].num_planes;
        image->depth = formats[i].depth;
        image->red_mask = formats[i].red_mask;
        image->green_mask = formats[i].green_mask;
        image->blue_mask = formats[i].blue_mask;
        image->y_sample_bits = formats[i].y_sample_bits;
        image->u_sample_bits = formats[i].u_sample_bits;
        image->v_sample_bits = formats[i].v_sample_bits;
        image->horz_y_period = formats[i].vhorz_y_period;
        image->horz_u_period = formats[i].vhorz_u_period;
        image->horz_v_period = formats[i].vhorz_v_period;
        image->vert_y_period = formats[i].vvert_y_period;
        image->vert_u_period = formats[i].vvert_u_period;
        image->vert_v_period = formats[i].vvert_v_period;
        memcpy(image->component_order, formats[i].vcomp_order, 32);
        image->scanline_order = formats[i].vscanline_order;
    }

    free(reply);
    return TRUE;
}

static Bool
ephyrXVPrivQueryHostAdaptors(EphyrXVPriv * a_this)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_screen_t *xscreen = xcb_aux_get_screen(conn, hostx_get_screen());
    int base_port_id = 0, i = 0, port_priv_offset = 0;
    Bool is_ok = FALSE;
    xcb_generic_error_t *e = NULL;
    xcb_xv_adaptor_info_iterator_t it;

    EPHYR_RETURN_VAL_IF_FAIL(a_this, FALSE);

    EPHYR_LOG("enter\n");

    {
        xcb_xv_query_adaptors_cookie_t cookie =
            xcb_xv_query_adaptors(conn, xscreen->root);
        a_this->host_adaptors = xcb_xv_query_adaptors_reply(conn, cookie, &e);
        if (e) {
            free(e);
            EPHYR_LOG_ERROR("failed to query host adaptors\n");
            goto out;
        }
    }

    if (a_this->host_adaptors)
        a_this->num_adaptors = a_this->host_adaptors->num_adaptors;
    if (a_this->num_adaptors < 0) {
        EPHYR_LOG_ERROR("failed to get number of host adaptors\n");
        goto out;
    }
    EPHYR_LOG("host has %d adaptors\n", a_this->num_adaptors);
    /*
     * copy what we can from adaptors into a_this->adaptors
     */
    if (a_this->num_adaptors) {
        a_this->adaptors = calloc(a_this->num_adaptors,
                                  sizeof(KdVideoAdaptorRec));
        if (!a_this->adaptors) {
            EPHYR_LOG_ERROR("failed to create internal adaptors\n");
            goto out;
        }
    }

    it = xcb_xv_query_adaptors_info_iterator(a_this->host_adaptors);
    for (i = 0; i < a_this->num_adaptors; i++) {
        xcb_xv_adaptor_info_t *cur_host_adaptor = it.data;
        xcb_xv_format_t *format = xcb_xv_adaptor_info_formats(cur_host_adaptor);
        int j = 0;

        a_this->adaptors[i].nPorts = cur_host_adaptor->num_ports;
        if (a_this->adaptors[i].nPorts <= 0) {
            EPHYR_LOG_ERROR("Could not find any port of adaptor %d\n", i);
            continue;
        }
        a_this->adaptors[i].type = cur_host_adaptor->type;
        a_this->adaptors[i].type |= XvWindowMask;
        a_this->adaptors[i].flags =
            VIDEO_OVERLAID_IMAGES | VIDEO_CLIP_TO_VIEWPORT;
        a_this->adaptors[i].name =
            strndup(xcb_xv_adaptor_info_name(cur_host_adaptor),
                    cur_host_adaptor->name_size);
        if (!a_this->adaptors[i].name)
            a_this->adaptors[i].name = strdup("Xephyr Video Overlay");
        base_port_id = cur_host_adaptor->base_id;
        if (base_port_id < 0) {
            EPHYR_LOG_ERROR("failed to get port id for adaptor %d\n", i);
            continue;
        }
        if (!s_base_port_id)
            s_base_port_id = base_port_id;

        if (!translate_video_encodings(&a_this->adaptors[i],
                                       cur_host_adaptor)) {
            EPHYR_LOG_ERROR("failed to get encodings for port port id %d,"
                            " adaptors %d\n", base_port_id, i);
            continue;
        }

        a_this->adaptors[i].nFormats = cur_host_adaptor->num_formats;
        a_this->adaptors[i].pFormats =
            calloc(cur_host_adaptor->num_formats,
                   sizeof(*a_this->adaptors[i].pFormats));
        for (j = 0; j < cur_host_adaptor->num_formats; j++) {
            xcb_visualtype_t *visual =
                xcb_aux_find_visual_by_id(xscreen, format[j].visual);
            a_this->adaptors[i].pFormats[j].depth = format[j].depth;
            a_this->adaptors[i].pFormats[j].class = visual->_class;
        }

        a_this->adaptors[i].pPortPrivates =
            calloc(a_this->adaptors[i].nPorts,
                   sizeof(DevUnion) + sizeof(EphyrPortPriv));
        port_priv_offset = a_this->adaptors[i].nPorts;
        for (j = 0; j < a_this->adaptors[i].nPorts; j++) {
            EphyrPortPriv *port_privs_base =
                (EphyrPortPriv *) &a_this->adaptors[i].
                pPortPrivates[port_priv_offset];
            EphyrPortPriv *port_priv = &port_privs_base[j];

            port_priv->port_number = base_port_id + j;
            port_priv->current_adaptor = &a_this->adaptors[i];
            port_priv->xv_priv = a_this;
            a_this->adaptors[i].pPortPrivates[j].ptr = port_priv;
        }

        if (!translate_xv_attributes(&a_this->adaptors[i], cur_host_adaptor)) {
        {
            EPHYR_LOG_ERROR("failed to get port attribute "
                            "for adaptor %d\n", i);
            continue;
        }
        }

        if (!translate_xv_image_formats(&a_this->adaptors[i], cur_host_adaptor)) {
            EPHYR_LOG_ERROR("failed to get image formats "
                            "for adaptor %d\n", i);
            continue;
        }

        xcb_xv_adaptor_info_next(&it);
    }
    is_ok = TRUE;

 out:
    EPHYR_LOG("leave\n");
    return is_ok;
}

static Bool
ephyrXVPrivSetAdaptorsHooks(EphyrXVPriv * a_this)
{
    int i = 0;
    xcb_xv_adaptor_info_iterator_t it;

    EPHYR_RETURN_VAL_IF_FAIL(a_this, FALSE);

    EPHYR_LOG("enter\n");

    it = xcb_xv_query_adaptors_info_iterator(a_this->host_adaptors);
    for (i = 0; i < a_this->num_adaptors; i++) {
        xcb_xv_adaptor_info_t *cur_host_adaptor = it.data;

        a_this->adaptors[i].ReputImage = ephyrReputImage;
        a_this->adaptors[i].StopVideo = ephyrStopVideo;
        a_this->adaptors[i].SetPortAttribute = ephyrSetPortAttribute;
        a_this->adaptors[i].GetPortAttribute = ephyrGetPortAttribute;
        a_this->adaptors[i].QueryBestSize = ephyrQueryBestSize;
        a_this->adaptors[i].QueryImageAttributes = ephyrQueryImageAttributes;

        if (adaptor_has_flags(cur_host_adaptor,
                              XCB_XV_TYPE_IMAGE_MASK | XCB_XV_TYPE_INPUT_MASK))
            a_this->adaptors[i].PutImage = ephyrPutImage;

        if (adaptor_has_flags(cur_host_adaptor,
                              XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_INPUT_MASK))
            a_this->adaptors[i].PutVideo = ephyrPutVideo;

        if (adaptor_has_flags(cur_host_adaptor,
                              XCB_XV_TYPE_VIDEO_MASK | XCB_XV_TYPE_OUTPUT_MASK))
            a_this->adaptors[i].GetVideo = ephyrGetVideo;

        if (adaptor_has_flags(cur_host_adaptor,
                              XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_INPUT_MASK))
            a_this->adaptors[i].PutStill = ephyrPutStill;

        if (adaptor_has_flags(cur_host_adaptor,
                              XCB_XV_TYPE_STILL_MASK | XCB_XV_TYPE_OUTPUT_MASK))
            a_this->adaptors[i].GetStill = ephyrGetStill;
    }
    EPHYR_LOG("leave\n");
    return TRUE;
}

static Bool
ephyrXVPrivRegisterAdaptors(EphyrXVPriv * a_this, ScreenPtr a_screen)
{
    Bool is_ok = FALSE;

    EPHYR_RETURN_VAL_IF_FAIL(a_this && a_screen, FALSE);

    EPHYR_LOG("enter\n");

    if (!a_this->num_adaptors)
        goto out;

    if (!KdXVScreenInit(a_screen, a_this->adaptors, a_this->num_adaptors)) {
        EPHYR_LOG_ERROR("failed to register adaptors\n");
        goto out;
    }
    EPHYR_LOG("there are  %d registered adaptors\n", a_this->num_adaptors);
    is_ok = TRUE;

 out:

    EPHYR_LOG("leave\n");
    return is_ok;
}

static Bool
ephyrXVPrivIsAttrValueValid(XvAttributePtr a_attrs,
                            int a_attrs_len,
                            const char *a_attr_name,
                            int a_attr_value, Bool *a_is_valid)
{
    int i = 0;

    EPHYR_RETURN_VAL_IF_FAIL(a_attrs && a_attr_name && a_is_valid, FALSE);

    for (i = 0; i < a_attrs_len; i++) {
        if (a_attrs[i].name && strcmp(a_attrs[i].name, a_attr_name))
            continue;
        if (a_attrs[i].min_value > a_attr_value ||
            a_attrs[i].max_value < a_attr_value) {
            *a_is_valid = FALSE;
            EPHYR_LOG_ERROR("attribute was not valid\n"
                            "value:%d. min:%d. max:%d\n",
                            a_attr_value,
                            a_attrs[i].min_value, a_attrs[i].max_value);
        }
        else {
            *a_is_valid = TRUE;
        }
        return TRUE;
    }
    return FALSE;
}

static Bool
ephyrXVPrivGetImageBufSize(int a_port_id,
                           int a_image_id,
                           unsigned short a_width,
                           unsigned short a_height, int *a_size)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_xv_query_image_attributes_cookie_t cookie;
    xcb_xv_query_image_attributes_reply_t *reply;
    Bool is_ok = FALSE;

    EPHYR_RETURN_VAL_IF_FAIL(a_size, FALSE);

    EPHYR_LOG("enter\n");

    cookie = xcb_xv_query_image_attributes(conn,
                                           a_port_id, a_image_id,
                                           a_width, a_height);
    reply = xcb_xv_query_image_attributes_reply(conn, cookie, NULL);
    if (!reply)
        goto out;

    *a_size = reply->data_size;
    is_ok = TRUE;

    free(reply);

 out:
    EPHYR_LOG("leave\n");
    return is_ok;
}

static Bool
ephyrXVPrivSaveImageToPortPriv(EphyrPortPriv * a_port_priv,
                               const unsigned char *a_image_buf,
                               int a_image_len)
{
    Bool is_ok = FALSE;

    EPHYR_LOG("enter\n");

    if (a_port_priv->image_buf_size < a_image_len) {
        unsigned char *buf = NULL;

        buf = realloc(a_port_priv->image_buf, a_image_len);
        if (!buf) {
            EPHYR_LOG_ERROR("failed to realloc image buffer\n");
            goto out;
        }
        a_port_priv->image_buf = buf;
        a_port_priv->image_buf_size = a_image_len;
    }
    memmove(a_port_priv->image_buf, a_image_buf, a_image_len);
    is_ok = TRUE;

 out:
    return is_ok;
    EPHYR_LOG("leave\n");
}

static void
ephyrStopVideo(KdScreenInfo * a_info, void *a_port_priv, Bool a_exit)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    EphyrPortPriv *port_priv = a_port_priv;
    EphyrScrPriv *scrpriv = a_info->driver;

    EPHYR_RETURN_IF_FAIL(port_priv);

    EPHYR_LOG("enter\n");
    xcb_xv_stop_video(conn, port_priv->port_number, scrpriv->win);
    EPHYR_LOG("leave\n");
}

static int
ephyrSetPortAttribute(KdScreenInfo * a_info,
                      Atom a_attr_name, int a_attr_value, void *a_port_priv)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    int res = Success, host_atom = 0;
    EphyrPortPriv *port_priv = a_port_priv;
    Bool is_attr_valid = FALSE;

    EPHYR_RETURN_VAL_IF_FAIL(port_priv, BadMatch);
    EPHYR_RETURN_VAL_IF_FAIL(port_priv->current_adaptor, BadMatch);
    EPHYR_RETURN_VAL_IF_FAIL(port_priv->current_adaptor->pAttributes, BadMatch);
    EPHYR_RETURN_VAL_IF_FAIL(port_priv->current_adaptor->nAttributes, BadMatch);
    EPHYR_RETURN_VAL_IF_FAIL(ValidAtom(a_attr_name), BadMatch);

    EPHYR_LOG("enter, portnum:%d, atomid:%d, attr_name:%s, attr_val:%d\n",
              port_priv->port_number,
              (int) a_attr_name, NameForAtom(a_attr_name), a_attr_value);

    if (!ephyrLocalAtomToHost(a_attr_name, &host_atom)) {
        EPHYR_LOG_ERROR("failed to convert local atom to host atom\n");
        res = BadMatch;
        goto out;
    }

    if (!ephyrXVPrivIsAttrValueValid(port_priv->current_adaptor->pAttributes,
                                     port_priv->current_adaptor->nAttributes,
                                     NameForAtom(a_attr_name),
                                     a_attr_value, &is_attr_valid)) {
        EPHYR_LOG_ERROR("failed to validate attribute %s\n",
                        NameForAtom(a_attr_name));
        /*
           res = BadMatch ;
           goto out ;
         */
    }
    if (!is_attr_valid) {
        EPHYR_LOG_ERROR("attribute %s is not valid\n",
                        NameForAtom(a_attr_name));
        /*
           res = BadMatch ;
           goto out ;
         */
    }

    xcb_xv_set_port_attribute(conn, port_priv->port_number,
                              host_atom, a_attr_value);
    xcb_flush(conn);

    res = Success;
 out:
    EPHYR_LOG("leave\n");
    return res;
}

static int
ephyrGetPortAttribute(KdScreenInfo * a_screen_info,
                      Atom a_attr_name, int *a_attr_value, void *a_port_priv)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    int res = Success, host_atom = 0;
    EphyrPortPriv *port_priv = a_port_priv;
    xcb_generic_error_t *e;
    xcb_xv_get_port_attribute_cookie_t cookie;
    xcb_xv_get_port_attribute_reply_t *reply;

    EPHYR_RETURN_VAL_IF_FAIL(port_priv, BadMatch);
    EPHYR_RETURN_VAL_IF_FAIL(ValidAtom(a_attr_name), BadMatch);

    EPHYR_LOG("enter, portnum:%d, atomid:%d, attr_name:%s\n",
              port_priv->port_number,
              (int) a_attr_name, NameForAtom(a_attr_name));

    if (!ephyrLocalAtomToHost(a_attr_name, &host_atom)) {
        EPHYR_LOG_ERROR("failed to convert local atom to host atom\n");
        res = BadMatch;
        goto out;
    }

    cookie = xcb_xv_get_port_attribute(conn, port_priv->port_number, host_atom);
    reply = xcb_xv_get_port_attribute_reply(conn, cookie, &e);
    if (e) {
        EPHYR_LOG_ERROR ("XvGetPortAttribute() failed: %d \n", e->error_code);
        free(e);
        res = BadMatch;
        goto out;
    }
    *a_attr_value = reply->value;

    free(reply);

    res = Success;
 out:
    EPHYR_LOG("leave\n");
    return res;
}

static void
ephyrQueryBestSize(KdScreenInfo * a_info,
                   Bool a_motion,
                   short a_src_w,
                   short a_src_h,
                   short a_drw_w,
                   short a_drw_h,
                   unsigned int *a_prefered_w,
                   unsigned int *a_prefered_h, void *a_port_priv)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    EphyrPortPriv *port_priv = a_port_priv;
    xcb_xv_query_best_size_cookie_t cookie =
        xcb_xv_query_best_size(conn,
                               port_priv->port_number,
                               a_src_w, a_src_h,
                               a_drw_w, a_drw_h,
                               a_motion);
    xcb_xv_query_best_size_reply_t *reply =
        xcb_xv_query_best_size_reply(conn, cookie, NULL);

    EPHYR_LOG("enter: frame (%dx%d), drw (%dx%d)\n",
              a_src_w, a_src_h, a_drw_w, a_drw_h);

    if (!reply) {
        EPHYR_LOG_ERROR ("XvQueryBestSize() failed\n");
        return;
    }
    *a_prefered_w = reply->actual_width;
    *a_prefered_h = reply->actual_height;
    EPHYR_LOG("actual (%dx%d)\n", *a_prefered_w, *a_prefered_h);
    free(reply);

    EPHYR_LOG("leave\n");
}

static Bool
ephyrHostXVPutImage(KdScreenInfo * a_info,
                    EphyrPortPriv *port_priv,
                    int a_image_id,
                    int a_drw_x,
                    int a_drw_y,
                    int a_drw_w,
                    int a_drw_h,
                    int a_src_x,
                    int a_src_y,
                    int a_src_w,
                    int a_src_h,
                    int a_image_width,
                    int a_image_height,
                    unsigned char *a_buf,
                    BoxPtr a_clip_rects, int a_clip_rect_nums)
{
    EphyrScrPriv *scrpriv = a_info->driver;
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_gcontext_t gc;
    Bool is_ok = TRUE;
    xcb_rectangle_t *rects = NULL;
    int data_len, width, height;
    xcb_xv_query_image_attributes_cookie_t image_attr_cookie;
    xcb_xv_query_image_attributes_reply_t *image_attr_reply;

    EPHYR_RETURN_VAL_IF_FAIL(a_buf, FALSE);

    EPHYR_LOG("enter, num_clip_rects: %d\n", a_clip_rect_nums);

    image_attr_cookie = xcb_xv_query_image_attributes(conn,
                                                      port_priv->port_number,
                                                      a_image_id,
                                                      a_image_width,
                                                      a_image_height);
    image_attr_reply = xcb_xv_query_image_attributes_reply(conn,
                                                           image_attr_cookie,
                                                           NULL);
    if (!image_attr_reply)
        goto out;
    data_len = image_attr_reply->data_size;
    width = image_attr_reply->width;
    height = image_attr_reply->height;
    free(image_attr_reply);

    gc = xcb_generate_id(conn);
    xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);

    if (a_clip_rect_nums) {
        int i = 0;
        rects = calloc(a_clip_rect_nums, sizeof(xcb_rectangle_t));
        for (i=0; i < a_clip_rect_nums; i++) {
            rects[i].x = a_clip_rects[i].x1;
            rects[i].y = a_clip_rects[i].y1;
            rects[i].width = a_clip_rects[i].x2 - a_clip_rects[i].x1;
            rects[i].height = a_clip_rects[i].y2 - a_clip_rects[i].y1;
            EPHYR_LOG("(x,y,w,h): (%d,%d,%d,%d)\n",
                      rects[i].x, rects[i].y, rects[i].width, rects[i].height);
        }
        xcb_set_clip_rectangles(conn,
                                XCB_CLIP_ORDERING_YX_BANDED,
                                gc,
                                0,
                                0,
                                a_clip_rect_nums,
                                rects);
	free(rects);
    }
    xcb_xv_put_image(conn,
                     port_priv->port_number,
                     scrpriv->win,
                     gc,
                     a_image_id,
                     a_src_x, a_src_y, a_src_w, a_src_h,
                     a_drw_x, a_drw_y, a_drw_w, a_drw_h,
                     width, height,
                     data_len, a_buf);
    xcb_free_gc(conn, gc);

    is_ok = TRUE;

out:
    EPHYR_LOG("leave\n");
    return is_ok;
}

static int
ephyrPutImage(KdScreenInfo * a_info,
              DrawablePtr a_drawable,
              short a_src_x,
              short a_src_y,
              short a_drw_x,
              short a_drw_y,
              short a_src_w,
              short a_src_h,
              short a_drw_w,
              short a_drw_h,
              int a_id,
              unsigned char *a_buf,
              short a_width,
              short a_height,
              Bool a_sync, RegionPtr a_clipping_region, void *a_port_priv)
{
    EphyrPortPriv *port_priv = a_port_priv;
    Bool is_ok = FALSE;
    int result = BadImplementation, image_size = 0;

    EPHYR_RETURN_VAL_IF_FAIL(a_info && a_info->pScreen, BadValue);
    EPHYR_RETURN_VAL_IF_FAIL(a_drawable, BadValue);

    EPHYR_LOG("enter\n");

    if (!ephyrHostXVPutImage(a_info, port_priv,
                             a_id,
                             a_drw_x, a_drw_y, a_drw_w, a_drw_h,
                             a_src_x, a_src_y, a_src_w, a_src_h,
                             a_width, a_height, a_buf,
                             RegionRects(a_clipping_region),
                             RegionNumRects(a_clipping_region))) {
        EPHYR_LOG_ERROR("EphyrHostXVPutImage() failed\n");
        goto out;
    }

    /*
     * Now save the image so that we can resend it to host it
     * later, in ReputImage.
     */
    if (!ephyrXVPrivGetImageBufSize(port_priv->port_number,
                                    a_id, a_width, a_height, &image_size)) {
        EPHYR_LOG_ERROR("failed to get image size\n");
        /*this is a minor error so we won't get bail out abruptly */
        is_ok = FALSE;
    }
    else {
        is_ok = TRUE;
    }
    if (is_ok) {
        if (!ephyrXVPrivSaveImageToPortPriv(port_priv, a_buf, image_size)) {
            is_ok = FALSE;
        }
        else {
            port_priv->image_id = a_id;
            port_priv->drw_x = a_drw_x;
            port_priv->drw_y = a_drw_y;
            port_priv->drw_w = a_drw_w;
            port_priv->drw_h = a_drw_h;
            port_priv->src_x = a_src_x;
            port_priv->src_y = a_src_y;
            port_priv->src_w = a_src_w;
            port_priv->src_h = a_src_h;
            port_priv->image_width = a_width;
            port_priv->image_height = a_height;
        }
    }
    if (!is_ok) {
        if (port_priv->image_buf) {
            free(port_priv->image_buf);
            port_priv->image_buf = NULL;
            port_priv->image_buf_size = 0;
        }
    }

    result = Success;

 out:
    EPHYR_LOG("leave\n");
    return result;
}

static int
ephyrReputImage(KdScreenInfo * a_info,
                DrawablePtr a_drawable,
                short a_drw_x,
                short a_drw_y, RegionPtr a_clipping_region, void *a_port_priv)
{
    EphyrPortPriv *port_priv = a_port_priv;
    int result = BadImplementation;

    EPHYR_RETURN_VAL_IF_FAIL(a_info->pScreen, FALSE);
    EPHYR_RETURN_VAL_IF_FAIL(a_drawable && port_priv, BadValue);

    EPHYR_LOG("enter\n");

    if (!port_priv->image_buf_size || !port_priv->image_buf) {
        EPHYR_LOG_ERROR("has null image buf in cache\n");
        goto out;
    }
    if (!ephyrHostXVPutImage(a_info,
                             port_priv,
                             port_priv->image_id,
                             a_drw_x, a_drw_y,
                             port_priv->drw_w, port_priv->drw_h,
                             port_priv->src_x, port_priv->src_y,
                             port_priv->src_w, port_priv->src_h,
                             port_priv->image_width, port_priv->image_height,
                             port_priv->image_buf,
                             RegionRects(a_clipping_region),
                             RegionNumRects(a_clipping_region))) {
        EPHYR_LOG_ERROR("ephyrHostXVPutImage() failed\n");
        goto out;
    }

    result = Success;

 out:
    EPHYR_LOG("leave\n");
    return result;
}

static int
ephyrPutVideo(KdScreenInfo * a_info,
              DrawablePtr a_drawable,
              short a_vid_x, short a_vid_y,
              short a_drw_x, short a_drw_y,
              short a_vid_w, short a_vid_h,
              short a_drw_w, short a_drw_h,
              RegionPtr a_clipping_region, void *a_port_priv)
{
    EphyrScrPriv *scrpriv = a_info->driver;
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_gcontext_t gc;
    EphyrPortPriv *port_priv = a_port_priv;

    EPHYR_RETURN_VAL_IF_FAIL(a_info->pScreen, BadValue);
    EPHYR_RETURN_VAL_IF_FAIL(a_drawable && port_priv, BadValue);

    EPHYR_LOG("enter\n");

    gc = xcb_generate_id(conn);
    xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
    xcb_xv_put_video(conn, port_priv->port_number,
                     scrpriv->win, gc,
                     a_vid_x, a_vid_y, a_vid_w, a_vid_h,
                     a_drw_x, a_drw_y, a_drw_w, a_drw_h);
    xcb_free_gc(conn, gc);

    EPHYR_LOG("leave\n");
    return Success;
}

static int
ephyrGetVideo(KdScreenInfo * a_info,
              DrawablePtr a_drawable,
              short a_vid_x, short a_vid_y,
              short a_drw_x, short a_drw_y,
              short a_vid_w, short a_vid_h,
              short a_drw_w, short a_drw_h,
              RegionPtr a_clipping_region, void *a_port_priv)
{
    EphyrScrPriv *scrpriv = a_info->driver;
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_gcontext_t gc;
    EphyrPortPriv *port_priv = a_port_priv;

    EPHYR_RETURN_VAL_IF_FAIL(a_info && a_info->pScreen, BadValue);
    EPHYR_RETURN_VAL_IF_FAIL(a_drawable && port_priv, BadValue);

    EPHYR_LOG("enter\n");

    gc = xcb_generate_id(conn);
    xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
    xcb_xv_get_video(conn, port_priv->port_number,
                     scrpriv->win, gc,
                     a_vid_x, a_vid_y, a_vid_w, a_vid_h,
                     a_drw_x, a_drw_y, a_drw_w, a_drw_h);

    xcb_free_gc(conn, gc);

    EPHYR_LOG("leave\n");
    return Success;
}

static int
ephyrPutStill(KdScreenInfo * a_info,
              DrawablePtr a_drawable,
              short a_vid_x, short a_vid_y,
              short a_drw_x, short a_drw_y,
              short a_vid_w, short a_vid_h,
              short a_drw_w, short a_drw_h,
              RegionPtr a_clipping_region, void *a_port_priv)
{
    EphyrScrPriv *scrpriv = a_info->driver;
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_gcontext_t gc;
    EphyrPortPriv *port_priv = a_port_priv;

    EPHYR_RETURN_VAL_IF_FAIL(a_info && a_info->pScreen, BadValue);
    EPHYR_RETURN_VAL_IF_FAIL(a_drawable && port_priv, BadValue);

    EPHYR_LOG("enter\n");

    gc = xcb_generate_id(conn);
    xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
    xcb_xv_put_still(conn, port_priv->port_number,
                     scrpriv->win, gc,
                     a_vid_x, a_vid_y, a_vid_w, a_vid_h,
                     a_drw_x, a_drw_y, a_drw_w, a_drw_h);
    xcb_free_gc(conn, gc);

    EPHYR_LOG("leave\n");
    return Success;
}

static int
ephyrGetStill(KdScreenInfo * a_info,
              DrawablePtr a_drawable,
              short a_vid_x, short a_vid_y,
              short a_drw_x, short a_drw_y,
              short a_vid_w, short a_vid_h,
              short a_drw_w, short a_drw_h,
              RegionPtr a_clipping_region, void *a_port_priv)
{
    EphyrScrPriv *scrpriv = a_info->driver;
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_gcontext_t gc;
    EphyrPortPriv *port_priv = a_port_priv;

    EPHYR_RETURN_VAL_IF_FAIL(a_info && a_info->pScreen, BadValue);
    EPHYR_RETURN_VAL_IF_FAIL(a_drawable && port_priv, BadValue);

    EPHYR_LOG("enter\n");

    gc = xcb_generate_id(conn);
    xcb_create_gc(conn, gc, scrpriv->win, 0, NULL);
    xcb_xv_get_still(conn, port_priv->port_number,
                     scrpriv->win, gc,
                     a_vid_x, a_vid_y, a_vid_w, a_vid_h,
                     a_drw_x, a_drw_y, a_drw_w, a_drw_h);
    xcb_free_gc(conn, gc);

    EPHYR_LOG("leave\n");
    return Success;
}

static int
ephyrQueryImageAttributes(KdScreenInfo * a_info,
                          int a_id,
                          unsigned short *a_w,
                          unsigned short *a_h, int *a_pitches, int *a_offsets)
{
    xcb_connection_t *conn = hostx_get_xcbconn();
    xcb_xv_query_image_attributes_cookie_t cookie;
    xcb_xv_query_image_attributes_reply_t *reply;
    int image_size = 0;

    EPHYR_RETURN_VAL_IF_FAIL(a_w && a_h, FALSE);

    EPHYR_LOG("enter: dim (%dx%d), pitches: %p, offsets: %p\n",
              *a_w, *a_h, a_pitches, a_offsets);

    cookie = xcb_xv_query_image_attributes(conn,
                                           s_base_port_id, a_id,
                                           *a_w, *a_h);
    reply = xcb_xv_query_image_attributes_reply(conn, cookie, NULL);
    if (!reply)
        goto out;

    *a_w = reply->width;
    *a_h = reply->height;
    if (a_pitches && a_offsets) {
        memcpy(a_pitches, xcb_xv_query_image_attributes_pitches(reply),
               reply->num_planes << 2);
        memcpy(a_offsets, xcb_xv_query_image_attributes_offsets(reply),
               reply->num_planes << 2);
    }
    image_size = reply->data_size;

    free(reply);

    EPHYR_LOG("image size: %d, dim (%dx%d)\n", image_size, *a_w, *a_h);

 out:
    EPHYR_LOG("leave\n");
    return image_size;
}


text:
The Land of Painted Caves (Earth's Children #6)
Promotion info
The triumphant finale of the hugely successful Earth's Childrens(R) series
'Jean Auel's amazing, ground-breaking series reaches a stunning conclusion... If you ever wondered what it was like for the first reasoning humans, this is the perfect way to learn. It's as though Auel has opened up a time portal, travelled with and lived with actual human beings as they begin their journey towards the people we are today. Moving and majestic, this story sweeps all before it and encompasses everything we know about our ancestors as they trek through central Europe and set up home in the caves there. All life is here in all its glory, the loves, the jealousy, the rivalry, the medicines ... A compelling historical drama with every modern trait of the human being, but set in the days when the world was young. Magnificent, and a privilege to be able to read it. You must read this.' -- Books Monthly 'She deftly creates a whole world, giving a sense of the origins of class, ethnic and cultural differences that alternately divide and fascinate us today. Among modern epic spinners, Auel has few peers.' -- Kirkus Reviews 'Incredibly poignant and relevant to today' -- Sun 4 stars 'She does have a most extraordinary talent for recreating lost worlds' -- Kate Saunders, Books Quarterly
Jean M. Auel is one of the world's most esteemed and beloved authors. Her extensive factual research has earned her the respect of renowned scientists, archaeologists and anthropologists around the globe, culminating in her being made an Officer of the Order of Arts & Letters by the French Minister of Culture and Communication in 2008.
Publisher : Hodder & Stoughton
Imprint : Hodder & Stoughton Ltd
Author : Jean M. Auel


""What About Women?" Historical Perspectives on the Cswe Council on the" by Ann Rosegrant Alvarez, Kathryn S. Collins et al.
The Council on the Role and Status of Women in Social Work Education (WC), a volunteer committee of the Council on Social Work Education (CSWE), has a 37-year history. This article presents an overview of the WC from the late 1960s to September 2006 and acknowledges the needs, status, and contributions of women in social work education. Drawing on primary and secondary data sources, the authors articulate two central themes: (1) organizational development of the WC, and (2) contributions of the WC to social work education and practice. The mission and work of the WC remain relevant today, because there is still a need to monitor and advocate for equity for women in social work education.
Alvarez, Ann Rosegrant; Collins, Kathryn S.; Graber, Helen V.; and Lazzari, Marceline M., ""What About Women?" Historical Perspectives on the Cswe Council on the Role and Status of Women in Social Work Education (Women's Council)" (2008). Social Work & Criminal Justice Publications. 335.


text:
Kendrick Lamar On His First Mixtape, Drawing Inspiration From Others
Kendrick Lamar recently dropped off his digital album Section.80, but it's taken him nearly eight years to put it out. In an interview with TDK, K. Dot recalled his first mixtape that he released at 16 years old and how it helped set his career on the right path.
"A mixtape is raw Hip Hop. Free verse, no structure, good beats, good rhymes – great mixtape. My first mixtape, I was 16 and it was called Y.H.N.I.C., Youngest Head Nigga In Charge. Kind of ignorant, right?" he said. "We put it out on a local scale in Compton and built a buzz in the city and eventually got to this guy named Top Dawg, he had his own independent label and I've been with them since and we've just been developing my sound and branching off of that mixtape to eventually have a debut album."
He also spoke on how Tupac Shakur is one of his biggest inspirations, and that he looks at the world around him to motivate his raps.
"I draw from experience, I draw from people around me," he continued. "I like people in general. My life, family, experiences, experiences of other people, just going through situations in life, in general. I think music is supposed to move, and the best way to move a person is to relate and connect to what they're going through."
RELATED: Kendrick Lamar Speaks On Pressure From Dr. Dre & Snoop Dogg Co-Sign, Spits A Freestyle