Planning this very special 70th Birthday was almost as fun and exciting as the trip itself. It all began a year before the event, when my client asked me for a totally unique experience for his closest friends and family. After finding the perfect venue, &Beyond Kichwa Tembo Tented Camp in the Masai Mara, we knew this would be the trip of a lifetime, and it certainly was! Guests were welcomed at London Stansted's Inflite Jet Centre, where they sipped champagne and enjoyed the canapés, before boarding a private A340 charter with VIP configuration. This is where we let loose on personalised, little gifts for the guests to enjoy; from the pyjamas and wash bags, to the animal print socks and naughty eye shades. Upon landing in Nairobi, guests were whisked away on light aircraft, each with a different animal print to match the guests' boarding passes. They were greeted by singing Masai women and herds of zebra, buffalo and even a few lions! The four-day itinerary in the Masai Mara included hot air balloon rides at sunrise, where upon landing guests were treated to a champagne breakfast buffet in the bush surrounded by the Great Migration. Every meal was an event, whether it was a lively Brunch around the pool, formal Gala Dinner, wild Bush BBQ or simple picnic next to an exciting river crossing, every detail was orchestrated to perfection. My personal highlight was the superb and hilarious performance by the cast of Priscilla Queen of the Desert, secretly requested by the Birthday Boy's family. It truly was the trip of a lifetime, and a huge pleasure to plan so many wonderful details and experiences for the guests and suppliers who will never forget it.


text:
Guided Meditation App Guided By Glow Is "Erotica Meets ASMR"
Guided By Glow is an innovative new audio app that spices up your guided meditation sessions with a range of erotic spoken word scenarios written by professional authors, performed by professional actors, and informed by medical professionals and wellness advisors.
Each story lasts around ten to 20 minutes, and there are currently more than 45 scenarios to choose from, with more being added every week. Guided By Glow is described by its developers as "erotica meets ASMR", which sounds like a solid elevator pitch to us.
If you've never used guided meditation before, here's how it works. You get comfortable, close your eyes, and figuratively place yourself in the hands of an expert practitioner in the ancient art of chilling out.
Guided By Glow is a little bit different. Here your practitioner guides your mood and state of mind by describing erotic scenarios. Your sexuality is an important dimension of your inner life, after all, and it deserves a seat on the meditation train.
Of course, sexuality can be a very sensitive area, which is why Guided By Glow offers a safe sensory space involving consensual intimate encounters. You can stop, pause, and cancel your session at any time.
You can also do it again.
The content is strictly categorized to ensure that you'll never encounter any unwelcome surprises during meditation, and you can search the app by theme of voice. You can also pick your favorite voices and sessions, and there are experiences catered towards every pronoun, whether You, Her, Him, or Them.
Guided By Glow is ad-free and available as a flexible subscription that you can pay monthly or annually. There's a free 7-day trial, too, so you can decide whether erotic meditation sessions are for you without spending a cent.
To get started, download Guided By Glow for free right now on the App Store and Google Play Store.
KrakenD joins the Linux Foundation as the Lura Project WordPress Community Team Discusses Adding Vaccination Status to In-Person Meetup Safety Checklist – WordPress Tavern

redpajama_set_name: RedPajamaCommonCrawl


text:
On - site wind tunnel capabilities
On-site Wind Tunnel Capabilities
Williams offers two world class, closed-return automotive wind tunnels for customer development programmes that deliver proven correlation with championship credentials for both open and closed wheel race cars; F1, LMP1, F3, WTCC and BTCC.
The Formula 1 specification steel-belt rolling road systems with model motion systems and climatically controlled capabilities enable the ability to test both model scale and full-scale vehicles.
Williams has the infrastructure and personnel to support 24/7 programmes, real time data acquisition and automated image recording, backed up by a comprehensive maintenance schedule. IT systems are well regulated, also offering partitioned data storage with secure firewall protection.
The on-site facilities also offers multiple security card protected model shop facilities and Model Makers and workshop facilities as well as on-site composites, machine shop facilities, ADM (Advanced Digital Manufacture), inspection and procurement teams working to F1 standards and production timescales.
The motorsports team are customer orientated Aerodynamicists, Model Designers and Engineering support staff with an enviable list of experience in motorsport development, performance equivalency, OEM vehicle optimisation and sports science. The team is able to offer state-of-the-art Computational Fluid Dynamics (CFD) capabilities, developed alongside the Williams Formula 1 team, sharing the same software, methodology and on-site supercomputers and data storage facility.
Triumph TE-1
This new collaboration will combine Triumph's globally-renowned motorcycle expertise with advanced automotive-based capabilities to generate technological innovation for future electric motorcycles.
Aerofoils
Aerofoil Energy and Williams Advanced Engineering have jointly developed Aerofoil, a new device that attaches onto a supermarket refrigerator shelf, to keep more of the cool air inside the refrigerator cabinet.
Prestigious luxury car maker Aston Martin will launch its first-ever all-electric car in 2019, the Rapide E - based upon the Rapide AMR concept.
Athlete Performance
Williams Advanced Engineering applies its knowledge and expertise to understand the aerodynamics of the human body. The goal is to analyse airflow around the body and the various aerodynamic factors that can influence the performance of athletes and their equipment.
Nissan Bladeglider
The ground-breaking BladeGlider is Nissan's view of a next-generation electric sports car and Williams Advanced Engineering has played an important role in the vehicle's conception and creation as Nissan's technical partner.
Karen Darke
Marking Williams Advanced Engineering's first entry into the sports equipment market is a state-of-the-art hand cycle for disabled athletes that uses Formula One-bred design principles – and has been proven at the highest level of competition.
In January 2019 renowned British engineering companies Williams Advanced Engineering and Lotus announced plans to collaborate on advanced propulsion technologies.
Williams Advanced Engineering worked with NISMO, the performance orientated brand of Nissan, in the development of high performance road cars.
Singer undertook a Dynamics and Lightweighting Study (known as DLS) with Williams Advanced Engineering, engaging Williams to develop a selection of restoration and modification services.
Thales BSCS
Williams Advanced Engineering was responsible for the development of an innovative air detection system designed to protect troops from the threat of biological attack.
© Williams Advanced Engineering Limited
Williams Advanced Engineering Limited is a company registered in England and Wales under company number 08012215.


text:
Q: Values in Excel cells only refresh on save I have a workbook which contains many formulas. Up until a few days ago whenever source data was manually updated all the calculated values in cells containing formulas also automatically refreshed. In order to get calculated values to now refresh we have to click CTRL-S to save the sheet - then all the values update. Does anyone is there is a workbook setting that controls whether calculated values refresh in real-time when source value cells change or only upon saving?

A: File>Options>Formulas>Workbook Calculation
Set to Automatic. See screenshot below.
If it's already set to Automatic, then you may have some VBA messing this up somewhere.

redpajama_set_name: RedPajamaStackExchange


If you've made it to level 30 in The Division, you're now on a mission to get high-end weapons, gear, and mods for your character to tackle the game's tougher challenges and end-game content. Sounds simple enough, but The Division doesn't hand out these Yellow/Gold weapons and equipment without some hurdles. However, there are plenty of ways to go about getting them. Here are all the methods we've found to get the very best weapons and gear in The Division.
Once you've reached level 30 in The Division, you'll gain access to a few new vendors in the game which will sell you Gold High-End Weapons and Gear. There are a couple of ways to purchase these weapons and gear, and you can use normal currency as well an end-game currency called Phoenix Credits. Phoenix Credits can be earned from doing Daily Challenges and defeating bosses/exploring in the Dark Zone. Not all vendors require Phoenix Credits to purchase High-End Gear. An Advanced Weaponry Vendor found in the Security Wing will sell you Gold weapons, for a substantial sum of regular credits. The two weapons currently being sold at this vendor start at around 500,000 credits.
Daily Challenges are effectively the toughest things to in The Division. At least right now, before any "raid content" has been released. These missions are simply harder versions of the game's regular missions, but the enemies being thrown at the player are a much tougher challenge. The rewards, however, are very good. For doing this daily mission, you'll earn Phoenix Credits, which can be used to buy Gold Weapons outright, and gold crafting materials. The mission rewards are even more Phoenix Credits, normal credits, and a guaranteed Gold Gear item.
Daily Challenges require an incredible amount of teamwork to complete, but the rewards are the greatest with a guaranteed gold high-end gear piece.
Challenging Mode is a little bit different than Daily Challenges in that they don't offer the added bonuses of high-end parts and extra Phoenix Credits, but they do still guarantee a high-end piece of equipment as a reward. These missions have been a little easier than the daily challenges, and you can run them multiple times to keep earning new high-end pieces.
The Dark Zone is one of the most interesting parts of The Division. It's a place where players fight against AI mobs, as well as each other. Here you can earn high-end gear in a number of ways. First and foremost, there are a number of bosses that roam the six zones within the Dark Zone. There's a good chance that defeating a boss in the Dark Zone will net you a gold drop, but it's all up to random generation. Of course, given the nature of the Dark Zone, you could also win a gold drop from a player vs. player encounter as well. Phoenix Credits are also doled out by defeating certain enemies in the Dark Zone. Unfortunately, the Dark Zone is a dangerous place. Even if you manage to pick up a gold drop from a player or enemy, you still have to get it to a drop zone and extract the item(s).
A Special Vendor in the Dark Zone, located in the Safe House of zone six at the northern most part of the Dark Zone will also sell you Gold Weapons/Armor. However, purchasing from this vendor requires that you are Dark Zone Level 50. This vendor only accepts Phoenix credits and refreshes stock each week.
Happy hunting Division players. Gold gear and weapons raise DPS, Health, and Skill Power considerably and will most likely be necessary to beat the game's toughest challenges that lie ahead with expansions and raids.


What do Emilio Estevez, the Green Goblin, and cocaine have in common? They all play a part in the making of Maximum Overdrive! Get ready to freak out when the machines take over and watch for flaming toilet paper!


With a professional tile installation from About Floors n' More, you can't go wrong. A lot can go wrong with a tile installation if it isn't done correctly. You've decided that tile is the flooring you want for your project or home renovation. Maybe you've chosen ceramic tile for a room with less traffic or porcelain tile for a room with more traffic when seasons demand frost resistance, so it makes sense for your lifestyle.
Natural stone is another tile option for the depth of beauty and mosaic options for that special accent in a room. So many colors, so many styles, and so many combinations to help you achieve just the look you want. For some, tile is a good option with children and animals around, and easy to clean up. For others, it is the versatility and possibly European charm one can achieve for instance with natural stone. Regardless of the type of tile you choose, About Floors n' More's installation professionals know exactly how to get the job done. We are licensed, trained and insured.
Regardless of the type of stone or tile chosen, the surface of the subfloor must be prepared to be flat, smooth and dry. If there are any ridges or any type of indentations or bumps these would need to be dealt with prior to installation.
The professionals at About Floors n' More will go over everything with you prior to installation day…no need to worry. And if you have questions, before, after or during we are always available. For your next tile installation project, visit one of our two showrooms in Jacksonville, Florida or call us today to schedule an appointment.


text:
package wechat

import (
	"context"
	"go-common/app/admin/ep/saga/model"
	"go-common/library/log"
)

// Changes changes structure
type Changes struct {
	Adds []*model.ContactInfo
	Upts []*model.ContactInfo
	Dels []*model.ContactInfo
}

// SyncContacts sync the contacts from wechat work 更新用户信息列表
func (w *Wechat) SyncContacts(c context.Context) (err error) {
	//更新数据库用户列表 contact_infos
	if err = w.AnalysisContacts(c); err != nil {
		return
	}
	//更新用户saga信息
	/*if err = w.UpdateVisible(c); err != nil {
		return
	}*/
	return
}

// AnalysisContacts analysis the contact difference and save them 从企业微信更新用户列表最新
func (w *Wechat) AnalysisContacts(c context.Context) (err error) {
	var (
		contactsInDB   []*model.ContactInfo
		wechatContacts []*model.ContactInfo
		changes        = &Changes{}
	)
	//数据库里查询用户信息列表
	if contactsInDB, err = w.dao.ContactInfos(); err != nil {
		return
	}
	//企业微信接口查询用户列表
	if wechatContacts, err = w.QueryWechatContacts(c); err != nil {
		return
	}

	if changes, err = w.diffChanges(wechatContacts, contactsInDB); err != nil {
		return
	}

	//saveChanges 更新用户信息
	if err = w.saveChanges(changes); err != nil {
		return
	}
	return
}

// QueryWechatContacts query wechat contacts with access token 获取用户信息列表
func (w *Wechat) QueryWechatContacts(c context.Context) (contacts []*model.ContactInfo, err error) {
	var (
		token string
	)
	if token, err = w.AccessToken(c, w.contact); err != nil {
		return
	}

	if contacts, err = w.dao.WechatContacts(c, token); err != nil {
		return
	}

	return
}

//saveChanges 保存企业微信与数据库用户信息的更新内容
func (w *Wechat) saveChanges(changes *Changes) (err error) {
	var (
		contact *model.ContactInfo
	)

	log.Info("saveChanges add(%d), upt(%d), del(%d)", len(changes.Adds), len(changes.Upts), len(changes.Dels))
	for _, contact = range changes.Adds {
		if err = w.dao.CreateContact(contact); err != nil {
			return
		}
		log.Info("saveChanges add: %v", contact)
	}

	for _, contact = range changes.Upts {
		if err = w.dao.UptContact(contact); err != nil {
			return
		}
		log.Info("saveChanges upt: %v", contact)
	}

	for _, contact = range changes.Dels {
		if err = w.dao.DelContact(contact); err != nil {
			return
		}
		log.Info("saveChanges del: %v", contact)
	}

	return
}

//diffChanges 对比企业微信用户列表和数据库用户列表
func (w *Wechat) diffChanges(wechatContacts, contactsInDB []*model.ContactInfo) (changes *Changes, err error) {
	var (
		contact           *model.ContactInfo
		wechatContactsMap = make(map[string]*model.ContactInfo)
		contactsInDBMap   = make(map[string]*model.ContactInfo)
		wechatContactIDs  []string
		dbContactsIDs     []string
		userID            string
	)
	changes = new(Changes)
	for _, contact = range wechatContacts {
		wechatContactsMap[contact.UserID] = contact
		wechatContactIDs = append(wechatContactIDs, contact.UserID)
	}
	for _, contact = range contactsInDB {
		contactsInDBMap[contact.UserID] = contact
		dbContactsIDs = append(dbContactsIDs, contact.UserID)
	}

	// 分析变化
	for _, userID = range wechatContactIDs {
		contact = wechatContactsMap[userID]
		if w.inSlice(dbContactsIDs, userID) { // 企业微信联系人ID,在数据库中能找到
			if !contact.AlmostEqual(contactsInDBMap[userID]) { // 但是域不同
				contact.ID = contactsInDBMap[userID].ID
				changes.Upts = append(changes.Upts, contact)
			}
		} else {
			changes.Adds = append(changes.Adds, contact) // 这个联系人是新增的
		}
	}

	for _, userID = range dbContactsIDs {
		if !w.inSlice(wechatContactIDs, userID) {
			changes.Dels = append(changes.Dels, contactsInDBMap[userID])
		}
	}

	return
}

func (w *Wechat) inSlice(slice []string, target string) bool {
	for _, v := range slice {
		if v == target {
			return true
		}
	}
	return false
}

// UpdateVisible update the visible property 更新用户saga信息
func (w *Wechat) UpdateVisible(c context.Context) (err error) {
	var (
		user    *model.UserInfo
		users   []*model.UserInfo
		contact *model.ContactInfo
	)
	//获取用户ID列表
	if users, err = w.querySagaVisible(c); err != nil {
		return
	}

	for _, user = range users {
		//定义用户信息--saga是否可使用(是)
		contact = &model.ContactInfo{UserID: user.UserID, VisibleSaga: true}
		if err = w.dao.UptContact(contact); err != nil {
			return
		}
	}
	return
}

//querySagaVisible 获取用户ID列表
func (w *Wechat) querySagaVisible(c context.Context) (users []*model.UserInfo, err error) {
	var (
		token string
	)
	if token, err = w.AccessToken(c, w.saga); err != nil {
		return
	}

	if users, err = w.dao.WechatSagaVisible(c, token, w.saga.AppID); err != nil {
		return
	}
	return
}

redpajama_set_name: RedPajamaGithub


text:
mad men: wee small hours
Oct. 11th, 2009 at 8:58 PM
Season 3, Episode 9: "Wee Small Hours"
Don and Sal both have difficultly giving the clients what they want. Betty hosts a fundraiser.
Don continues to be a good husband. Betty continues to annoy me. What will this week's episode bring?
Come on in and discuss.
mad men,
edgeriffic
Nooooo!!! Not Sal!!
First Joan, now Sal. Here's hoping there's a way at least one if not both of them come back to SC and soon.....
Hey Edgy! I'm glad you've come to keep Gatzy, Mary and I company in here. :-)
Another way in which Don and Peggy are similar: Rejection by a paternalistic figure drives him into someone else's arms, too.
It seemed inevitable that Don and Miss Farrell (according to the credits, she has no first name ;-) would get together. Simultaneously it seemed that, for once, Don was merely enjoying the flirtation.
But for Don to have Conrad Hilton -- one of the few people who knows the Dick Whitman inside Don Draper -- tell him he's a good boy, a good son ("Thank you. I mean it."), and then rebuke him? Well, Don's resistance to temptation is historically poor when things are going well.
Reason No. 467 why this is the Best Show on Television: The way they weave the events of the times into the narrative to reveal character.
Don: You think they can understand it? (MLK's "I Have a Dream" speech.)
Miss Farrell: I think they already know it. It'll be nice for them to hear an adult say it.
Don: Who are you? Are you dumb, or pure? ... running out here in the middle of the night, and I run into you? How did that happen?
Of course, Don last asked the "Who are you?" question in Palm Springs. And that beautiful woman said "I'm Joy." Hedonism. Having what you want when you want it.
Miss Farrell seems to represent the decade that's truly just under way here in Season 3. The Sixties as we know them now. The struggle over the future. Although, at the end of the episode, she also seems to represent having what you want. ;-)
So was Don suggesting that Sal should have let Lee Garner Jr. have what he wanted there in the editing room? His muttered "You people ..." seemed to suggest that, in Don's mind, there's no difference between getting it on with a Baltimore bellboy and keeping one of their biggest clients happy. Maybe I'm reading too much into it, but "you people" is clearly "you homosexuals."
The difference to Sal, of course, is massive. One was anonymous sex far from home, one was an unwanted advance from a client in the office. (At least it looked like it was at Sterling Cooper.)
It's awful that that happened to our Sal. But I'm also sure it's happening somewhere in America right now.
marymary
I'm really glad Betty is cheating too. Her getting cheated on all the time was gross. This is better.
Aw, Sal! "You people" indeed. You people who know how to keep it in your pants at the workplace, apparently. So awful. I wonder whether the cruising is a new thing or if he's reacting strongly to his firing.
Heh-heh. I'm presuming you won't be seeing this in the new GQ. From JJ herself:
"I don't have a lot in common with Betty, but I'm very protective of her. I just feel she's trying really hard to make her life good, and make her marriage work, and it just seems hypocritical that when she slips up, people get mad. Because Don does it all the fucking time."
flippet
Late to the party again, sorry. :-)
I wonder whether the cruising is a new thing or if he's reacting strongly to his firing.
I got the impression it was fairly new, and he was reacting to the firing. Like, if this is what I get for resisting, to hell with resisting any more, let's just dive all the way in.
Sounds about right, Flip. He turned down the guy at the fancy restaurant in Season 1, then rejected Lee Garner's advances because, presumably, he didn't want sex on those terms. Having been fired despite having done nothing wrong, it's easy to imagine him thinking "To hell with it, I'm getting laid."
kirjava
It occurs to me that even if Sal had gone given the client what he wanted, the exact same sequence of events may have taken place afterwards.
Finally had a chance to watch last night.
Our streak of Don being a good husband comes to an end. You just knew it would be crazypants (the teacher).
I thought it might be in reaction to getting fired. Otherwise, I would have expected a different reaction to the hotel employee.
I agree. I have a feeling that had he gave in, the client would have somehow used it against him.
I tend to disagree, Kirja and Gatzy. Garner is obviously somebody who's used to using his position of power to get what he wants. If Sal had given in -- and of course he shouldn't have, since he wasn't interested in -- he would have been conceding Garner's dominant role in the situation. (I'm guessing Garner isn't a bottom.)
Garner did what he did with Harry because Sal had refused to give in. Garner's actions are reprehensible and disgusting, but I don't think he would have made trouble for Sal if Sal had given Garner what he wanted. Again, not that Sal should ever have been put in that situation.
For the record, I've consistently said that Don should be faithful to Betty. I'm just no longer surprised when he's unfaithful, because it's a recurring character flaw.
I tend to disagree, Kirja and Gatzy.
Well, we were discussing this at work and a couple of us thought that no matter what Sal did, he was going to lose. If he did give in, there was no guarantee that Garner wouldn't use it against him in the future. Garner could have got upset and told one of them that Sal came on to him. (That way he doesn't out himself.)Garner doesn't know that Don knows Sal is gay. If Garner were even to suggest it, Sal might have been fired. Garner is a wild card.
there was no guarantee that Garner wouldn't use it against him in the future.
That's certainly true. Garner has considerable power, and Sal is a closeted gay man in 1963.
edgeriffic : (no subject) [+1]
marymary : (no subject) [+3]
kirjava : (no subject) [+0]


According to a comment by the State Department on Monday, Dec.10, 2012, Secretary of State Hillary Clinton had to postpone a trip overseas this week due to a stomach virus. Although Senator Clinton been recently pegged by former Republican candidate Newt Gingrich as impossible to beat, it appears that even the resilient Hillary Clinton can be disassembled by a stomach virus.
As a tourist, I'm satisfied once i visit Abu Dhabi. The reason behind this is generally the Abu Dhabi Police is serving 24×7 and it's active every day. As a tourist, it is the responsibility eliminated you provide with your peace of mind and inner satisfaction as a tourist. The life-style hence is often a much friendlier one than any other place that you will be going to go to. It is almost crime free.
The rainmakers are usually the top sellers or those that produce 80% of the net income whilst only numbering 20-25% of the whole workforce. They live this can work, and can leave when feel are unappreciated or if the company (you) apparently value the achievers on them.
If are generally calling along with the US, you will need to dial 011 prior to 971 and so the city code together with the associated with your situation. Dubai phone numbers are about the identical 7 digit system as america.
Prices do vary a great and reduce things that should be understood. If you use this choice call http://www.thenational.ae, it is unquestionably important may talk to the landline or mobile phone operator and that you ask precisely how much you is going to pay.
8) The Dubai World Cup. A newer race than others on the list, the Dubai World Cup comes about in Dubai, United Arab Emirates every single year. Since 1996, this race recently been building a loyal following. Like the Kentucky Derby and Royal Ascot, the Dubai World Cup is significantly about fashion as is actually usually horseracing.
The Jews were prophesied to return in unbelief, no fruits and vegetables. The nation is putting forth leaves. The budding began after Ww 1. The designation Palestine was historical past of the the Romans used once they deported the Jews. It was made by named when Philistines – who earlier inhabited the sea coast.
Answer: The arabics want fine quality items which they couldn't normally get associated with arabic human race. Others are searching oriental items which some are old.


Balance payment, equipment checking and assistance for renting equipment.
Obtaining of entrance permits, private transportation to Penitentes, lodging, and preparing of loads for the mules.
All departure dates are 100% guaranteed.
– A program with a low level of difficulty and risk.
– To know the Aconcagua Base Camp and be at the foot of the highest point of the Western Hemisphere.
– The ability to view your performance up to 5000 meters, this being a great stepping stone for climbing the highest mountains (6000/7000 m) of the Andes.
– To stay in touch with people all over the world, like you, are looking for a challenge within full communion with the mountain.
Once you have arrived at Plaza de Mulas, you will spend nights in the campsite. It´s fully prepared to make the trip around the magnificent South American mountain as comfortable as possible. There are tents for eating, kitchen, equipment storage. Toilets are available too. An excellent team of people will attend you, preparing delicious meals and providing you an excellent service. The advantages of the campsite are not only its commodities, but also the direct contact with nature.
Technical difficulty: this activity does not present any technical difficulty; this means that the participants don´t require a previous climbing experience on rocks or ice.
Physical difficulty: in order to avoid any kind of inconveniences in the program, we suggest you follow a program of training that is adapted to the activity that you are going to make.
Other types of difficulties: a situation that you can face on your expedition are the effects of the altitude on your body. Another difficulty are the low temperatures on the mountain, the effects of which are reduced with a high-quality clothing and equipment.
A private transfer will pick you up from your hotel and take you to Puente Del Inca. We will drive over 180 kilometers, which separate Mendoza City from Puente Del Inca. The scenery on the journey is one of the most spectacular landscapes in the central Andes. The return to Mendoza city may be in a line bus depending on the final number of people in the group.
During the Inca Empire this spot was a strategic point for the crossing of the Andes mountain. Over the last years it has become the point of departure of every expedition, whose aim is to get the summit of Mount Aconcagua. The Hotel was built here, it is located in this strategic zone, five kilometers far from the Mount Aconcagua Park trailhead. You will spend one night in this beautiful place at the beginning of your expedition in shared rooms with a private toilet. Complete breakfasts and dinners in the restaurant of the hotel are also included. Our private transfer will take you to the Aconcagua Park entrance.
These strong animals were the ones that helped the armies that fought for the freedom of South America, to transport their belongings over the mountains. Mules move over mountain with great caution, having the possibility to carry big loads. The negative aspect of these animals is their untamed character. That is why we have selected a professional team of muleteers, called "arrieros", who have dedicated their lives to the country animals. They know how to deal with these animals, because of their experience. From Puente Del Inca to Confluencia, from this camp to Plaza de Mulas, and in the return your belongings will be carried by mules. Each mule can carry up to a limit of 60 kg, and every client may transport on the mules a maximum of 30 kg on each stage of the approach. We strongly recommend you to bring a strong duffel bag.
While you are gaining height, your body needs some time to start with the process of acclimatization. Therefore, it is extremely important to stop for two nights at an intermediate level, to help your body to start with this process. During that time, you will camp in the Confluencia campsite, which has the enough comfort to spend a good deal of time, being fully equipped.
mountain guide per every four climbers. The guide's equipments include a VHF radio, first aid kit with specific medications for altitude sicknesses, ropes, altimeter, digital oxymeter and proffessional clothing and equipments. Medicines will be provided after the aproval of the doctors of Park Aconcagua. All of this is necessary for your safety and well being.
You will make a short trek at the area to know the Plaza de Mulas base camp, the Hotel Refugio Plaza Mulas, Park Rangers and the glaciers around.
We will extend you a certificate signed by the Guide of the expedition certifying that you have participated in the Plaza de Mulas base camp expedition (or reached the Mt. Bonete´s summit if that happened).
In case you have to cancel or postpone your trek for any reason, our policy is to protect your money.
If you book with us, you may have a Flexible Booking, that in case you are not able to join your trek for any reason, allows you to cancel the services you have booked, even if you cancel the previous day of your arrival (writen confirmation by email is required for all cancellations). Only in case you cancel your services under these conditions, you will have an Available Credit (penalty fee apply, depending on the anticipation of your writen cancellation, from 30 days to 1 day prior to the 1st day of your program). Your Available Credit may be used for different services offered by Acomara in the following 2 seasons (100% transferable free of charge, it may be used by you or by any other person you want to transfer your credit to) or you may also request a REFUND (only 50% of your available credit, refunds will be made in the next 15 days after written request and they will exclusively be paid to the client's paypal account, Acomara will pay paypal fees of all Refunds). At the moment of usage of credit, the current prices of the season when the new reservation is made will be taken as valid. In case you do not reach Plaza de Mulas for any reason (tiredness, bad weather, etc), you may have 25% OFF to try again in the following season (discounts will be applied from regular prices, subject to availability). Additional services may have special booking conditions.


text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using XData.Data.Helpers;
using XData.Data.Modification;
using XData.Data.Objects;
using XData.Data.Schema;

namespace XData.Data.Xml
{
    internal class _XmlModifier : Modifier<XElement>
    {
        protected const string DATE_FORMAT = TypeHelper.DEFAULT_DATE_FORMAT;
        protected const string XSI = TypeHelper.XSI;
        protected static readonly XNamespace XSINamespace = TypeHelper.XSINamespace;

        public _XmlModifier(Database<XElement> database, XElement schema) : base(database, schema)
        {
        }

        public override void AppendCreate(XElement aggreg, string entity, XElement schema)
        {
            ExecuteAggregations.Add(new XmlCreateAggregation(aggreg, entity, schema));
        }

        public override void AppendDelete(XElement aggreg, string entity, XElement schema)
        {
            ExecuteAggregations.Add(new XmlDeleteAggregation(aggreg, entity, schema));
        }

        public override void AppendUpdate(XElement aggreg, string entity, XElement schema)
        {
            ExecuteAggregations.Add(new XmlUpdateAggregation(aggreg, entity, schema));
        }

        public override void AppendUpdate(XElement aggreg, XElement original, string entity, XElement schema)
        {
            ExecuteAggregations.Add(new XmlUpdateAggregation(aggreg, original, entity, schema));
        }

        internal protected override bool IsCollection(XElement element)
        {
            return element.Elements().All(x => x.HasElements);
        }

        internal protected override XElement CreateObject(Dictionary<string, object> propertyValues, string entity)
        {
            XElement element = new XElement(entity);
            element.SetAttributeValue(XNamespace.Xmlns + "i", XSI);

            foreach (KeyValuePair<string, object> pair in propertyValues)
            {
                XElement xProperty = new XElement(pair.Key);

                if (pair.Value == null)
                {
                    xProperty.Value = string.Empty;
                    xProperty.SetAttributeValue(XSINamespace + "nil", "true");
                }
                else
                {
                    Type type = pair.Value.GetType();
                    if (type == typeof(DateTime))
                    {
                        xProperty.Value = ((bool)pair.Value) ? "true" : "false";
                    }
                    else if (type == typeof(DateTime))
                    {
                        xProperty.Value = ((DateTime)pair.Value).ToString(DATE_FORMAT);
                    }
                    else
                    {
                        xProperty.Value = pair.Value.ToString();
                    }
                }

                element.Add(xProperty);
            }

            return element;
        }

        internal protected override Dictionary<string, object> GetPropertyValues(XElement obj, XElement entitySchema)
        {
            return new ExecuteAggregationHelper().GetPropertyValues(obj, entitySchema);
        }

        internal protected override void SetObjectValue(XElement obj, string property, object value)
        {
            if (value == null)
            {
                obj.SetElementValue(property, string.Empty);
                obj.Element(property).SetAttributeValue(XSINamespace + "nil", "true");
                return;
            }

            obj.SetElementValue(property, value.ToString());
        }

        protected override IEnumerable<XElement> Filter(IEnumerable<XElement> elements, XElement key, XElement keySchema)
        {
            IEnumerable<XElement> xElements = elements;
            foreach (XElement propertySchema in keySchema.Elements())
            {
                string property = propertySchema.Attribute(SchemaVocab.Name).Value;
                string value = key.Element(property).Value;
                xElements = xElements.Where(p => p.Element(property).Value == value);
            }
            return xElements;
        }

        #region override
        protected override void Create(XElement obj, string entity, XElement schema)
        {
            XElement xSchema = schema ?? Schema;

            if (IsCollection(obj))
            {
                foreach (XElement child in obj.Elements())
                {
                    AppendCreate(child, entity, xSchema);
                }
            }
            else
            {
                AppendCreate(obj, entity, xSchema);
            }

            Validate();
            Persist();
        }

        public override void Delete(XElement obj, string entity, XElement schema = null)
        {
            XElement xSchema = schema ?? Schema;

            if (IsCollection(obj))
            {
                foreach (XElement child in obj.Elements())
                {
                    AppendDelete(child, entity, xSchema);
                }
            }
            else
            {
                AppendDelete(obj, entity, xSchema);
            }

            Validate();
            Persist();
            Clear();
        }

        public override void Update(XElement obj, string entity, XElement schema = null)
        {
            XElement xSchema = schema ?? Schema;

            if (IsCollection(obj))
            {
                foreach (XElement child in obj.Elements())
                {
                    AppendUpdate(child, entity, xSchema);
                }
            }
            else
            {
                AppendUpdate(obj, entity, xSchema);
            }

            Validate();
            Persist();
            Clear();
        }

        public override void Update(XElement obj, XElement original, string entity, XElement schema = null)
        {
            XElement xSchema = schema ?? Schema;
            XElement keySchema = schema.GetKeySchema(entity);

            IEnumerable<KeyValuePair<XElement, XElement>> pairs;
            if (IsCollection(obj))
            {
                if (!IsCollection(original)) throw new ArgumentException(ErrorMessages.OriginalNotMatch, "original");

                pairs = Match(obj.Elements(), original.Elements(), keySchema);
            }
            else
            {
                if (IsCollection(original)) throw new ArgumentException(ErrorMessages.OriginalNotMatch, "original");

                pairs = Match(new List<XElement>() { obj }, new List<XElement>() { original }, keySchema);
            }

            foreach (KeyValuePair<XElement, XElement> pair in pairs)
            {
                AppendUpdate(pair.Key, pair.Value, entity, xSchema);
            }

            Validate();
            Persist();
            Clear();
        }
        #endregion
    }

    public static class XmlModifierFactory
    {
        public static Modifier<XElement> Create(string name, XElement schema = null)
        {
            Database<XElement> database = new _XmlDatabase(new DatabaseManufacturer().Create(name));
            XElement xSchema = schema ?? new PrimarySchemaProvider().GetSchema(name);
            return new _XmlModifier(database, xSchema);
        }
    }
}


Playtime is going wild with finding out! Fake to be a farmer with the Farm and Be told Animal Wagon by VTech. Press the lovable toy goat's light-up button to listen to three sing-along songs and Be told the letter G and her animal name. Connect Gabby and the baby goat in combination to look at the child apply the goat. Then, hear nurturing responses when Gabby and her baby touch noses! Gabby also responds to SmartPoint locations with other phrases and more on Go! Go! Sensible Animals and Go! Go! Sensible Wheels playsets (each and every sold one at a time). Load the goat and her kid into the animal wagon, connect it to the tractor and drive them across the farm. Build motor abilities by rolling the toy tractor's windshield to switch the motive force, push the horn button and open the window. Spread the wagon to create a slide with launcher for Gabby and her kid to play on for much more amusing! Bale of hay included for role-play amusing. Works with Go! Go! Sensible Animals and Go! Go! Sensible Wheels playsets (each and every sold one at a time). Features durable design and automated shut-off. The Go! Go! Sensible Animals Goat requires batteries, the tractor and wagon don't. Requires 2 AAA batteries (batteries included for demo functions most effective; new batteries beneficial for normal use). Assembly required. Intended for a while 1 to 5 years.


text:
Our Local Team
Our International Team
Recognition & Accolades
Our Social Welfare
Cruise Ship Handling
Memorable Experience
Mauritius Differently
Groups & Incentives
Coquille Bonheur Luxury
Tours Booking
Rodrigues Island
Abolition of Slavery in Mauritius
History - Early Explorations
The history of Mauritius begins around 900 AD, when Arab sailors, engaged in trade with people from the East African coast, the Comoros, and Madagascar, first laid eyes on what they called Dina Arobi (Abandoned Island). Since the Arabs were first and foremost traders and a journey as far into the Indian Ocean as the Mascarene Islands was a rather dangerous venture in their small dhows, there was no incentive to establish a settlement on the island.
At the end of the fifteenth century Europe started to cast its eyes to the East. Attracted by its treasures, of which spices were most important, the Portuguese were the first Europeans to sail around the Cape of Good Hope and explore the Indian Ocean. Vasco da Gama was the first to do so, and on his famous voyage in 1498 he was the first European to learn about the existence of the Mascarene Islands by way of a map shown to him by his Indian pilot. Mauritius was indicated by its Arab name the very first time it appeared on a European map in 1502, two years after the Portuguese navigator Diogo Dias became the first European to discover the island. The Portuguese did not settle on Mauritius, for the island did not possess any of the riches they were after. They did, however, stop occasionally on the island to obtain food and water before continuing their journeys to the East. They gave the island several names, of which Ilha do Cerne (Swan Island) was preferred in the end. Up to 1598 the Portuguese (as well as pirates from various regions) were the only ones to visit the island, and therefore it was regarded by many as a Portuguese possession.
Abolition of Slavery
In the 18th and early 19th centuries, hundreds of slaves used Le Morne Brabant (a hill/mountain with a summit of 556 meters above sea level located on the south-west corner of Island) as a place to hide in fear because of their holders. After the abolition of slavery in Mauritius, an expedition made its way to the mountain on 1st February 1835 to tell the slaves that they are free now. Unfortunately, the slaves misunderstood the announcement and jumped off the mountain to their deaths, so that they would not be enslaved again. Since then, this day is celebrated as Annual Commemoration of the Abolition of Slavery by Mauritians. Le Morne Brabant has been a site inscribed on the UNESCO World Heritage list since 2008.
Le Morne World Heritage Site
Inaccessible since its inscription on the UNESCO World Heritage List in 2008, the Le Morne Mountain, symbol of Maroons and resistance to slavery, opened its footpaths to the public in July 2016. Le Morne Cultural Landscape is a rugged mountain that juts into the Indian Ocean in the southwest of Mauritius. It was used as a shelter by runaway slaves, maroons, through the 18th and early 19th centuries. Protected by the mountain's isolated, wooded and almost inaccessible cliffs, the escaped slaves formed small settlements in caves and on the summit of Le Morne. The oral traditions associated with the maroons, have made Le Morne a symbol of the slaves' fight for freedom, their suffering, and their sacrifice, all of which have relevance to the countries from which the slaves came - the African mainland, Madagascar, India, and South-east Asia. Indeed, Mauritius, an important stopover in the eastern slave trade, also came to be known as the "Maroon republic" because of the large number of escaped slaves who lived on Le Morne Mountain.
Our other website : Coquille Bonheur Luxury & Tours Booking
Coquille Bonheur Ltd © 2019 - All Rights Reserved Developed by Web Solutions (MU) Ltd


text:
Gentoo Ruby: less is more
Yesterday, after a mostly unrelated bug report, Alex and me noticed that Ruby 1.9.2_rc2 was still bundling a few gems. Bundling, as I have written too many times to link properly, is a bad habit, but an unfortunately common one in the Ruby landscape; luckily the use of more modern methods, such as bundler, can make it more manageable (bundler will reuse the installed copies, and is designed not to let the gems be versioned with the rest of the code in the same repository; but this is getting off topic so let's stop here).
The problem with the Ruby interpreter bundling code is mostly tied to two problems: with a few exceptions, the bundled libraries are still developed standalone, causing some extension to require a standalone copy of the libraries (because they added functions or fixed bugs); when that happens, we also risk that the code does not mix too well. Funnily enough, Ruby 1.9 stopped bundling Test::Unit, and now that it's developed standalone, it's causing enough headaches (not all software works fine with Test::Unit 2; we've had to resuscitate version 1.2.3 for Ruby 1.9 only, and we block version 2 from those packages who fail to build when it's installed).
Doing this unbundling also caused two changes to the handling of virtuals: removing RDoc (version 2.5.8) from Ruby 1.9.2_rc2 means that Ruby 1.9 is no longer providing rdoc (but 1.8, EE and JRuby do), so we need a new virtual/ruby-rdoc; removing minitest instead means the only provider of that interface is dev-ruby/minitest, and thus we no longer need the standalone virtual. This simplifies a lot because there are a number of packages that really need the 1.7.0 version of minitest, while Ruby 1.9 still bundles 1.6.0.
But looking at it, also shown that there are two further packages that were bundled before (and are no longer, thankfully): racc and json. The latter is quite unexpected to me, given that a lot of gems needed it separated anyway, and it's not registered as a gem at all.
And finally, while I was at it, I also removed the remaining code of RubyGems from the interpreter-installed libraries (given that way too many packages needed a full-blown copy of rubygems with Rake tasks and all the shizzle).
The end of the story is that now we got a slimmer, smaller Ruby 1.9 install, and the declaration of dependencies should be all correctly set. Having unbundled RDoc also means that we might have less work to do to make API doc generation to work on Ruby 1.9.
Tags: GentooMRIRubyRubyGemsRubyNG


text:
Ending months of discussions, Mahindra Group on Monday agreed to buy Italian car designer Pininfarina SpA in a transaction that will help India's largest maker of sport utility vehicles boost its design and styling capabilities.
Mahindra and Mahindra Ltd and affiliate Tech Mahindra Ltd, through a special purpose vehicle (SPV), have agreed to buy a 76.06% stake in Italian car designer Pininfarina SpA, for €25.3 million (around Rs.186.7 crore), the group said in a release.
The SPV would also make an open offer to public shareholders of Pininfarina for the balance 23.94% stake, Mahindra and Tech Mahindra said in a joint statement. In addition, the SPV will infuse €20 million into Pininfarina by way of a rights issue.
As part of the composite deal, Mahindra and Tech Mahindra shall also provide a corporate guarantee not exceeding €114.5 million to the lenders, creditors and lessor of Pininfarina.
The cost of the acquisition would be at a price of €1.1 per share, which would be funded by Mahindra and Tech Mahindra in the ratio of 40% and 60%, respectively..
The debt-laden Pininfarina has designed cars for Ferrari, Maserati, Rolls-Royce and Cadillac. The Cambiano-based firm has been unprofitable for 10 of the past 11 years and has been battling high levels of debt.
On 12 November, Pininfarina had said that its parent had presented a draft business and financial plan, drawn up jointly with Mahindra, to the lending institutions. It added that the new plan would ensure the financial stability and recapitalization of the parent and the group for the foreseeable future.
"Net financial debt at the end of 2015 is expected to worsen compared to 31 December 2014, due principally to net working capital trends and the accumulated unrealised losses resulting from the measurement of financial liabilities at amortized cost," the ailing Italian firm had said.
The transaction, which is subject to several regulatory approvals, is expected to close within the first quarter of 2016.
"Mahindra and Tech Mahindra have also signed definitive agreement with the lenders, creditors and lessors of Pininfarina to restructure the existing debt of Pininfarina," Mahindra said in a statement.
Pininfarina will continue to remain an independent company, listed on the Milan Stock Exchange, with Paolo Pininfarina continuing as the chairman of its board.
Pininfarina's legendary brand status will allow Tech Mahindra access to relationships the iconic designer has nurtured with the best in the world over its 85-year history, including with Ferrari, Alfa Romeo, Maserati and Peugeot. "This (acquisition) will mean an opportunity for Tech Mahindra to influence product conceptualisation and design and styling through Europe's best-in-class design house," the joint statement said.
Tech Mahindra will gain a critical foothold in key, early-stage conversations in the automotive sector and other verticals along with the benefit from the designer's focused presence in Italy and Germany.
For Pininfarina, the acquisition will mean an ability to leverage Tech Mahindra's presence across 60 countries and access to about 780 customers.
Mahindra Group chairman Anand Mahindra said "Pininfarina will add enormous value to Tech Mahindra's portfolio of engineering services. But just as important is the fact that the legendary high-end design credentials of Pininfarina will significantly enhance the design capabilities of the entire Mahindra Group. Given the increasing design sensibilities of today's consumers, product design will greatly influence customer choice and experience, and hence our success."
Paolo Pininfarina, chairman of Pininfarina SpA, said "The company is joining hands with a $3.9 billion technology partner (Tech Mahindra) and part of the $16.9 billion Mahindra Group, which will not only strengthen the firm's Italian identity but will open more doors." Analysts are, however, sceptical about the benefits that might accrue to Mahindra group companies.
The acquisition is unlikely to be materially accretive to the prospects of both Tech Mahindra and Mahindra, said a senior analyst with a domestic brokerage, requesting anonymity.
"Mahindra does not have sufficient projects in the pipeline to gainfully employ Pininfarina designers. Mahindra and Tech Mahindra will have to seek external business opportunities," he said citing Mahindra's past design house acquisitions.
Honda Cars India will hike prices of its vehicles across models by up to Rs 16,000 from January to offset impact of rising input costs.
"We will hike prices in the range of Rs 10,000-16,000 from January, depending on the model. The price increase has been necessitated on account of increase in input costs," Honda Cars senior vice-president (Marketing and Sales) Jnaneswar Sen told PTI.
Currently, HCIL sells a range of vehicles starting from the entry-level small car Brio to the CR-V, with price ranging between Rs 4.25 lakh and Rs 25.13 lakh (all prices ex-showroom Delhi). Already, various car makers like Tata Motors, Maruti Suzuki India, General Motors, Hyundai Motor India, Toyota and German luxury car makers Mercedes Benz and BMW have announced a hike in prices of their vehicles across models from January to offset input costs.
Besides, auto makers Nissan, Renault and Skoda have announced plans to hike prices by up to Rs 50,000 from January next year to partially offset the impact of higher input costs. Experts believe that carmakers usually come up with such announcements around this time of the year that help them clear inventories left after heavy festive discounts on vehicles.
The New Honda Jazz with new sporty elements makes the car now look a bit more appealing than the previous model. Indeed there are some design elements borrowed from the City like the narrow headlights and front grille blending into each other as one. But the mesh on the lower bumper did look a bit incomplete and a clear view of the radiator from that could have been hidden easily. The extended belt line all across the side till the tail-lights and the side profile does give it a sporty, low stance on its 15 inch alloys. At the rear, the spoiler is quite prominent and the car has LED tail and stop lamps along with a chrome strip that accentuates the rear styling.
The Jazz has 2 engine options - the 1.2 litre petrol though has been borrowed from the Brio but has a slightly higher power output of 89bhp though is tuned for efficiency. You can opt for either a 5-speed manual gearbox or a CVT with paddle shifters. The 1.5 litre i-DTEC diesel engine puts out exactly the same figures (98bhp, 200 Nm) as the diesel City's because of course it's the same motor and also gets the same 6 speed manual. The car accelerates easily and since peak torque kicks in pretty low, wading through city traffic will be a breeze also because the peak torque kicks in fairly low.
Now there was a legitimate concern from potential buyers about the low ground clearance that Honda cars suffer from especially over poorly built speed-breakers in India. The company has looked to address this with a redesigned exhaust system resulting in marginal improvement in ground clearance which now stands at 165 mm, but still lower than what the Swift and i20 offer at 170 mm. The new Jazz's suspension setup feels akin to the old car's, but there is improved stability and comfort in the ride. There is some amount of body roll that gets in as you take the car around wide corners at high speeds.
The dash is very similar to the City's and the quality of the plastics also feel very similar. Beige and black interiors for the base and mid variants, all-black for the top-end spec is how the Jazz will roll. The new 6.2 inch touchscreen with navigation feels easy to use. The interface on this new panel felt responsive but like a new touch phone, you will take some time getting used to the controls.
The fuel efficiency numbers of the Jazz are impressive with the diesel engine claiming 27.3Km/l, just 0.3Kms behind the newly launched Maruti Celerio diesel, making it one of India's most fuel efficient car. The petrol CVT delivers 19Km/l, while mileage claims on the manual are at 18.7Km/l. Also impressive for a car this size.
The new Jazz will be launched early next month and pricing details will be revealed then. The car builds on the reputation of the earlier model in terms of practicality, space and efficiency but it will boil down to how well Honda plays the pricing card really.
Renault India today introduced a premium edition of its Lodgy MPV Premium Stepway Edition. The MPV will be available in 2 variants, Lodgy RxZ 110PS 8-seater and Lodgy RxZ 110PS 7-seater, with an introductory price of Rs. 11.99 lakh and Rs. 12.29 lakh respectively (ex-showroom, New Delhi).
Exterior changes on the Renault Lodgy Premium Stepway Edition include a 'jewel-studded' front grille, black and chrome satin roof rail, anthracite alloy wheels, Stepway front bumper, chrome satin finished front and rear skid plates, chrome finished scuff plate, front and rear wheel arch cladding, black side moulding with chrome inserts, fog-lamp garnish with chrome satin finish and Stepway decal.
The car's list of equipment includes driver and passenger airbags, ABS, EBD, brake assist, rear parking sensor, rear view camera, MediaNav entertainment and navigation system, cruise control and speed limiter among other provisions.
Renault Lodgy Premium Stepway Edition Specs:
Engine capacity - 1461cc
Power - 108bhp at 4000rpm
Torque - 245Nm at 1750rpm
Kerb weight - 1365kg
Front suspension - Independent McPherson strut with coil spring & anti roll bar
Rear suspension - Torsion beam Axle with coil springs, shock absorber & anti roll bar
Boot volume - 207-litres (3 rows upright)
Fuel tank volume - 50-litres
BMW India have added a new variant to the popular 3 GT line up. The BMW 3 Series Gran Turismo Sport Line is priced at Rs 39.90 lakh ex-Delhi and sits below the Luxury Line which retails at Rs 44.50 lakh. It is also assembled at BMW's Chennai facility.
The new BMW 3 Series GT Sport Line gets gloss black kidney grilles, door sills with the 'BMW Sport' logo in aluminium and matte black side window frames. Even the tail pipes are in black chrome colour.
For the interiors, BMW designers have done up the seats in red contrast stitching while the trim is done in fine wood.
The interior ambient lighting can be varied depending on the requirement from the iDrive system. BMW have also added a red stripe to the 3 GT Sport Line's key, to give it a sporty touch.
Other changes that differentiate it from the top-end Luxury Line include the omission of the panoramic sunroof, leather upholstery and chrome in the cabin. The Sport Line also gets a different alloy wheel pattern.
The brown and silver exterior colour options are not available in this variant.
Audi India has buckled up its seat belts again for giving proper chills to indian customers for one more time as they are now ready to reveal their estate monster the RS6 Avant to the indian customers. It is scheduled to launch on June 4, 2015. It follows the recent launches of the Audi TT facelift and RS7 Sportback
Powering the Audi RS6 is a gasoline 4.0-liter TFSI twin-turbo V8 engine that produces 560PS of power and torque of 700nm. An eight speed tiptronic transmission feeds the output to the system quattro. The car sits on 20 inch wheels by default, with the option of 21-inch size as well.
The Audi RS6 Avant will be brought in as CBUs, and will serve as a halo model in the carmaker India line up. Expect the car to cost north of Rs.1 crore.The RS6 Avant is the high performance version of the A6 Avant; before mean body style property.
Speaking of performance, the RS6 Avant boasts enormous power. The turbocharged 4.0-liter V8 engine is a 552bhp mammoth couple 71.4kgm. Mated to an automatic gearbox eight-speed, power is sent to all four wheels via Audi Quattro AWD system. A 0-100kph sprint is achieved in a claimed 3.9 seconds, while continuing to hit a top speed of 304kph.
When Audi updated the entire A6 line up last year around the Paris Motor Show, the RS6 also received the tweaks and the upgraded equipment. So the RS6 gets the Matrix lights aka adaptive LEDs which will have to certainly make it to the India bound model as well. The RS6 will also preview the new styling that you can expect on the S6 and A6 later this year, which includes single grille piece, the new LED DRLs and the revised theme for the taillights.
The car is scheduled to be launched in India on 4th June 2015 and it will sit over the S6 in the lineup, so expect the pricing to be between Rs.1 crore and 1.25 crore. Stay tuned for more updates. The moved is a brave one in some senses, since India has traditionally not been a station wagon market.
Iconic motorcycle manufacturer Royal Enfield has acquired Harris Performance Products, a UK-based company with over 40 years of experience in perfecting two-wheelers. Set up over 40 years ago by brothers Steve and Lester Harris and Stephen Bayford, Harris Performance is one of the leading experts in designing and manufacturing of specialised high- performance motorcycle chassis and components. Under the terms of the deal, Royal Enfield will acquire all assets, employees, trade names, technical know-how and intellectual property of Harris Performance Products Ltd.
Steve Harris, director Harris Performance, with Siddhartha Lal, CEO, Royal Enfield.
Harris Performance has had a longstanding relationship with Royal Enfield and was responsible for the chassis development of the brand's Continental GT café racer model. Harris Performance is also the only manufacturer from the UK to have been officially commissioned by Yamaha and Suzuki to design, develop and manufacture race bikes for Grand Prix and World Superbike races.
Siddhartha Lal, CEO, Royal Enfield, said: "Royal Enfield is working on its new generation of products and platforms; to have the Harris Performance team dedicatedly working with us will clearly enhance our engineering and product design capabilities. Their proven expertise, deep insight and understanding of motorcycling and Royal Enfield will be invaluable for us in our journey towards achieving leadership in the global mid-sized motorcycling segment. All of the current staff at Harris Performance will now become employees of Royal Enfield, taking responsibility of performance and development engineering for our new range of motorcycles. They will be part of Royal Enfield's upcoming UK Tech Centre," he added.
Mark Wells from Xenophya, Siva from Royal Enfield and Steve Harris from Harris Performance
Steve Harris, founder, Harris Performance, said, "Having worked with Eicher Motors Ltd's motorcycle brand Royal Enfield for a number of years as a technical partner, we have experienced first-hand their capability, commitment, and ambition for their motorcycles and accessories. We are proud to be integrated into the Eicher family, and the founders and staff of Harris Performance look forward contributing to Royal Enfield's continued success."
Looking for ways to become more environmentally friendly with your car? Motorists can help protect the environment by following some simple steps given below :-
Drive a green car
There are now hybrids to match almost any need: two-door, four-door, SUV, luxury sedan. They get better mileage than their conventional counterparts, have cleaner emissions, and save money on gas. If a hybrid isn't in your future, try for a car with the best MPG you can find; and remember that hybrids aren't always the most efficient option, either. Also, affordable, practical electric cars and plug-in hybrids are practical for many. If that doesn't work for you, then get the most efficient regular gas car that meets your needs. But whether or not you drive a hybrid or alternative-fuel vehicle, there's lots you can do to make your car cleaner right now.
Use green driving best practices
Driving technique has a lot to do with your fuel economy. Avoid sudden starts and stops and go the speed limit Not only does speeding and herky-jerky driving kill your MPG, it's dangerous. And even if no one gets hurt in a fender bender, how green is it to get a new bumper or have your car re-painted? Also, drive wise and minimize unnecessary miles by doing errands in one trip, getting good directions, and calling ahead. A lot of these techniques are known as "hypermilling" and help you maximise your fuel efficiency.
Getting regular tune-ups, maintenance, and having clean air filters will help you burn less gas, pollute less, and prevent car trouble down the line. Pump up: if every American's tires were properly inflated we could save around 2 billion gallons of gas each year! (Check your manual for optimal pressure). Lastly, get the junk out of the trunk! All that extra weight is sapping your fuel economy.
Offset your car's carbon
There are many services out there now that can help you calculate your yearly emissions from driving and offset those greenhouse gasses through various means.
Look into car sharing and car pooling
Of course. Find coworkers, neighbors, and fellow students headed the same direction. Start with one shared trip per week. Also look into car sharing programs like BlaBla Car .and other car pooling services.
Leave the car at home
For shorter adventures,walk, take public transit, ride your bike (regular, electric-assisted) or skateboard, rollerblades, or even look into an electric scooter. Carrying groceries or other bulky stuff can still be done on a bike with a backpack or some slick modifications.
Drive part of the way
If getting where you're going by bike or public transit alone isn't going to happen, consider driving part of the way and then jumping on public transit or your bike (a folding bike would be perfect). A great way to beat traffic!
Take it easy on the AC
Use the windows to help keep the car cool. Or try an electric or Solar Fan. Parking in the shade and using a reflective windshield shade can keep your car cooler when parked, meaning it takes less to cool it off when you get back in. If you car is new, however, let it air out. That new car smell is not friendly stuff.
Drive less with the wonders of working from home (or internet café, treehouse, Mojave desert, etc.) With instant messaging, video chat, teleconferencing, and other world-flattening technologies, making the rush-hour trek to work and back might not be that necessary. Ask your boss or offer your employees a teleconferencing day once a week.
Aspire to living car-free
Not everyone is going to be able to do it . It will probably entail a shift in thinking and some time, but living carfree might be more within reach than you think. Living closer to work and school is a big part of it. Walking, biking, public transport, car sharing, car borrowing, and teleconferencing are an arsenal of tools to help reduce the need for a car. Give it some thought.
Yamaha Motor India Sales Pvt. Ltd has launched the new YZF-R1M along with new colour variants of the YZF-R1. The YZF-R1M has been priced at Rs 29.43 lakh (ex-showroom Delhi) while the YZF-R1 has been priced at Rs 22.34 lakh (ex-showroom Delhi).
The YZF-R1M is available in a shade named Bluish White Metallic 2 and the YZF-R1 is available in two new colours - Deep purplish blue metallic C and Vivid Red Cocktail 1. The new bikes are based on Yamaha's "High Tech Armed Pure Sport" concept of an all-out supersport model fully armed with advanced technology.
The R1's connecting rods are titanium, and their big ends are fracture-split, which assures a perfect circle. The cylinder head, with reshaped ports and larger valves (33mm intakes, 26.5mm exhausts), has 13.0:1 compression, and its narrower valve angle allows for a more compact pent-roof combustion chamber. Lightweight forged aluminum pistons are also part of the R1 recipe. The 2015 R1 is the first Yamaha supersport model with ABS and Unified Braking.
The R1M, a limited-edition R1 for riders or professional teams who plan to go racing, essentially a homologation special in the spirit of the YZF-R7 of 1999. To that end, this special R1M has Electronic Racing Suspension (ERS) from Öhlins, carbon-fiber bodywork, a Communication Control Unit (a data logger) and stickier Bridgestones .One of Yamaha's main design thrusts was to increase air intake volume while reducing power losses.
This new engine achieves maximum power of 200PS, an increase of approximately 18PS over the current R1 model. Yamaha Motor's engineers implemented weight reduction technology throughout the new model to lighten it by approximately 4kg. In addition, the engine width is reduced by 34mm.The high-end YZF-R1M also boasts an electronically controlled Ohlins suspension, lightweight carbon fairing and a digital interface that records valuable racing information.
The new bikes are the world's first two commercial motorcycles with a 6-axis position sensor that detects 3-axis angular velocity and 3-axis acceleration. The ECU is programmed with five different types of control systems.
The full screen of the TFT LCD digital meter created a "bar display tachometer", accelerometer and brake pressure displays etc. that give a similar visual impression to analog meters. The rider can select from two different display modes: "Street", which is tailored to travel on public roads, and "Track" which prioritizes the information displays required for race and circuit riding.
Based on the "Speed Racer" concept, the new models have a light, slim, and compact look. The new fairing shape features the cross-layered wing – an aerodynamic characteristic which allows airflow to cross between the inside and outside of the fairing. The front face of the new models inherits the twin-headlight configuration found in the R-series of the past, yet it bears a strong resemblance to YZR-M1.
The new YZF-R1M and YZF-R1 will compete against the recently launched Kawasaki Ninja H2 and Ducati 1299 Panigale in India.
Tata Motors has finally revealed the new Nano Genx with AMT unit at its official Facebook page. The company also stated that the advance bookings for the same would open shortly across all its dealerships, hinting that the launch is quite near. New Tata Nano Genx comes with several cosmetic changes at the outside, alongside the updated boot space, transmission and tail gate.
The new Nano Genx flaunts a restyled front bumper with a broad honeycomb "infinity grille" and round fog lamps. There are smoked headlamps in place of the conventional headlamps seen on the current crop of Nanos. In addition, the thin chrome strip on the bonnet has gone for a toss in favour of a more attractive and contemporary thick black unit with an integrated Tata logo. New Tata Nano Genx rides on steel wheels with full wheel caps. Coming to the rear end of the Nano Genx, it now features a openable tail gate with 110 litres of boot space. Also, there is a new windscreen with a redesigned bumper and honeycomb grille. The fuel tank is also bigger now with capacity of 24-litres.
Inside the cabin, the new Tata Nano Genx boasts a new steering wheel, while the rest of the interior is carried over from the ongoing models of the small car. It remains unchanged mechanically, except for the inclusion of an AMT unit. The company has claimed that the AMT gearbox in accordance with the electric power assisted steering (EPAS) would make it easier to drive in thick traffic and narrow roads, especially for women drivers. (There are chances that the Nano AMT might be powered by the new 1.0-litre, three-cylinder petrol engine, but it seems more realistic that the 624cc engine two-cylinder engine found in the current model is expected to continue duty.)
The GenX Nano will be available in seven body colours - Damson purple, Sangriya Red, Royal Gold, Dazzle Blue, Pearl White, Meteor Silver, Persian Rose.
Expected Launch: September 2015
Expected Price: 3 - 3.25 lakhs
Mahindra gains control of Pininfarina
Honda Cars to hike prices by up to Rs 16,000-17,00...
The BMW 3 Series Gran Turismo Sport Line launched ...
Audi to launch 2015 RS6 Avant on June 4, 2015 in I...
Royal Enfield hires motorcycle chassis specialist ...
Yamaha's launches two new bikes -YZF-R1M and YZF-R...


How do plants compete for sunlight?
Can we track how pollen moves from flower to flower?
Can plant roots actually "hear" the sound of water flowing in a pipe?
Graphical abstract for "Growth is required for perception of water availability to pattern root branches in plants"


I'm not really into celebrities, and sometimes I find myself quite disgusted at the worshipping of them. Especially when it's about royalty or figures like Kim Kardashian or Paris Hilton. Not that I want to necessarily call these people amoral, and I'm not one to judge people I know only from the media and not personally (see my article on Slow Opinion), but the worship seems so senseless. It seems to be a case, maybe, of "zeros as heroes".
When, however, celebrities are being criticized when they are doing good things, as is the case in our movement when Ricky Gervais goes after hunters or when Beyonce advertises vegan eating or a vegan food business. The core of the allegations seems to be that these two people (and many others) are inconsistent in their behavior (hypocrital) because they are not vegan. Beyonce, on top of that, still wears fur and has been called many unkind names for it.
I think accusing these people of hypocrisy for not being vegan is regrettable and unstrategic, and I think celebrities might do a lot of good also without being vegan, but I've written about that elsewhere (on Gervais and on Beyonce and also Being vegan doesn't trump everything). Here I would just like to stop a brief moment to wonder if there's anything more going on. That's because I think inconsistency or even hypocrisy in and of itself doesn't seem to warrant this much hate (if you think the word hate is an overstatement, just go visit some vegan/animal rights Facebook groups).
Apart from hate, what I seem to come across again and again is talk like "we don't need celebrities" ("f*ck them"). DXE activist Wayne Hsiung, for instance, wrote an article on how celebrities are not as important as we think they are: Celebrity Vegans: what does the science say?
I'm not a doctor in psychology or something, but there does seem to be more going on here than a mere aversion to inconsistency or celebrities being useless to our cause (which I find extremely doubtful).
Clearly, many people don't like celebrities in general, and Google turns up quite a lot of stuff when you enter the words celebrity and hate together. Again, sometimes the apparently disgusting behavior of celebrities makes it very easy to hate them: they can be overly concerned about their appearance, they may be greedy and extremely needy of attention, etcetera.
But this is nothing that "normal" humans don't do. Probably many people, in case they would suddenly be propelled to celebrity status, might exhibit the same kinds of behavior. Still, we love to hate celebrities for their all too human flaws. Maybe we're jealous? Maybe saying celebrities are evil or ridiculous is a way to deal with our frustration of not having what they have? Or maybe we, as activists, get jealous because while we have been working so hard to get attention for the cause, famous people only have to sneeze to create massive media coverage. It's a bit irrational, as we should be happy with every attention our cause gets, but I guess it's all too human too.
Or maybe what's behind celebrity hatred (or irritation) is not jealousy but a desire for fairness. Maybe we just don't like it that there are people out there earning so much more money than the average citizen, getting so much more attention, having, maybe, so much more power… Maybe we dislike celebrities because we want to live in a world where all people are equal, and celebrities are very much an illustration of how that is not the case.
I don't know if there's any truth in my guesses, but I think that when we judge or critize celebritities, it's good to be aware of our motivations. Knowing which role celebrities actually play in social change is definitely important, but we need to be careful not to get carried away by anti-celebrity bias when trying to establish that role.
While I can understand celebrity hate, I believe it's good to remember that they are people too, with their frailties, sensibilities, desires and emotions. More importantly, I think that the moment when these famous people are actually something good (be it inconsistently) is, in my humble opinion, not the best time to express celebrity hate.
Next > Is Ben and Jerry's vegan icecream "veganwashing"?
Very thoughtful blog. Regarding your post "On celebrity hate," I think it was correct of you to bring in psychology, and you were on the right track to think that people are jealous of them for the reasons you mentioned above (and others).
I think you overlooked one component of that jealousy. While I'm not saying this applies to everyone, I know it applies to some people (such as myself, thougt I don't hate celebrities).
I think why many activists may get angry when celebrities do something good (in this case in reference to animal rights) is because the celebrities get the attention/importance of the cause. Many activists try to convince others to be vegan and have been working on spreading veganism/animal rights for years, for instance, but they don't get much attention or success (of course they could be doing a bad job). However, all Beyoncé has to do is say she's vegan and she gets so much attention (positive and negative) and importance, and people ask her about veganism and she gets credited with spreading it. Why should she get the importance when activists have been espousing veganism so much and for so long? Moreover, for said activists, who dedicate their own time/energy to veganism/animal rights, to have the credit go to a possibly fickle celebrity who is ultimately not going to give up her (or his) wealth or fame or status to dedicate herself to animal rights, yet still gets the attention for the cause, it can be like their source of value or self-worth has been taken away from them. The celebrities both get further celebrated by vegan groups and the attention of broader society.
I'm not defending this line of thinking and it shouldn't matter who helps reduce animal suffering, but I think that is definitely a component of celebrity hate.
thanks pm, yes, very interesting. i will incorporate your that factor in my text! thanks!
Nice blog! It's wildly unfair that somebody who has been vegan for two months gets lauded for all they are doing for the animals, but for the sake of the animals we must embrace that particular injustice and use it.
I think if we're talking about hate, I don't see much hatred of celebrities more valid criticisms.
The place I see most hate is on things like the recent thing Gervais has been promoting (pictures of that female hunter) where we seem to get loads of animal advocates pouring hatred towards someone for harming animals. Gervais himself seems to be on a mission to stir up hatred. It's entirely understandable that he'd come under severe criticism for stirring up hatred for someone who harms animals when he himself harms animals as he's a non-vegan.
I think that type of campaign is quite bad and can have the effect of normalising animal use/abuse whilst people are shouting scum at someone else for harming animals.


Why isn't travelling in Turkish culture?
One and the most important reason is not travelling is economic. While finding the food barely, it's hard to travel for a family. Furthest, they go to picnic or family visit, if they have a car.
Thus, it's not coincidence seeing all tourists come from economically developed countries. First of all their money is valuable, euro is four times stronger than Turkish Lira. They buy their ticket and book the flights. They don't think about calculation of the expenses. You buy and go. But the situation is not like that in Turkey.
Although it's good to have strong family bonds, when it become excessive, it can create some problems. Typical response for a Turkish child or young hear from his parents "I trust you, but not the surroundings". I never know who are this people but because of these surroundings, poor Turkish teens never able to go anywhere. It also doesn't matter girl or boy, all teens and youth are under protection. As a matter of course, Turkish boys grow with restriction by their family.
When Turkish people become sedentary it was at the end of the nomadism. When they found the land to settle down, there was no more need to be nomad. Therefore, even though in the history of Turkish there's nomadism, there is not wish of exploration in the culture.
Moreover, travelling isn't priority of a Turk's life. By society, priorities are job, marriage and kids, so after it turns out challenging in life economically.
If you are travelling abroad, you also should know at least a language commonly spoken rather than Turkish. Besides cultural and economical reasons, not being talented to speak another language is also reason to not to travel for Turkish people. To not depending on touristic tours and to be able to travel freely, it's important to speak another language. So it's very usual to see tourists or travelers around where come from countries economically and educationally good and developed.
What about you? Travelling is your culture or not?
Share it! Sharing is cool!!!
Why should you marry a foreigner?
Are you Spanish, French or Italian speaker?
Definitely it's the place if you are interested in being nature. The problem in Turkey is, people don't move from their comfort zone even though there are a lot of things to go&see. That's so shame, all the historical places also are suffering apathy.


Netherhall Gardens is a luxurious, contemporary development consisting of 2 buildings housing 14 modern and sophisticated apartments.
RJK have successfully installed the class-leading Paxton Net2 Access Control System throughout the development, along with a door entry system integrated within the apartments home automation, using Bticino MyHome Touch Screen, flush mounted onto the walls in the luxury homes for easy access and use.
To further enhance the security of the site, we installed automation to vehicle access gates using BFT automation, as well as a traffic light system for entry and exit to the development's underground car park.


I haven't updated much over the last few days because I was too busy at work dealing with the website refurbishment stuff. I volunteered for the ad hoc committee, and ended up being in charge of all the backend stuff, redoing our research project content-management system. Which is fine, it's halfway interesting little perl scripts, but it also involved lots of "okay, we have three different versions of this datafile, which one is the most up to date, and when can I manage to get Joe Scientist to give me new information to fill in the blank entries?" and that was really tedious but still not horrible, but we're also working under this deadline where we're trying to get it all finished before we kick of the search for a new assistant director next week. So that made it kind of sucky.
Anyway, I put the new card back in and started googling error messages, and eventually figured out that something the plug-n-play hardware manager does makes that particular flavor of NIC Very Unhappy™, and I just now tried a recommended thing and made it work again. HOORAY! I feel all computer-studly at the moment.
I hate hate HATE dealing with OS or hardware kinds of things, I think because of all the "try a small change, reboot, wait five minutes for the machine to come back up" cycling that happens.
Aren't you glad you bothered to click on this cut?
Why aren't your windows boxes talking to each other?
Because windows networking is a mystery. It is also evil.
Not even workgroups are working? Wierd. I mean workgroups. If you want I can send you Windows 2003 server. You could set up your own little domain on your side of the router and everyone should talk to everybody else (becasue they athenticate to a central box). Although I don't know how to add the linux box to that confguration. Anyway it's free and *I'm* never going to install it on anything, that's for sure.
Um, sure, that'd be keen. Does it tell you how to Make It Go™?
The windows boxen can talk to the linux box without trouble, and I don't care enough to set up Samba to let it get at windows things -- it's easy enough to switch computers.
Well, El Monstro (the name of my ancient IBM Thinkpad, which is still running Windows '98) doesn't want to run your game, but I'm sure I'll find a sucker someday soon who will give me a closer look.
It sounds like you're set up for another escape to the mountains.
I enjoy dealing with such. For me, those kinds of things are just like reading (most) Sci-Fi: very escapist. Those are things that can be done without too much thought, though tons of resarch can be required.
Of course, i work helpdesk because i just love the problem-solving aspects of it, so what do i know.


Save on Trip-Hop at Eleven Rack. Top brands include Emm/Virgin, Back to Mine, Rhino / Parlophone, Guidance Recordings, V2 Int'L, Stereo Deluxe, Virgin Records, Astralwerks, Nonesuch, NINJA TUNE, Instinct Records, Bmg Int'l, Warner Strategic Marketing, Geneon [Pioneer], VINYL, 75 Ark Records, Twisted Records Ltd, BJORK, & Fourth And Broadway. Hurry! Limited time offers. Offers valid only while supplies last.


text:
package io.permazen.cli;

import com.google.common.base.Preconditions;

import io.permazen.Permazen;
import io.permazen.Session;
import io.permazen.cli.cmd.Command;
import io.permazen.core.Database;
import io.permazen.kv.KVDatabase;
import io.permazen.parse.ParseException;
import io.permazen.parse.ParseSession;
import io.permazen.util.ImplementationsReader;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

/**
 * Represents one CLI console session.
 */
public class CliSession extends ParseSession {

    /**
     * Classpath XML file resource describing available {@link Command}s: {@value #CLI_COMMANDS_DESCRIPTOR_RESOURCE}.
     *
     *

     * Example:
     *

     *  <cli-command-implementations>
     *      <cli-command-implementation class="com.example.MyCliCommand"/>
     *  </cli-command-implementations>
     *

     *
     *

     * Instances must have a public constructor taking either zero parameters or one {@link CliSession} parameter.
     *
     * @see #loadCommandsFromClasspath
     */
    public static final String CLI_COMMANDS_DESCRIPTOR_RESOURCE = "META-INF/permazen/cli-command-implementations.xml";

    private final Console console;
    private final PrintWriter writer;
    private final TreeMap<String, Command> commands = new TreeMap<>();

    private boolean done;
    private boolean verbose;
    private int lineLimit = 16;
    private String errorMessagePrefix = "Error: ";

// Constructors

    /**
     * Constructor for {@link io.permazen.SessionMode#KEY_VALUE} mode.
     *
     * @param kvdb key/value database
     * @param writer CLI output
     * @param console associated console if any, otherwise null
     * @throws IllegalArgumentException if {@code kvdb} or {@code writer} is null
     */
    public CliSession(KVDatabase kvdb, PrintWriter writer, Console console) {
        super(kvdb);
        Preconditions.checkArgument(writer != null, "null writer");
        this.writer = writer;
        this.console = console;
    }

    /**
     * Constructor for {@link io.permazen.SessionMode#CORE_API} mode.
     *
     * @param db core database
     * @param writer CLI output
     * @param console associated console if any, otherwise null
     * @throws IllegalArgumentException if {@code db} or {@code writer} is null
     */
    public CliSession(Database db, PrintWriter writer, Console console) {
        super(db);
        Preconditions.checkArgument(writer != null, "null writer");
        this.writer = writer;
        this.console = console;
    }

    /**
     * Constructor for {@link io.permazen.SessionMode#PERMAZEN} mode.
     *
     * @param jdb database
     * @param writer CLI output
     * @param console associated console if any, otherwise null
     * @throws IllegalArgumentException if {@code jdb} or {@code writer} is null
     */
    public CliSession(Permazen jdb, PrintWriter writer, Console console) {
        super(jdb);
        Preconditions.checkArgument(writer != null, "null writer");
        this.writer = writer;
        this.console = console;
    }

// Accessors

    /**
     * Get the associated {@link Console}, if any.
     *
     * @return associated {@link Console}, or null if there is no console associated with this instance
     */
    public Console getConsole() {
        return this.console;
    }

    /**
     * Get the output {@link PrintWriter} for this CLI session.
     *
     * @return output writer
     */
    public PrintWriter getWriter() {
        return this.writer;
    }

    /**
     * Get the {@link Command}s registered with this instance.
     *
     * @return registered commands indexed by name
     */
    public SortedMap<String, Command> getCommands() {
        return this.commands;
    }

    public int getLineLimit() {
        return this.lineLimit;
    }
    public void setLineLimit(int lineLimit) {
        this.lineLimit = lineLimit;
    }

    public boolean isVerbose() {
        return this.verbose;
    }
    public void setVerbose(boolean verbose) {
        this.verbose = verbose;
    }

    public boolean isDone() {
        return this.done;
    }
    public void setDone(boolean done) {
        this.done = done;
    }

// Command registration

    /**
     * Scan the classpath for {@link Command}s and register them.
     *
     * @see #CLI_COMMANDS_DESCRIPTOR_RESOURCE
     */
    public void loadCommandsFromClasspath() {
        final ImplementationsReader reader = new ImplementationsReader("cli-command");
        final ArrayList<Object[]> paramLists = new ArrayList<>(2);
        paramLists.add(new Object[] { this });
        paramLists.add(new Object[0]);
        reader.setConstructorParameterLists(paramLists);
        reader.findImplementations(Command.class, CLI_COMMANDS_DESCRIPTOR_RESOURCE).forEach(this::registerCommand);
    }

    /**
     * Register the given {@link Command}.
     *
     *

     * Any existing {@link Command} with the same name will be replaced.
     *
     * @param command new command
     * @throws IllegalArgumentException if {@code command} is null
     */
    public void registerCommand(Command command) {
        Preconditions.checkArgument(command != null, "null command");
        this.commands.put(command.getName(), command);
    }

// Errors

    @Override
    protected void reportException(Exception e) {
        final String message = e.getLocalizedMessage();
        if (e instanceof ParseException && message != null)
            this.writer.println(this.getErrorMessagePrefix() + message);
        else {
            this.writer.println(this.getErrorMessagePrefix()
              + e.getClass().getSimpleName() + (message != null ? ": " + message : ""));
        }
        if (this.verbose || this.showStackTrace(e))
            e.printStackTrace(this.writer);
    }

    protected boolean showStackTrace(Exception e) {
        return e instanceof NullPointerException || (e instanceof ParseException && e.getLocalizedMessage() == null);
    }

    /**
     * Get prefix for error messages.
     *
     *

     * Default prefix is {@code "Error: "}.
     *
     * @return error message prefix
     */
    public String getErrorMessagePrefix() {
        return this.errorMessagePrefix;
    }

    /**
     * Set prefix for error messages.
     *
     * @param prefix error message prefix
     */
    public void setErrorMessagePrefix(String prefix) {
        this.errorMessagePrefix = prefix;
    }

// Action

    /**
     * Perform the given action in the context of this session.
     *
     *

     * This is a {@link CliSession}-specific overload of
     * {@link Session#performSessionAction Session.performSessionAction()}; see that method for details.
     *
     * @param action action to perform, possibly within a transaction
     * @return true if {@code action} completed successfully, false if a transaction could not be created
     *  or {@code action} threw an exception
     * @throws IllegalArgumentException if {@code action} is null
     */
    public boolean performCliSessionAction(final Action action) {
        return this.performSessionAction(this.wrap(action));
    }

    /**
     * Associate the current {@link io.permazen.JTransaction} with this instance, if not already associated,
     * while performing the given action.
     *
     *

     * This is a {@link CliSession}-specific overload of
     * {@link Session#performSessionActionWithCurrentTransaction Session.performSessionActionWithCurrentTransaction()};
     * see that method for details.
     *
     * @param action action to perform
     * @return true if {@code action} completed successfully, false if {@code action} threw an exception
     * @throws IllegalStateException if there is a different open transaction already associated with this instance
     * @throws IllegalStateException if this instance is not in mode {@link io.permazen.SessionMode#PERMAZEN}
     * @throws IllegalArgumentException if {@code action} is null
     */
    public boolean performCliSessionActionWithCurrentTransaction(final Action action) {
        return this.performSessionActionWithCurrentTransaction(this.wrap(action));
    }

    private WrapperAction wrap(final Action action) {
        return action instanceof Session.RetryableAction ?
           new RetryableWrapperAction(action) :
         action instanceof Session.TransactionalAction ?
           new TransactionalWrapperAction(action) : new WrapperAction(action);
    }

    private static class WrapperAction implements Session.Action {

        protected final Action action;

        WrapperAction(Action action) {
            this.action = action;
        }

        @Override
        public void run(Session session) throws Exception {
           this.action.run((CliSession)session);
        }
    }

    private static class TransactionalWrapperAction extends WrapperAction
      implements Session.TransactionalAction, Session.HasTransactionOptions {

        TransactionalWrapperAction(Action action) {
            super(action);
        }

        @Override
        public Map<String, ?> getTransactionOptions() {
            return this.action instanceof HasTransactionOptions ?
              ((HasTransactionOptions)this.action).getTransactionOptions() : null;
        }
    }

    private static class RetryableWrapperAction extends TransactionalWrapperAction implements Session.RetryableAction {

        RetryableWrapperAction(Action action) {
            super(action);
        }
    }

    /**
     * Callback interface used by {@link CliSession#performCliSessionAction CliSession.performCliSessionAction()}
     * and {@link CliSession#performCliSessionActionWithCurrentTransaction
     *  CliSession.performCliSessionActionWithCurrentTransaction()}.
     */
    @FunctionalInterface
    public interface Action {

        /**
         * Perform some action using the given {@link CliSession} while a transaction is open.
         *
         * @param session session with open transaction
         * @throws Exception if an error occurs
         */
        void run(CliSession session) throws Exception;
    }
}