text:
Championing Games Culture
GamesEd20
GamesEd20 Schedule
GamesEd19 Summit schedule
GamesEd19 Speakers
GamesEd19 : How to get here
The BGI story
Patrons of the NVM
What supporters say
Games Education Summit returns in 2020
Sheffield, 12/12/2019: Ground-breaking conference bridging the gap between games educators and the games industry returns in April with an inspiring line-up to explore much-needed solutions to deep-rooted problems.
Influential games course leaders from further and higher education, leaders from prominent studios, recruiters and 3rd sector organisations and students will continue last year's animated debate about how the games industry and games educators could collaborate.
The Games Education Summit 20 is produced by the BGI, with a platinum sponsorship from Unity Technologies, and will be held at Sheffield Hallam University and the iconic National Videogame Museum in Sheffield from Thursday 16th to Friday 17th April 2020.
Innovative educators, studios and 3rd sector organisations will share how they are tackling deep-rooted challenges with employability, diversity, skills, apprenticeships and work placements within the industry. This year's theme focuses on developing practical and actionable solutions to many of those challenges, and will showcase inspirational examples and innovative programmes from across the UK.
Keynotes will be delivered by Aurore Dimopoulos, Head of Learn Content Production at Unity Technologies Emma Smith from Creative Assembly, Mike Gamble from Epic Games and Dr Paul Parry from Sheffield Hallam University.
Workshops moderated by Dr Chris Lowthorpe from InGAME will allow delegates to share their ideas to solve endemic problems facing these two sectors. The Summit will also spotlight students themselves, hearing from current and past students about how they bridged the gap between study and work.
Unity is the Platinum Sponsor of the Summit, which is also sponsored by Sheffield Hallam University, Unreal Engine, Aardvark Swift, Staffordshire University and AIM Awards. The Summit's media partner is Gamesindustry.biz.
Tickets can be purchased here, and more information on the summit can be found here.
The Summit will feature talks and panels by over 30 speakers from InGAME, Staffordshire University, Aardvark Swift, Portsmouth University, Sumo Digital, Bournemouth University, Digital Schoolhouse, GameDragons, Birmingham City University, Ukie, the BGI, Leeds Trinity College, AIM, Rockstar, Rare, Priestley College, TT Games, NextGen Skills Academy, London College of Communications, Women in Games, Playground Games, TIGA and Falmouth University.
Rick Gibson, CEO of the BGI, said: "Last year, the Summit brought together studios and educators for the first time to discuss some challenging subjects like diversity, internships, lack of industry engagement with education and quality of graduates in some cracking debates. This year, we're focusing on solutions to those challenges. We'll feature more interactive workshops and debates and will showcase innovative collaborations between studios and institutions".
"With Unity's roots in the gaming industry, it's important for us to have a strong presence at events that bridge the gap between the gaming industry and education," said Aurore Dimopoulos, Head of Learn Content Production at Unity Technologies. "Being the technology partner in the conversations between these two sectors is critical, given Unity's ability to equip learners with the development tools necessary to advance their careers."
Dr Paul Parry, Subject Group Leader, Games and AI, Department of Computing, Sheffield Hallam University, said: "Sheffield Hallam University is delighted to sponsor and host GamesEd 2020. 2020's summit themes of industry engagement and connectivity, equipping students with the right skills and promoting inclusivity are very much at the forefront of our thinking at Sheffield Hallam. GamesEd provides an exciting opportunity for educators and industry to join, share and discuss these and other critical and challenging issues."
Continue reading "Games Education Summit returns in 2020"
Author BGI teamPosted on 12th December 2019 12th December 2019 Categories UncategorisedLeave a comment on Games Education Summit returns in 2020
BGI welcomes new trustees
The BGI is delighted to announce that we have appointed 4 new trustees, Helen Kennedy, Catriona Mary Wilson, Ben Pearce and Andy Payne, to assist with the governance and running of the charity. We are confident that these new fantastic personnel will continue to guide the BGI in achieving its mission of educating the public on the science, art, history and technology of videogames.
Please find profiles below with more information on our new trustees. You can also view profiles of the rest of our trustee board here.
Helen Kennedy
Helen is Professor of Creative and Cultural Industries at Nottingham University. Helen's career has been characterised by her passion for the integration of research, innovative curriculum development with collaborative and creative partnerships. She has an international reputation for her research and advocacy work in Game Studies and for her leadership in the development of the field.
Helen was co-organiser of the first UK International conference on games – Game Cultures – in 2001, and spent the following eight years inaugurating and developing the Play Research Group and the Digital Cultures Research Centre as key international nodes in the field of Game Studies. During this period she published widely and collaboratively with other members of this network and in the process established a distinctly British Game Studies approach to the examination of computer games, everyday technologies of play and the wider ludification of culture. Her current research interests are feminist interventions into games culture, experience design and cultural evaluation. She is a Principal Investigator on an international equity project aimed at the transformation of games culture and the games industry. Recently she has been awarded further significant UK Research Council funding to investigate new technologies and new creative practices in immersive experience design.
Catriona Mary Wilson
Catriona Wilson has worked in the UK heritage sector for nearly 20 years in independent, local authority and university museums. She is currently Head of the Petrie Museum of Egyptian Archaeology at UCL, having previously been Collections Manager and joint Heritage Manager at Guildford Heritage Service where she developed a keen interest in the preservation of Videogame heritage. Before that, Catriona established a new museum of medical history at the University of Worcester – The Infirmary. She has fundraised around £2m in project funding to date, which has created numerous permanent and project-based jobs and traineeships.
Catriona advocates for fairer and more ethical heritage jobs with the grassroots campaign Fair Museum Jobs, and is a committee member for the Society for Museum Archaeology. She has been mentor to numerous members of staff and volunteers, is a UCL Wellbeing Champion, and a Clore leader.
Ben works with the charity's Board of Trustees to lead on vision and strategy, developing new national partnerships, funding opportunities and initiatives to ensure 'PiH' continues to inspire better health and wellbeing through the visual arts. Ben was previously Project Director at the Royal Academy of Arts (RA), developing and leading the Lottery-funded Reveal, Celebrate, Explore programme, and overseeing the first stage of the redevelopment of Burlington Gardens into a new centre for artistic learning. Prior to this, Ben led a London 2012 Olympic host-borough project (High Street 2012) in the East End, which included a historic building conservation scheme, and a heritage, culture and community grants programme. Ben is also a Trustee of GEM (the voice of heritage learning); a Fellow of the Royal Society of Arts, and Vice Chair of the Better Bankside Corporate Responsibility Group, which helps businesses across this part of London support local community, charity and cultural initiatives.
Andy Payne
Andy is an experienced video games entrepreneur of 33 years and has worked with many of the world's top studios & publishers, running Mastertronic from 1988 – 2015. He chaired trade body Ukie from 2005-2015 and is still a board member. He is a board advisor at games developer Bossa Studios and a founder of games industry charity, GamesAid, where he is now a Patron, as well as working closely with BAFTA to develop their presence in games. Andy founded mobile & tablet specialist AppyNation and Gambitious, now renamed Good Shepherd, which is the world's first equity based crowdfunding platform for games and movies. Andy was founder of simulation specialists Just Flight and a VP of games charity, Special Effect. Andy also sits on the Creative Industries Council, which reports directly to DCMS and BEIS, as well as being a founder of the UK Crowdfunding Association. Andy is chair of The British Esports Association and a board adviser to the world's biggest esports company, ESL.
Author BGI teamPosted on 5th December 2019 Categories UncategorisedLeave a comment on BGI welcomes new trustees
UKie backs BGI and NVM, calls for industry support
We are delighted to see Ukie's announcement this morning that its board voted unanimously to support our charity and called for industry to help fund our programmes in games culture.
Dr Jo Twist OBE, CEO of Ukie, said: "Games have a cultural significance and the NVM has a role to play in preserving and presenting this to the public. Supporting it shows our long term commitment to celebrating our industry culture and we hope it goes from strength to strength"
Stuart Dinsey, Chair of the Ukie Board, said: "We encourage companies and individuals to visit Sheffield and support our industry's heritage as patrons or sponsors. While we continue to fight for public funding for games culture through our Next Level manifesto, the sector can make a valuable contribution to preserving heritage in the coming years"
Claire Boissiere, Vice Chair of the BGI Trustees: "I'm super excited about the possibilities this deeper collaboration between Ukie and BGI opens up and I'm looking forward to working together on future initiatives."
Author BGI teamPosted on 28th November 2019 Categories UncategorisedLeave a comment on UKie backs BGI and NVM, calls for industry support
The NVM celebrates its first anniversary in Sheffield, by looking back at Year 1 achievements
This Friday we celebrated the first birthday of the National Videogame Museum in Sheffield. It was a fantastic event, in which we packed out the museum to celebrate our achievements and look forward to the future.
We were particularly pleased to welcome Chris Kinglsey OBE and Jason Kingsley OBE to the event, where we announced our partnership with Rebellion to launch the UK Collection – a long term collection initiative that will preserve and exhibit UK gaming history. This was particularly exciting, as Chris and Jason also announced their acquisition of the Bitmap Brothers, which will also take a large place in the UK collection.
Please find a slideshow below that outlines just some of the things we've been up to over the past 12 months, and also some of the things we have planned for the future.
Author BGI teamPosted on 24th November 2019 28th November 2019 Categories UncategorisedLeave a comment on The NVM celebrates its first anniversary in Sheffield, by looking back at Year 1 achievements
Islamic Relief Launches New Game at the National Videogame Museum
On the 17th October 2017, Islamic Relief UK, the world leading humanitarian relief charity, launched a new videogame at the National Videogame Museum in Sheffield. The game, 'Virtue Reality', is based on real international development projects run by Islamic Relief in more than 40 countries across the world, from Pakistan to Mali. The game, developed in partnership with Ultimatum Games, aims to teach young people how international aid works, whilst also combating negative perceptions of Muslims in videogames.
Local school children traveled from across Sheffield to attend the launch of the event, and were amongst the first to try out the game. It is currently available on iOS, and will be released for Google Play Store soon. The launch also ties in with Charity Week, a fundraising campaign among Muslim students in the UK.
The BGI is incredibly pleased to have played a part in the development of Virtue Reality, and of subsequently hosting the launch event at the National Videogame Museum. The event was hugely successful, with local school children engaging greatly with the game. The event was also covered by BBC Look North, BBC Online, Charity Digital News, Islam Channel, GEO News.
Please find a gallery of pictures from the event below:
Author BGI teamPosted on 18th October 2019 Categories UncategorisedLeave a comment on Islamic Relief Launches New Game at the National Videogame Museum
Record number of visitors at National Video Game Museum
The National Videogame Museum (NVM) in Sheffield has proudly posted record visitor numbers over the past two weeks, as it launched its family-friendly summer programme, Summer of Buttons.
Since opening for the Summer holidays on 24th July, the NVM has welcomed nearly 2,500 visitors to play and learn about videogame history. This has been an unprecedented success, as visitors from across Yorkshire and the UK have converged in Sheffield to celebrate videogame culture.
Since launching in November 2018, the museum has welcomed over 25,000 visitors, and attracted national attention as the UK's home of videogame culture. This is the museum's first family-friendly summer season, and has currently exceeded expectations in terms of visitor numbers and positive feedback.
The Summer programme has been a hit so far, with guests enjoying new exhibits such as 4-Player Pac-Man, which is a bespoke version of the arcade classic made to be played by a team, and the Button Bash Bundle, which has seen guests vying to set the fastest time in various athletic-based videogames. The NVM has also successfully launched an exhibit dedicated to showcasing how videogames are becoming accessible for those with physical disabilities, that has been created in conjunction with the world-leading charity Special Effect.
Alongside the well-received exhibits listed above, guests have also been able to Build-a-Button in guided workshops where they have made their own gaming input from scratch, and then used that in dedicated games set up to play.
Conor Clarke, Marketing and Communications Manager for the NVM, said:
"There has been a bit of negative discussion relating to videogames recently, which has only reaffirmed our mission to create an accessible and inclusive space for those who love videogames. That we're currently busier than we've ever been demonstrates that the public is eager to learn about videogame culture, and discover the educational and cultural value of games."
For more information, visit www.thenvm.org.
Author adminPosted on 13th August 2019 13th August 2019 Categories UncategorisedLeave a comment on Record number of visitors at National Video Game Museum
BGI looks for new trustees
The BGI is looking for up to 4 candidates to join the Trustee Board and govern the new charity. Applicants have until 0900 Monday 22nd July to apply.
Diverse applicants from across the worlds of games, charities, museums and arts and finance are being sought to help deliver the charity's goals to celebrate, research and educate the public about:
the ART and cultural impact of games on individuals and our wider society.
the underlying SCIENCE of games development and the multitude of uniquely transferable skills that are used in sustainable game production.
the HISTORY of games, how they reflect societal norms of the time and how they could shape a more diverse and inclusive future.
the application of existing and emerging TECHNOLOGY within games development, its growing impact on multiple sectors and its use in creating sustainable studios.
If you are interested in applying, you can do so by filling in this short form and receive a pack which includes all the info you'll need to apply.
Author adminPosted on 20th June 2019 16th July 2019 Categories UncategorisedLeave a comment on BGI looks for new trustees
Games Education Summit 2019 survey findings
The Games Education Summit hosted over 100 educators, games studios and 3rd sector organisations in a unique series of talks that convened leaders in games and education to talk about the state of games education. In parallel to the Summit, the BGI ran a survey to get the latest data on games education. Here are the results.
From Further to Higher Education
Educators from 39 FE and HE institutions reported that they ran a total of 125 courses, yielding an average of 3.2 / institution. 70% of the institutions ran courses at HE level only, while 15% ran courses in both HE and FE, and 15% in FE alone. 54% expected the number of courses to stay the same in 2020, while 41% anticipated more courses will launch and 5% expected fewer courses.
Respondents reported 268 lecturers on their courses, an average of 7 per institution. 59% expected the number of lecturers to stay the same in 2020, while 33% anticipated more lecturers and 8% expected fewer lecturers.
Nearly 7,000 students at just 39 institutions
These institutions reported a total of 6,695 students currently studying on their courses, an average of 172 / course. We note that 8 organisations had 300 or more students, which skews the average significantly higher. Educators were asked to project their total students in 2019 and results suggest that their student body will be slightly smaller in 2019 in comparison to 2018.
Student body diversity
An average of 14% of responding institutions' 2018 student intake was female, and 64% of educators thought that this would stay the same next year, while 31% expected the number of females to increase and 5% the number to decline.
An average of 17% of responding institutions' 2018 student intake was black, Asian and minority ethnic, but we note that 24% did not know or record this data.
Educators' biggest challenges were, in order of priority, time / workload, lack of studio placements for students, institutional pressures, lack of industry engagement, poor quality of intake and lack of diversity in intake.
66% of educators reported they are mostly confident that they are teaching what industry wants. 24% are confident and 10% are unsure.
An average of 35% of educator respondents' graduates found jobs in established games companies while an average of 6% of graduates established games start-ups. 39% of graduates found jobs in similar industries.
Industry collaboration with educators
Educators reported 256 visiting speakers from industry last year, an average of 7 per institution. 79% of educators would like more speakers from industry, 18% wanted the same and 3% wanted fewer speakers.
When asked how educators could assist games studios, the most popular responses from all respondents were to work more closely with industry (67%), deliver better qualified graduates (50%), contribute to games in production (31%), collaborate on coursework (22%) and work on prototypes (22%).
When asked how studios could assist FE/HE institutions, the most popular responses were to give advice on course content (50%), provide more placements (28%), give lectures (25%), critique work from summer shows (17%) and invite students to visit studios (11%).
Games Education Summit
When asked what they wanted the Games Education Summit to achieve, 61% wanted to network and bridge the gap between educators and studios, 28% wanted FE/HE to gain a better understanding of what skills industry requires from graduates, 25% wanted industry to support and understand FE/HE institutions more and 14% wanted the sharing of best practice.
Author adminPosted on 31st May 2019 Categories UncategorisedLeave a comment on Games Education Summit 2019 survey findings
BGI completes charity registration, sets out strategy
Sheffield, 27th May, 2019: The BGI is now an educational charity and has revealed its mission and programmes.
The new charity's goals are to educate the public about the art, science, history and technology of games through the National Videogame Museum, educational programmes and formal research. The BGI is the first charity dedicated to games culture in the UK.
The National Videogame Museum lies at the heart of the BGI's plans in Sheffield. This includes a busy summer schedule of exhibitions and events at the galleries, before Japanese games luminaries including Masayuki Uemura, former head of R&D at Nintendo, visit to give talks at the Museum. The Pixelheads education programme is also expanding into Yorkshire with the help of the Arts Council of England, Learn Sheffield and Sheffield City Council.
Following the launch of the Games Education Summit in April, the BGI is launching its first FutureLearn course, How to Start your Career in Games Development, developed with assistance from Sumo Digital, Square Enix and Aardvark Swift.
BGI has also opened offices at the University of Nottingham. The Nottingham team will work on educational and cultural initiatives, develop games festivals and other cultural events around the country and extend its formal research into games culture. The team's ninth publication on games heritage preservation and curation is expected to be published late in 2019.
Ian Livingstone CBE, Chair of BGI Trustees, said: "We're delighted that the unique work conducted by BGI programmes such as the National Videogame Museum and Pixelheads has been recognised by the Charity Commission. This is timely validation for all the hard work in championing games culture that our small but growing team has been doing in the Museum. I invite anyone who cares about the cultural life of video games to join us and support this amazing project with content, evangelism and funding to help expand the programme in the years to come."
Claire Boissiere, Vice Chair of BGI Trustees, said: "This is a really exciting time for the BGI. Successfully registering as a charity enables us to grow our range of programmes and partner with a much wider group of organisations interested in culture, skills, diversity and sustainability."
Author BGI teamPosted on 27th May 2019 27th May 2019 Categories UncategorisedLeave a comment on BGI completes charity registration, sets out strategy
BGI and Bath Spa University lead British-Japanese collaboration to preserve games heritage
The BGI and Bath Spa University have won Research Council funding to start a new games heritage preservation project that builds ties between Japan and the UK to preserve games heritage.
The project brings together Ritsumeikan University in Kyoto, Bath Spa University and the National Videogame Museum (NVM) in Sheffield to identify and share best practice in game preservation, curation and exhibition. The project is funded by the Economic and Social Research Council.
A series of collaborations, visits and research starts in May 2019, when the BGI's Head of Collections Professor James Newman and NVM Director of Culture Iain Simons visit Kyoto, before leading Japanese videogames heritage academics, including the legendary Japanese hardware designer Masayuki Uemura, former head of R&D at Nintendo, visit the UK later in the summer.
The work brings together experts from some of the world's leading videogames heritage preservation institutions to map the preservation of 'at risk' videogames material, identify the latest innovations in the curation and exhibition of videogames and investigate solutions to legal, technical and infrastructural impediments to their preservation and exhibition. A parallel series of events and lectures are planned in both countries before articles are published in journals in early 2020.
The project is a step towards a large-scale exhibition with the NVM in 2020 that will foreground the underrepresented histories of UK and Japanese game development, culture and practice, including the decades of interactions and flows of talent and creativity between these two pioneers and key players in videogaming.
James Newman, Professor of Digital Media at Bath Spa University, said "Videogames are a vital part of contemporary popular culture but they're in danger of disappearing. As old systems and storage media fail, we run the risk of losing access to games forever so it's essential that we take steps to preserve them for future generations of players, gamemakers and researchers. Working with the National Videogame Museum and Ritsumeikan Center for Game Studies ensures that the project brings together world-leading institutions in the field and allows us to take a truly international approach to the challenges of game preservation, interpretation and exhibition."
Iain Simons, Director of Culture for the BGI and NVM, said "We're honoured to be working on this new research project, hoping to add to the knowledge and best-practise of museums around the World through this exciting collaboration. The NVM is an international institution and has enjoyed a long relationship with our esteemed colleagues in Ritsumeikan University as well as colleagues from around the World. Videogames are a global culture, so it's right that videogame interpretation and preservation is a global effort. We're excited to be playing our part!"
Continue reading "BGI and Bath Spa University lead British-Japanese collaboration to preserve games heritage"
Author BGI teamPosted on 20th May 2019 20th May 2019 Categories UncategorisedLeave a comment on BGI and Bath Spa University lead British-Japanese collaboration to preserve games heritage
BGI is a new charity that works to educate the public about the art, science, history and technology of videogames
The BGIFollow
A new charity for games culture, skills, diversity and sustainability, set up after the British Games Institute campaign. Runs the National Videogame Museum 🕹🎮
The BGI@TheBGI·
This is a fantastic initiative by @uk_ie and @askaboutgames, to help parents and carers manage their families game time.
We're very pleased to support this at the @nvmuk!
#PLAYTogetherUK
Retweet on TwitterThe BGI Retweeted
Andy Payne@PercyBlakeney63·
2019:: It's been an amazing year at @nvmuk and @TheBGI. Another incredible team, who have performed miracles at all levels. We really are building something that the games industry are proud of. So many great peers involved it's been a pleasure and an honour.
Yorkshire Games Festival@YorksGamesFest·
Fantastic opportunity for developers at all levels to showcase their northern game to our museum visitors!
There's lots of kind words about the showcase from previous exhibitors such as @SquishySports
Bring along your game!
https://www.scienceandmediamuseum.org.uk/whats-on/yorkshire-games-festival/northern-games-showcase
#YGF20 #indiedev #gamedev
Interested in finding out more about our forthcoming programmes?
BGI Proudly powered by WordPress
We use cookies to help make your experience better. Google Analytics' cookies are utilized to anonymously track use of our website and Autopilot, our crm platform, uses cookies to track your visit. By continuing, you agree to our Cookie Policy. Our cookie policy contains more detail about the cookies we use and how to opt out of cookies.Accept Read More


text:
#include "EvoStdAfx.h"

granny_data_type_definition EffectFieldsType[] =
{
	{GrannyStringMember, "EffectFile"},
	{GrannyInt32Member, "Technique"},
	{GrannyEndMember}
};

struct EffectStruct
{
	char *	m_szEffectFile;
	int		m_iTechnique;
};

struct TextureStruct
{
	char *m_szTextureName;
};

EvoGranny::EvoGranny()
{

}

EvoGranny::~EvoGranny()
{

}

bool EvoGranny::Initialize(const char *szFilename)
{
	granny_file      *pGrannyFile;
	granny_file_info *pGrannyFileInfo;

	EvoString strPath;
	strPath.GetPath((TCHAR*)szFilename);

	m_fAccumTime = 0.0f;

	m_iFrame = 0;

	pGrannyFile = GrannyReadEntireFile(szFilename);

	if (pGrannyFile == NULL)
		return false;

	pGrannyFileInfo = GrannyGetFileInfo(pGrannyFile);

	if (pGrannyFileInfo == NULL)
		return false;

	// Put the file into a consistent coordinate system.
	TransformFile(pGrannyFileInfo);

	// And then the models.  Note that we'll track the maximum bone
	//  count here, since we need it for the shared local pose...
	m_iMaxBoneCnt = 0;
	for (int iModel = 0; iModel < pGrannyFileInfo->ModelCount; iModel++)
	{
		granny_model *pGrannyModel = pGrannyFileInfo->Models[iModel];
		int const iBoneCount = pGrannyModel->Skeleton->BoneCount;

		EvoGrannyModel* pNewModel = new EvoGrannyModel;
		m_apModels.push_back(pNewModel);

		// Create the model instance and it's world pose buffer
		pNewModel->m_pGrannyInstance = GrannyInstantiateModel(pGrannyModel);
		pNewModel->m_pWorldPose      = GrannyNewWorldPose(iBoneCount);

		GrannyBuildCompositeTransform4x4 ( &pGrannyModel->InitialPlacement, (float*)&pNewModel->m_InitialOrientation );

		// Track the max bone count
		m_iMaxBoneCnt = std::max(m_iMaxBoneCnt, iBoneCount);

		// Create the meshes for this model
		for (int iMesh = 0; iMesh < pGrannyModel->MeshBindingCount; iMesh++)
		{
			EvoGrannyMesh *pMesh = new EvoGrannyMesh();
			pMesh->Initialize(this, pGrannyModel, iMesh, strPath.GetBuffer());
			pNewModel->m_apMeshes.push_back(pMesh);
		}
	}

	// When Granny updates models, she needs an intermediate buffer
	// that holds the local transform for each bone in a model.  But,
	// I really don't want to keep around a separate buffer for each
	// model because I don't care about the results outside of the
	// update loop.  So I allocate a single local pose buffer, and use
	// it for all the models.
	m_pSharedLocalPose = GrannyNewLocalPose(m_iMaxBoneCnt);

	m_pCurrentControl = NULL;
	m_uiCurrentAnim = 0xffffffff;

	return true;
}

//-------------------------------------------------------------------------------------
// Transforms a file_info structure into a consistent coordinate system
//-------------------------------------------------------------------------------------
void EvoGranny::TransformFile(granny_file_info *pFileInfo)
{
	if ( pFileInfo->ArtToolInfo == NULL )
	{
		// File doesn't have any art tool info.
		// Might never have been exported, or might have been stripped by a preprocessor.
		return;
	}

	float Origin[]      = {0, 0, 0};
    float RightVector[] = {1, 0, 0};
    float UpVector[]    = {0, 1, 0};
    float BackVector[]  = {0, 0, -1};

    float Affine3[3];
    float Linear3x3[3][3];
    float InverseLinear3x3[3][3];
	GrannyComputeBasisConversion(pFileInfo, 1.0f,
                                 Origin, RightVector, UpVector,
                                 BackVector, Affine3, (float *)Linear3x3,
                                 (float *)InverseLinear3x3);

    GrannyTransformFile(pFileInfo, Affine3,
                        (float *)Linear3x3,
                        (float *)InverseLinear3x3,
						1e-5f, 1e-5f,
                        GrannyRenormalizeNormals | GrannyReorderTriangleIndices);
}

void EvoGranny::Render()
{
	for (size_t Idx = 0; Idx < m_apModels.size(); Idx++)
	{
		m_apModels[Idx]->Render();
	}
}

/*
void EvoGranny::AdjustBone(char *szBoneName)
{
	int iBoneIndex;
	bool bFound = false;

	for (size_t Idx = 0; Idx < m_apModels.size(); Idx++)
	{
		EvoGrannyModel* pModel = m_apModels[Idx];
		granny_skeleton *pSkeleton = GrannyGetSourceSkeleton(pModel->m_pGrannyInstance);
		if(GrannyFindBoneByName(pSkeleton, szBoneName, &iBoneIndex))
		{
			// The bone was found, it's index is iBoneIndex
			bFound = true;
			break;
		}
	}

	if (bFound)
	{
		EvoMatrix m;
		EvoMatrix m2;
		m.SetIdentity();
		float Quat[4];
		float Pos[3] = {0,0,0};
		float Scale[3][3] = {1,0,0,0,1,0,0,0,1};

		m2.SetRotateYPR(DEGTORAD(22.0f), DEGTORAD(0.0f), 0);

		granny_transform *pTransform = GrannyGetLocalPoseTransform(m_pSharedLocalPose, iBoneIndex);
		GrannyBuildCompositeTransform4x4(pTransform, (granny_real32 *)&m);

		m.Multiply(&m2);

		D3DXQuaternionRotationMatrix((D3DXQUATERNION *)Quat, (D3DXMATRIX *)&m);

		pTransform->Orientation[0] = Quat[0];
		pTransform->Orientation[1] = Quat[1];
		pTransform->Orientation[2] = Quat[2];
		pTransform->Orientation[3] = Quat[3];

		EvoPoint3 pt3T;
		m.GetTranslate(&pt3T);
		pTransform->Position[0] =pt3T.m_fX;
		pTransform->Position[1] =pt3T.m_fY;
		pTransform->Position[2] =pt3T.m_fZ;
	}
}*/

void EvoGranny::AddBoneModifier(EvoBoneModifier *pBoneModifier)
{
	m_apBoneModifiers.push_back(pBoneModifier);
}

void EvoGranny::ApplyBoneModifiers(uint uiModelIdx)
{
	for (uint ui = 0; ui < m_apBoneModifiers.size(); ui++)
	{
		if (m_apBoneModifiers[ui]->m_uiModelIndex == uiModelIdx)
		{
			m_apBoneModifiers[ui]->Apply();
		}
	}
}

void EvoGranny::Update(float fDeltaT)
{
	m_fAccumTime += fDeltaT;

	static EvoMatrix s_mtxResult;

	for (uint Idx = 0; Idx < m_apModels.size(); Idx++)
	{
		EvoGrannyModel* pModel = m_apModels[Idx];
		granny_skeleton *Skeleton = GrannyGetSourceSkeleton(pModel->m_pGrannyInstance);

		// Set the model clock
		GrannySetModelClock(pModel->m_pGrannyInstance, m_fAccumTime);

		// Sample the animation into the shared local pose...
		GrannySampleModelAnimations(pModel->m_pGrannyInstance,
									0, Skeleton->BoneCount,
									m_pSharedLocalPose);

		// Apply any bone modifiers here.
		if (m_apBoneModifiers.size())
			ApplyBoneModifiers(Idx);

		//static bool bB = false;
		//bB = !bB;
		//if (bB)
			//AdjustBone("Bip01 Spine1");
			//AdjustBone("Bip01 Spine2");

			//AdjustBone("Bip01 L UpperArm");
			//AdjustBone("Bip01 R UpperArm");

		// ...and build the world pose from it.  A null offset matrix
		// indicates that we want the model placed at the origin...
		pModel->m_InitialOrientation.Multiply(GetOwner()->GetWorldMatrix(), &s_mtxResult);
		GrannyBuildWorldPose(Skeleton, 0, Skeleton->BoneCount,  m_pSharedLocalPose, (granny_real32 *)&s_mtxResult, pModel->m_pWorldPose);
	}
}

// Set all materials uiSlot to pTex
void EvoGranny::SetMaterialTexture(uint uiSlot, EvoTexture *pTex)
{
	for (size_t Idx = 0; Idx < m_apModels.size(); Idx++)
	{
		m_apModels[Idx]->SetMaterialTexture(uiSlot, pTex);
	}
}

void EvoGranny::ComputeOBB(EvoBoundingBox *pBoundingBox)
{
	for (size_t Idx = 0; Idx < m_apModels.size(); Idx++)
	{
		EvoBoundingBox ModelOBB;
		m_apModels[Idx]->ComputeOBB(&ModelOBB);
		pBoundingBox->Union(ModelOBB);
	}
}

EvoGrannyMesh::EvoGrannyMesh()
{
	m_pVB = NULL;
	m_pIB = NULL;
}

EvoGrannyMesh::~EvoGrannyMesh()
{

}

void EvoGrannyMesh::Initialize(EvoGranny *pGranny, granny_model* Model, int const MeshIndex, const char *szPath)
{
	assert(MeshIndex >= 0 && MeshIndex < Model->MeshBindingCount);

	m_pGranny = pGranny;

	m_pGrannyMesh = Model->MeshBindings[MeshIndex].Mesh;

	// Note the mesh pointer and the binding
	m_pGrannyBinding = GrannyNewMeshBinding(m_pGrannyMesh, Model->Skeleton, Model->Skeleton);

	// Index Buffer Creation
	int const IndexCount = GrannyGetMeshIndexCount(m_pGrannyMesh);
	int const IndexBufferSize = sizeof(granny_uint32) * IndexCount;

	BYTE *pIndices = new BYTE[IndexBufferSize];
	GrannyCopyMeshIndices(m_pGrannyMesh, 4, pIndices);

	m_pIB = EVO->CreateBuffer(IndexBufferSize, sizeof(granny_uint32), pIndices, EvoBind::INDEX_BUFFER, EvoUsage::IMMUTABLE, EvoCpuAccess::NONE, false, false);
	delete pIndices;

	// Vertex Buffer Creation
	int VertexCount = GrannyGetMeshVertexCount(m_pGrannyMesh);
	uint uiNumComponents = (uint)GrannyGetVertexComponentCount(m_pGrannyMesh->PrimaryVertexData->VertexType);
	if (!GrannyMeshIsRigid(m_pGrannyMesh))
	{
		// Granny is retarded in how it stores bone weight and indices and only treats them as 1 component in the count,
		// even though there are 2 components in the data.
		uiNumComponents++;
	}
	uint uiStride = GrannyGetTotalObjectSize(m_pGrannyMesh->PrimaryVertexData->VertexType);

	EvoInputElements InputElements;
	InitInputElementsFromGrannyData(uiNumComponents, m_pGrannyMesh->PrimaryVertexData->VertexType, &InputElements);
	m_hInputLayout = EVO->GetInputLayoutMgr()->RegisterInputElements(InputElements);

	int const uiVBSize = VertexCount * uiStride;

	BYTE *pVertices = new BYTE[uiVBSize];
	GrannyCopyMeshVertices(m_pGrannyMesh, m_pGrannyMesh->PrimaryVertexData->VertexType, pVertices);
	m_pVB = EVO->CreateBuffer(uiVBSize, uiStride, pVertices, EvoBind::VERTEX_BUFFER, EvoUsage::IMMUTABLE, EvoCpuAccess::NONE, false, false);
	delete pVertices;

	// Create the texture references
	for (int i = 0; i < m_pGrannyMesh->MaterialBindingCount; i++)
	{
		EvoMaterial *pMat = new EvoMaterial();

		pMat = CreateEvoMaterial(m_pGrannyMesh->MaterialBindings[i].Material, szPath);
		m_apMaterialReferences.push_back(pMat);
	}
}

void EvoGrannyMesh::ComputeOBB(EvoBoundingBox *pBoundingBox, EvoGrannyModel *pModel)
{
/*	// This doesn't work right
	for(int BoneBindingIndex = 0; BoneBindingIndex < m_pGrannyMesh->BoneBindingCount; ++BoneBindingIndex)
	{

		granny_bone_binding &BoneBinding = m_pGrannyMesh->BoneBindings[BoneBindingIndex];

		EvoBoundingBox BoneOBB;
		BoneOBB.Set(*((EvoPoint3*)BoneBinding.OBBMin), *((EvoPoint3*)BoneBinding.OBBMax));
		pBoundingBox->Union(BoneOBB);
	}
*/
	granny_data_type_definition *InputVertexLayout = m_pGrannyMesh->PrimaryVertexData->VertexType;
    granny_data_type_definition *OutputVertexLayout = m_pGrannyMesh->PrimaryVertexData->VertexType;//GrannyPN33VertexType;

	uint uiStride = sizeof(EvoPoint3)*2;
	EvoPoint3 *pSrcVerts = (EvoPoint3 *)new char[uiStride*m_pGrannyMesh->PrimaryVertexData->VertexCount];
	GrannyCopyMeshVertices(m_pGrannyMesh, GrannyPN33VertexType, pSrcVerts);
	granny_mesh_deformer *pDeformer = GrannyNewMeshDeformer(GrannyPN33VertexType, GrannyPN33VertexType, GrannyDeformPositionNormal);

   //granny_mesh_deformer *pDeformer = GrannyNewMeshDeformer(InputVertexLayout, OutputVertexLayout, GrannyDeformPositionNormalTangentBinormal);

	//uint uiStride = GrannyGetTotalObjectSize(m_pGrannyMesh->PrimaryVertexData->VertexType);
	EvoPoint3 *pDestVerts = (EvoPoint3 *)new char[uiStride*m_pGrannyMesh->PrimaryVertexData->VertexCount];
	//GrannyDeformVertices(pDeformer, GrannyGetMeshBindingFromBoneIndices(m_pGrannyBinding), ( granny_real32 const *)GrannyGetWorldPoseComposite4x4Array(pModel->m_pWorldPose), m_pGrannyMesh->PrimaryVertexData->VertexCount, m_pGrannyMesh->PrimaryVertexData->Vertices, (void *)pDestVerts);

	GrannyDeformVertices(pDeformer, GrannyGetMeshBindingFromBoneIndices(m_pGrannyBinding), ( granny_real32 const *)GrannyGetWorldPoseComposite4x4Array(pModel->m_pWorldPose), m_pGrannyMesh->PrimaryVertexData->VertexCount, pSrcVerts, (void *)pDestVerts);

	pBoundingBox->Set(pDestVerts, m_pGrannyMesh->PrimaryVertexData->VertexCount, uiStride);

	GrannyFreeMeshDeformer(pDeformer);

	delete pDestVerts;
}

EvoMaterial *EvoGrannyMesh::CreateEvoMaterial(granny_material *pGMat, const char *szPath)
{
	EffectStruct EffectData;
	granny_variant EffectFile;
	granny_variant TextureFile;
	if (GrannyFindMatchingMember(pGMat->ExtendedData.Type, pGMat->ExtendedData.Object, "EffectFile", &EffectFile))
	{
		GrannyConvertSingleObject(EffectFile.Type, EffectFile.Object, EffectFieldsType, &EffectData);
	}
	else
	{
		return NULL;
	}

	EvoMaterial *pMat = new EvoMaterial();

	EvoString szEffectFile;
	szEffectFile.StripPath(EffectData.m_szEffectFile);

	EvoShader *pShader = RESMGR->CreateShader(szEffectFile.GetBuffer());

	EvoString TexString;
	uint uiSamplerSlot;
	for (uint ui = 0; ui < 16; ui++)
	{
		if (pShader->GetTextureParam(ui, &TexString, &uiSamplerSlot))
		{
			TextureStruct TextureData;
			granny_data_type_definition TextureFieldType[] = { {GrannyStringMember, NULL}, {GrannyEndMember} };
			TextureFieldType[0].Name = TexString.GetBuffer();

			if (GrannyFindMatchingMember(pGMat->ExtendedData.Type, pGMat->ExtendedData.Object, TexString.GetBuffer(), &TextureFile))
			{
				GrannyConvertSingleObject(TextureFile.Type, TextureFile.Object, TextureFieldType, &TextureData);
			}

			if (strlen(TextureData.m_szTextureName) != 0)
			{

				EvoString StrippedPathTexString;
				StrippedPathTexString.StripPath(TextureData.m_szTextureName);

				EvoTexture *pTex = RESMGR->CreateTexture(StrippedPathTexString.GetBuffer(), szPath, false);

				if (pTex)
				{
					pMat->SetTexture(uiSamplerSlot, pTex);
				}
			}
		}
		else
		{
			break;
		}
	}

	pMat->SetShader(pShader);
	pMat->SetShaderTechnique(EffectData.m_iTechnique);

	return pMat;

}

void EvoGrannyMesh::Render(granny_matrix_4x4 *CompositeBuffer)
{
	// First I load the mesh's index buffer.
	EVO->SetIB(m_pIB, m_pIB->GetStride(), 0);
	EVO->SetVB(m_pVB, 0, m_pVB->GetStride(), 0);

	// Normally, you might use the BindingToBoneIndices
	// function here to map from Mesh verts to model verts.  Since
	// we've already reordered the mesh indices into absolute
	// model indices, we can ignore this for the purposes of this
	// sample.  If you were loading skinning matrices into the
	// constant registers, this is where you'd do the mapping.
	int const *ToBoneIndices = GrannyGetMeshBindingToBoneIndices(m_pGrannyBinding);

	int const NumMeshBones   = GrannyGetMeshBindingBoneCount(m_pGrannyBinding);
	// you'd want to handle this better in Real Life, but we'll
	// just place a restriction on the art for this sample.
//	assert(NumMeshBones <= MAX_CONSTANT_MATRICES);

    // Next I load the mesh's vertex buffer, or deform
    // into a temporary buffer and load that, depending on
    // whether the mesh is rigid or not.
    int VertexCount = GrannyGetMeshVertexCount(m_pGrannyMesh);
	EvoMatrix *ppMatrices[100];
    if (GrannyMeshIsRigid(m_pGrannyMesh))
    {
        // It's a rigid mesh, so load the appropriate shader and
        // vertex decl.  Note that this is pretty slow, normally
        // you'd order your meshes to minimize the number of state
        // switches.

        // Now I look up the transform for this mesh, and load it.
		EVO->SetTransform(EVO_TRANSFORM_WORLD, (EvoMatrix *)&CompositeBuffer[*ToBoneIndices]);
    }
    else
    {
		// Load the matrices into the constant registers.  This is
		// about the simplest way to go about this, you might want
		// to marshall into a temp buffer if the function call
		// overhead becomes problematic.
		for (int Matrix = 0; Matrix < NumMeshBones; Matrix++)
		{
			ppMatrices[Matrix] = (EvoMatrix *)CompositeBuffer[ToBoneIndices[Matrix]];
		}

		EvoMatrix mtxIdentity;
		mtxIdentity.SetIdentity();
		EVO->SetTransform(EVO_TRANSFORM_WORLD, &mtxIdentity);
	}

    // Now both the indices and vertices are loaded, so I can
    // render.  I grab the material groups and spin over them,
    // changing to the appropriate texture and rendering each
    // batch.  A more savvy rendering loop might have instead
    // built a sorted list of material groups to minimize texture
    // changes, etc., but this is the most basic way to render.
    int GroupCount = GrannyGetMeshTriangleGroupCount(m_pGrannyMesh);
    granny_tri_material_group *Group = GrannyGetMeshTriangleGroups(m_pGrannyMesh);

	int iVertCount = GrannyGetMeshVertexCount(m_pGrannyMesh);

	while(GroupCount--)
    {
		uint uiNumShaderPasses = 0;
		EvoMaterial *pMat = NULL;
		EvoShader *pShader = NULL;

		if(Group->MaterialIndex < int(m_apMaterialReferences.size()))
		{
			pMat = m_apMaterialReferences[Group->MaterialIndex];
			if(pMat)
			{
				if (EVO->GetShaderOverride())
				{
					pShader = EVO->GetShaderOverride();
					if (GrannyMeshIsRigid(m_pGrannyMesh))
					{
						pShader->SetTechnique(EVO->GetShaderOverrideRigidTechnique());
					}
					else
					{
						pShader->SetTechnique(EVO->GetShaderOverrideSkinnedTechnique());
					}
				}
				else
				{
					pShader = pMat->GetShader();
					pShader->SetTechnique(pMat->GetShaderTechnique());
				}

				pShader->Begin(&uiNumShaderPasses);

				EVO->SetInputLayout(m_hInputLayout, pShader, pShader->GetCurrentTechniqueName());

				if (!GrannyMeshIsRigid(m_pGrannyMesh))
				{
					pShader->SetMatrixPointerArray(EV0_SHADER_BONEMATRIXARRAY, ppMatrices, NumMeshBones);
				}
			}
			else
			{
				assert(0 && "Must have a material/shader!");
				return;
			}
		}

		for (uint ui = 0; ui < uiNumShaderPasses; ui++)
		{
			pShader->BeginPass(ui);

			pMat->BindTextures();

			EVO->SetPrimitiveType(EvoPrimitive::TRIANGLELIST);
			EVO->DrawIndexed(iVertCount, Group->TriCount*3, Group->TriFirst*3, 0);

			pShader->EndPass();

			pMat->UnbindTextures();
		}

		pShader->End();
		++Group;
	}
}

void EvoGrannyMesh::SetMaterialTexture(uint uiSlot, EvoTexture *pTex)
{
	for (size_t Idx = 0; Idx < m_apMaterialReferences.size(); Idx++)
	{
		m_apMaterialReferences[Idx]->SetTexture(uiSlot, pTex);
	}
}

EvoGrannyModel::EvoGrannyModel()
{
}

EvoGrannyModel::~EvoGrannyModel()
{

}

void EvoGrannyModel::Render()
{
	 // Since I'm going to need it constantly, I dereference the composite
    // transform buffer for the model's current world-space pose.  This
    // buffer holds the transforms that move vertices from the position
    // in which they were modeled to their current position in world space.
    granny_matrix_4x4 *CompositeBuffer = GrannyGetWorldPoseComposite4x4Array(m_pWorldPose);

	for (uint ui = 0; ui < m_apMeshes.size(); ui++)
	{
		m_apMeshes[ui]->Render(CompositeBuffer);
	}
}

void EvoGrannyModel::SetMaterialTexture(uint uiSlot, EvoTexture *pTex)
{
	for (size_t Idx = 0; Idx < m_apMeshes.size(); Idx++)
	{
		m_apMeshes[Idx]->SetMaterialTexture(uiSlot, pTex);
	}
}

void EvoGrannyModel::ComputeOBB(EvoBoundingBox *pBoundingBox)
{
	for (size_t Idx = 0; Idx < m_apMeshes.size(); Idx++)
	{
		EvoBoundingBox MeshOBB;
		m_apMeshes[Idx]->ComputeOBB(&MeshOBB, this);
		pBoundingBox->Union(MeshOBB);
	}
}

int EvoGranny::GetNumVerts()
{
	 return GrannyGetMeshVertexCount(m_apModels[0]->m_apMeshes[0]->m_pGrannyMesh);
}

int EvoGranny::GetNumFaces()
{
	 return GrannyGetMeshIndexCount(m_apModels[0]->m_apMeshes[0]->m_pGrannyMesh)/3;
}

int EvoGranny::GetVertStride()
{
	return (int)m_apModels[0]->m_apMeshes[0]->m_pVB->GetStride();
}

int EvoGranny::GetFaceStride()
{
	return 3*sizeof(uint);
}

void *EvoGranny::GetVerts()
{
	int iVertexBufferSize = GetNumVerts()*GetVertStride();
	BYTE *pLockedVertices, *pCopyVertices;
	pCopyVertices = new BYTE[iVertexBufferSize];
	pLockedVertices = (BYTE*)m_apModels[0]->m_apMeshes[0]->m_pVB->Lock(EvoLock::READ, true);
	memcpy(pCopyVertices, pLockedVertices, iVertexBufferSize);
	m_apModels[0]->m_apMeshes[0]->m_pVB->Unlock();
	return (void*)pCopyVertices;
}

void *EvoGranny::GetFaces()
{
	int iIndexBufferSize = GetNumFaces()*GetFaceStride();
	BYTE *pLockedIndices, *pCopyIndices;
	pCopyIndices = new BYTE[iIndexBufferSize];
	pLockedIndices = (BYTE*)m_apModels[0]->m_apMeshes[0]->m_pIB->Lock(EvoLock::READ, true);
	memcpy(pCopyIndices, pLockedIndices, iIndexBufferSize);
	m_apModels[0]->m_apMeshes[0]->m_pIB->Unlock();
	return (void*)pCopyIndices;
}

void EvoGranny::LoadAnimation(uint uiAnim, const char *szFilename)
{
	granny_file      *pGrannyFile;
	granny_file_info *pGrannyFileInfo;

	pGrannyFile = GrannyReadEntireFile(szFilename);

	if (pGrannyFile == NULL)
		return;

	pGrannyFileInfo = GrannyGetFileInfo(pGrannyFile);

	if (pGrannyFileInfo == NULL)
		return;

	// Put the file into a consistent coordinate system.
	TransformFile(pGrannyFileInfo);

	if (pGrannyFileInfo->AnimationCount)
	{
		granny_animation *pAnimation = pGrannyFileInfo->Animations[0];

		m_apAnimations.push_back(pAnimation);

		uint uiAnimIndex = m_apAnimations.size()-1;

		m_AnimMap.insert(std::pair <uint, uint>(uiAnim, uiAnimIndex));
	}

}

void EvoGranny::PlayAnimation(uint uiAnim)
{
	if (uiAnim == m_uiCurrentAnim)
		return;
	else m_uiCurrentAnim = uiAnim;

	uint uiAnimIndex = 0xffffffff;

	stdext::hash_map<uint, uint>::iterator iter = m_AnimMap.find(uiAnim);

	if (iter != m_AnimMap.end())
	{
		uiAnimIndex = iter->second;
	}
	else
	{
		return;
	}

	for (uint ui = 0; ui < m_apModels.size(); ui++)
	{
		// GrannyPlayControlledAnimation is the simplest way to
		// start an animation playing on a model instance.  There
		// are more complicated calls that allow for greater
		// control over how the animation is played, but the
		// purposes of this sample, this is all I need.
		granny_control *pNewControl = GrannyPlayControlledAnimation(0.0f, m_apAnimations[uiAnimIndex], m_apModels[ui]->m_pGrannyInstance);

		if(pNewControl)
		{
			// I want to play this animation ad infinitum, so I
			// set the loop count to the magic value of 0, which
			// means forever.  Any other loop value would play the
			// animation for that many loops and then clamp to the
			// final frame.
			GrannySetControlLoopCount(pNewControl, 0);

			// Since I don't plan to make any further adjustments
			// to this animation, I can just throw away the
			// control handle completely.  However, so I don't
			// leak memory, I have to tell Granny that, once the
			// model(s) that this control affects are freed (which
			// I will do during shutdown), free the control too.
			// Normally Granny won't ever free something you've
			// created unless you tell her too, so this call is
			// basically giving her permission.
			GrannyFreeControlOnceUnused(pNewControl);

			if (m_pCurrentControl)
			{
				GrannySetControlEaseIn(pNewControl, true);
				GrannyEaseControlIn(pNewControl, 0.5f, true);

				GrannySetControlEaseOut(m_pCurrentControl, true);
				GrannyCompleteControlAt(m_pCurrentControl, GrannyEaseControlOut(m_pCurrentControl, 0.5f ));
				m_pCurrentControl = pNewControl;
			}
			else
			{
				m_pCurrentControl = pNewControl;
			}
		}
	}
}

void InitInputElementsFromGrannyData(uint uiNumComponents, granny_data_type_definition *pVertexType, EvoInputElements *m_pInputElements)
{
	uint uiOffset = 0;
	for (uint ui = 0; ui < uiNumComponents; ui++)
	{
		if (stricmp(pVertexType[ui].Name, GrannyVertexPositionName) == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::POSITION, 0, EvoFormat::R32G32B32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexNormalName) == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::NORMAL, 0, EvoFormat::R32G32B32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexTangentName) == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::TANGENT, 0, EvoFormat::R32G32B32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexBinormalName) == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::BINORMAL, 0, EvoFormat::R32G32B32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexBoneWeightsName) == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::BLENDWEIGHT, 0, EvoFormat::R8G8B8A8_UNORM, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexBoneIndicesName) == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::BLENDINDICES, 0, EvoFormat::R8G8B8A8_UINT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexTextureCoordinatesName "0") == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::TEXCOORD, 0, EvoFormat::R32G32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexTextureCoordinatesName "1") == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::TEXCOORD, 1, EvoFormat::R32G32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexTextureCoordinatesName "2") == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::TEXCOORD, 2, EvoFormat::R32G32_FLOAT, 0, uiOffset, false, 0);
		}
		else if (stricmp(pVertexType[ui].Name, GrannyVertexTextureCoordinatesName "3") == 0)
		{
			m_pInputElements->AddElement(EvoInputElementUsage::TEXCOORD, 3, EvoFormat::R32G32_FLOAT, 0, uiOffset, false, 0);
		}

		uiOffset += GrannyGetMemberTypeSize(&pVertexType[ui]);
	}
}

redpajama_set_name: RedPajamaGithub


Daniel Sturridge had waited 2379 days for a Champions League start. And while he made the perfect entrance with a goal, it was the player he replaced in the starting line-up who sealed a deserved but dramatic and last-gasp win.
Roberto Firminio was replaced by Sturridge due to the eye injury he picked up at Spursbut came on for the England ace in the 72nd minute to hit the injury-time winner.
On a night when over £1billion of talent walked out of the Anfield tunnel at Anfield, with Neymar, Kylian Mbappe, Mo Salah and Edinson Cavani among the superstars on show, few would have expected the opening goal to be followed by that famous yet questionable worm celebration.
Equally, no Liverpool fans would not have expected Salah to be a villain as he was directly responsible for PSG scoring an equaliser they did not deserve – before Firmino struck.
When Mbappe levelled in the 83rd minute, it seemed as though they would get an undeserved point.
But Liverpool once again proved beyond doubt that they are stronger than last season.
And will be even better if Salah can avoided giving the ball away when there is no pressure.
Yet the most significant moment of the night for Liverpool came in the 30th minute when Sturridge – whose previous start in the Champions league against Napoli in 2012 – made such an impressive entrance.
James Milner scored the second from the penalty spot and while PSG right-back Thomas Meunier pulled one back before the break, a second half onslaught from the French champions never came.
In fact, despite all their domestic success and all the money spent, PSG – despite winning their opening five Ligue 1 games with 17 goals scored and four conceded – were bang average.
Salah had a goal ruled out after a foul from Sturridge and the England striker then wasted an easier chance before he made way for Firmino with 18 minutes left.
Yet Sturridge milked the applause as he left the pitch and hopefully we will saw more from the 29-year-old who is maybe fortunate to still be on Merseyside under Jurgen Klopp.
He certainly made more of an impression than Neymar who, apart from some nice flashes, was a major disappointment and on this showing, can forget any hopes of winning the Champions League with his current team.
PSG lacked desire and urgency in the second period and equally, this was another terrific result for Liverpool just 115 days after they lost in the final to Real Madrid.
Despite the Parisians' glittering front three, it was their keeper Alphonse Areola who was the busiest as he pushed away efforts from both Virgil van Dijk and James Milner.
Areola has been told that he is PSG's No1 keeper despite the arrival of Gianluigi Buffon, who wold have missed this game anyway for his outburst about Michael Oliver last season.
And he found himself under a lot of pressure as PSG found themselves under siege early on.
It took the visitors a while to show any real life up front and while Neymar hammered the ball at Alisson, fellow striker Cavani could have done better with a rebound.
Sat on the bench, Firmino could not stop smiling and Klopp celebrated wildly as Sturridge delivered a perfectly-timed header to force the ball past Areola in front of the Kop.
Trent Alexander-Arnold's cross was too strong but Robertson's immediate delivery from the left was outstanding and Sturridge got between Thiago and Presnel Kimpembe to score.
Worse was to follow for PSG six minutes layer when Bernat delivered a suicidal challenge on Georginho Wijnaldum when there was no need and it was a certain penalty.
Milner, whose previous nine goals had been scored from the spot-, made it 10 in succession with a confident, well-hit strike into the bottom right-hand corner.
All Liverpool had to see to the final few minutes but a cross from Angel Di Maria came off Robertson's leg and Meunier scored with a difficult-looking, left-footed strike into the near post past a static Alisson.
PSG were lucky as Cavani initially attempted an effort from the cross but missed the ball – yet had clearly been in an offside position.
Liverpool started well in the second half and Salah thought he had score his 30th goal in 30 games at Anfield.
Ref Cakir was certainly slow in giving his decision to rule out the effort but he delivered the right call with Sturridge having kicked Areola in the groin.
Sturridge then made way for Firmino, Sadio Mane fired an effort through Becker's legs but across the goal and Liverpool paid for a moment of being sloppy.
Salah gave the ball away to Julian Draxler, Neymar drove through, Van Dijk did not close him down quick enough and the ball fell for Mbappe who delivered a clinical finish.
Yet in injury time, it was Firmino who struck, turning Marquinhos before firing the winner.


text:
Q: How to sum tuples in a list of tuples? I have the following list for example:
example = [(5.4, 3.2), (2.4, 3.5), (2.4, 4.0), (5.1, 3.6)]

And I'd like to get the sum of each '()' tuple. It means that I'd like to sum 5.4 with 3.2, then 2.4 with 3.5 and so on.
The result should look like this:
First: 8.6
Second: 5.9
Third: 6.4
Fourth: 8.7

I could do it with one pair only, but don't know how to get each sum from the list.
sumexample:: [(Double, Double)] -> [Double]
sumexample [(a, b)] = a + b

A: So you wrote
sumexample :: [(Double, Double)] -> [Double]
sumexample [(a, b)] = [ a + b ]
  --                 ^^^     ^^^     -- (error, corrected)

Ah, great! You've already got all you need to solve it. Almost. The missing part is the appending operator ++, with which a list of any length can be built by appending the singleton lists of its elements:
[  1,     2,     3,    ...  ] ===
  [1] ++ [2] ++ [3] ++ ...

So then sumexampleList should follow the law of
sumexampleList :: [(Double, Double)] -> [Double]
sumexampleList   [a  ,                  b  ,              c  ,  ... ]   ===
sumexampleList ( [a] ++                [b] ++            [c] ++ ...   ) ===
      sumexample [a] ++ sumexample     [b] ++ sumexample [c] ++ ...     ===
      sumexample [a] ++ sumexampleList [b,                c,    ... ]
      --                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   --- right?

Haskell doesn't understand the above as a valid definitional syntax though. But it does understand
[1,   2,  3,  ...] ===
 1 : [2,  3,  ...]

and so we can re-write the above law in the conventional syntax as
sumexampleList (a : bcde) =
   sumexample a ++ sumexampleList bcde

and that is a bona fide recursive function definition in Haskell.
One case is missing though, the one with the empty list, [].
You will need to complete the definition by adding that additional equation.

Having solved this, sumexample :: [(Double, Double)] -> [Double] is bad design: it only works with singletons, but the type is list. So do away with the brackets altogether:
sumexample :: (Double, Double) -> Double
sumexample (a, b) = ....

and amend the recursive definition accordingly.

redpajama_set_name: RedPajamaStackExchange


Little Boy Lake: Little Boy Lake is located 3 1/2 miles south of Longville on Hwy 54. This 2 1/2 mile long lake is one of the most popular lakes in the Longville area. The lake has record Muskie. It also provides anglers with Walleye, Northern Pike, Large Mouth Bass and Small Mouth Bass. A channel links Little Boy with Wabedo Lake.


The company says it removed 32 accounts from Facebook and Instagram because they were involved in "coordinated" behavior and appeared to be fake.
"This kind of behavior is not allowed on Facebook because we don't want people or organizations creating networks of accounts to mislead others about who they are, or what they're doing," the company wrote in a release.
While the pages are still being investigated, Facebook wrote it is reporting what is known currently because of a connection between "bad actors" and protests that are planned in Washington next week.
The pages ran about 150 ads for approximately $11,000 on Facebook and Instagram, paid for in US and Canadian dollars.
The company says it doesn't know who is behind the efforts, but said there are may be connections to Russia. Facebook says it has found some connections between the accounts it removed and the accounts connected to Russia's Internet Research Agency that it removed before and after the 2016 U.S. presidential elections.


While we were in N.Carolina, Grandi arranged for Madigan to get her pictures made at this really neat, kid-friendly portrait studio. The best part of it was that they just snapped pictures of her doing her own thing - something Madigan is great at doing. :) The pictures turned our really cute and my favorite part was that if you ordered a certain amount of pictures, you got the CD with all of the shots on it. So, here are a few of them!
The place also allowed for outfit changes, which was really nice. This is a dress Aunt Kate picked out.
Adorable pictures! I love the last one too!
It's neat how they captured her personality! She's beautiful, Allison!


text:
Emily Viking Puzzle Pepsi Pinball Chaos Faction Guitar Drum Revolution
The Broadway Production of the Producers Hits Audiences Funny Bones
The Producers has been enjoying a nice run on Broadway since it's opening on April 19th 2001 at the St. James Theatre located at 246 West 44th Street. The production is considered an original musical comedy and critics as well as audiences agree the Mel Brooks classic holds up it's end of the laughter which is expected and promised. The show runs for two hours and forty minutes with one intermission.
Based on the Mel Brook's movie, of the same name, which played in 1968 the story tells of a down and out producer who writes the worst screen play in the history of movie script writing and then continues to attempt of conning two old ladies out of two million dollars.
The hilarious Broadway power duo of Nathan Lane and Matthew Broderick team up to play the classic characters of Max Biaystock and accountant Leo Bloom. Both actors received acclaim for their work with the production and the slapstick humor, which is often just plain silly is pulled of with perfection throughout the brilliant show.
The storyline of the show is based in New York around the 1959 time period, in which Max creates the worst screen play ever to be written, this of course was done purposely. Max wants the script to be a failure in order to back out of having to pay his investors, and con everyone out of their money.
The comedy begins right away when you think what could the worst screen play ever written possibly be named? Well, Springtime For Hitler sure seems to have the name for a bad screenplay. What could be worst, or really more funny is how the bill is advertised, as a gay romp through World War II. With all this said it seems doomed from the start, just like Max and Leo expect, but who could ever guess that it would soon become a huge hit.
Now there are very special comedic moments which occur throughout these events, and both Lane and Broderick really play the silly slapstick comedy of Mel Brook's extremely well. The singing and music also adds a nice touch to the humor and story. The story then moves on into the main plot as the two con men are forced to try and take advantage of two older women for the two million dollars they set out to rob from the investors.
The show is perfect for adults who enjoy sill and more slapstick humor. The comedy is not very deep or intellectual humor at all, more of the silly little things which hit your funny bone hard and fast and just makes you laugh. For a light hearted night out on Broadway and some rea good laughs The Producers will most likely provide exactly what is advertises and probably more laughs then you can handle. With 11 Tony's in 2001 including best musical score, best director and best musical you cannot go wrong. Broadway Producer show tickets are selling on average for seventy-five dollars
About the Author: Al is the owner of Broadway Producers Show Tickets A New York entertainment site with news, history reviews and Broadway Producer show tickets.

redpajama_set_name: RedPajamaCommonCrawl


text:
The Flaming Lips trial inflatable bubble shows
American rock band The Flaming Lips have proved that there's no need to wait for the pandemic to bubble over to return to live shows.
Last week, the band performed to some 100 people at The Criterion in their hometown of Oklahoma City, using huge inflatable bubbles to protect themselves and the audience from Covid.
As well as the band members playing from within inflatable bubbles, each audience member was also encased within individual plastic spheres of their own, wearing a face mask and gloves.
https://www.instagram.com/p/CGSil1hp97Z/
The show – which was part concert, part music video shoot – was the first to trial this orb concept which facilitates live music while adhering to social distancing safety guidelines.
The idea was born out of a sketch drawn by The Flaming Lips frontman Wayne Coyne during the early days of the pandemic and has since been used by the band for appearances on The Late Show with Stephen Colbert; The Tonight Show Starring Jimmy Fallon; and NPR's Tiny Desk (Home) Concerts.
The band have previously incorporated orbs into their stage shows.
https://www.instagram.com/p/CF5dxp2pAnC/
Debut Kaleidoscope festival takes place in Ally Pally grounds
Against the backdrop of London's skyline, the first ever festival in the grounds of Alexandra Palace took place this weekend (21 July). Kaleidoscope festival saw music, poetry, comedy, art and theatre descend on the grade II listed building and surrounding park slopes and woodland.
The festival isn't the first to take advantage of a historical spot to attract festivalgoers. Hampton Court Palace Festival, now in its 26th year, celebrated its 2018 edition with a record breaking crowd, and Kenwood House's Heritage Concert Series saw success this year with its first shows since 2013.
On the main stage of Kaleidoscope's inaugural year festivalgoers were treated to performances from The Flaming Lips, Mystery Jets and Beth Orton. Elsewhere, comedy performances were delivered by Katherine Ryan, Mark Watson and Dr. John Cooper Clarke.
"It's been amazing to see so many people of all ages enjoying such a diverse mix of music, theatre, comedy and performing arts"
Guests also had the opportunity to explore the rarely-opened Victorian basements within the palace itself. Inside, an immersive theatre experience paid tribute to Alexandra Palace's role in the creation of television.
Aimed at festivalgoers of all ages, organisers hoped the first edition of the festival would leave people ready for Kaleidoscope instalments for years to come. Speaking about the success of this year's event, Simon Fell, founder of the Kaleidoscope, says: "It's been amazing to see so many people of all ages enjoying such a diverse mix of music, theatre, comedy and performing arts this weekend. And what better place to do so than in one of the most beautiful locations in London.
"Something magical took place on Saturday and we can't wait to welcome people back next year."


Waking up by the beautiful sound of two men singing a well practiced wake-up-song, everyone was immediately in a good mood. After a great breakfast (with cereals!) everyone went into the different groups. Some were exploring the variety in German supermarkets, some were sharing their personal conflicts and looking for signs of hope, others were painting the wood and each other and some were explaining these things to people walking pass.
After lunch most of the rainbow-participants went to one of the public baths nearby, Hillel took this as a challenge and followed the busses by bicycle. Since he couldn't wait to get into the water after this hectic ride, he just wanted to take the next slide and refresh himself and his clothes but got stuck. Because of his trousers it took him a little longer to reach his destination at the end of the slide and everybody was amused. Afterwards people went back into their groups and worked hard until supper.
In the evening, we had a short introduction to the German history and the NS-Regime.
Listening to the sound of some people singing songs and playing the guitar, some people fell asleep outside, protected by the stars up in the sky.


text:
EVER BEEN SNOGGED BY A GHOST WHILST DOING POTTERY?
PATRICK SWAYZE HAD READY BREK THAT MORNING
No? What about pashed by a phantom? Smooched by a Succubus? Still no? Ah, you've never lived.
Maybe that whisper in your ear whilst you're ghost hunting is more than a whisper, maybe it's an amorous attempt to get intimate by an Incubus. Jeez, I don't know, I am just trying to build up this blog post.
"Can ghosts kiss? Well judging by the well known paranormal documentary film GHOST 1990 YES THEY CAN!!"
And even more spooky is that it came 3rd in the list of the best movie kisses of all time beaten only by Jack and Rose's kiss on the front deck of the Titanic and the spaghetti and meatball snogging scene in the Disney classic The Lady and the Tramp.
The tender moment between Kate Winslet and Leonardo DiCaprio's characters takes place seconds after Rose utters the famous line, "I'm flying". The multi-Oscar winner fought off competition from The Lady and the Tramp's meatball scene and the smooch between Sam and Molly in Ghost. While Han Solo and Princess Leia's embrace in Star Wars Episode V: The Empire Strikes Back also featured in the top 50 greatest movie kisses.
The research of 2,000 UK adults was commissioned by TLC to celebrate the launch of its new TV show, Love At First Kiss, which airs on Wednesdays at 9pm from 11 January.
A spokesman for TLC said: "Kisses are such a big part of movies so it's fascinating to see which ones have had the biggest impact. "For many people, their first experience of a 'proper' kiss is likely to have been seeing one on screen. "So perhaps respondents had a sense of nostalgia when it came to voting for their favourites." Pretty Woman's fire escape kiss came fourth, followed by the snog at the end of Dirty Dancing – and Bridget and Mark's kiss in the snow in Bridget Jones's Diary.
NOBODY PUTS BABY IN THE CORNER!!
OH SHIT WRONG FILM!!
Spiderman's upside down smooch came seventh while the rain-soaked embrace between Holly Golightly and Paul Varjak in Breakfast at Tiffany's came eighth. Bella and Edward's first kiss in Twilight also appeared in the top 50, along with the "you had me at hello" moment from Jerry Maguire and the elevator kiss in Romeo + Juliet. The scene where Ron and Hermione's finally kiss in Harry Potter and the Deathly Hallows featured too.
While Rhett Butler and Scarlett O'Hara's embrace in Gone with the Wind after he says the words "you need kissing badly" came ninth. Thirty per cent of Brits said romantic films are their favourite type of movie to watch on a date – however over a quarter said they would feel awkward watching one on a first date. Almost half of respondents think movie kisses are realistic and three in 10 said onscreen romance has influenced how they go about their love life.
A fifth of people reckon watching a film with a date which features a smooch or two, improves their chances of sharing a kiss at the end of the night. Forty six per cent of respondents think it's possible to fall in love from the first kiss, while seven in 10 think first impressions count when comes to kissing. Another kiss in the rain, this time from The Notebook, came eleventh – while the first kiss between Vada and Thomas J in My Girl also appeared in the top 50.
Casablanca's "Kiss me as if it were the last time" embrace, Shrek and Princess Fiona's kiss which turns her into an all-ogre – and Keira Knightley and Andrew Lincoln's snog feature too. Clare Laycock, VP, Head of TLC said: "In Love At First Kiss, participants are invited to kiss fellow contestants without an introduction.
"If they like each other, they can then choose to go on a speed date followed by a proper date – so first impressions really count. "The iconic kisses featured in our survey may well give romantic singletons some inspiration and encouragement. "Many of us will experience a nerve-wracking or exciting first encounter… and perhaps one that isn't quite as perfect as we see in films."
THERE'S SOMETHING QUITE WRONG WITH
THAT PICTURE, DON'T YOU THINK?
Love At First Kiss airs on Wednesdays from 11 January, 9pm on TLC.
TOP 50 MOVIE KISSES:
1. Titanic (kiss on the front deck of the Titanic)
2. Lady and the Tramp (kiss at the restaurant)
3. Ghost (Sam kisses Molly before he passes over)
4. Pretty Woman (on the fire escape)
5. Dirty Dancing (kiss at the end)
6. Bridget Jones's Diary (Bridget kissed Mark in the snow)
7. Spider Man (when Mary Jane kisses Peter Parker upside down on the roof)
8. Breakfast at Tiffany's (kiss in the rain at the end)
9. Gone With the Wind (when Rhett Butler kisses Scarlett O'Hara and says 'You need kissing badly')
10. Star Wars Episode V – The Empire Strikes Back (Han Solo and Princess Leia's kiss)
11. The Notebook (kiss in the rain)
12. An Officer and a Gentleman (kiss between Richard Gere and Debra Winger)
13. Shrek (kiss between Shrek and Princess Fiona which sees her turn into an all-ogre)
14. Harry Potter and the Deathly Hallows (Ron and Hermione finally kiss)
15. Love Actually (Hugh Grant and Martine McCutcheon)
16. Casablanca (Ilsa asks Rick Blaine to 'Kiss me as if it were the last time')
17. Romeo + Juliet (kiss in the elevator)
18. E.T. The Extra-Terrestrial (telepathic link between E.T. and Elliott causes the latter to recreate the classic kissing scene from The Quiet Man (which E.T. is watching at home) in the classroom)
19. It's a Wonderful Life (kiss between George Bailey (James Stewart) and Mary (Donna Reed)
20. Pride and Prejudice (Elizabeth and Darcy kiss at the end)
21. Twilight (Edward and Bella's first kiss in her bedroom)
22. 50 Shades of Grey (Christian and Anna's kiss in the elevator)
23. Raiders of the Lost Ark (with injured Indy not wanting Marion to tend to his wounds, she starts kissing the places that don't hurt – including his lips)
24. Top Gun (Maverick and Charlie love scene)
25. Love Actually (Keira Knightley and Andrew Lincoln)
26. From Here To Eternity (kiss between Milton Warden (Burt Lancaster) and Karen Holmes (Deborah Kerr) on the beach)
27. From Russia With Love (James Bond and Tatiana Romanova's kiss)
28. My Girl (first kiss)
29. The Princess Bride (when Buttercup realised Wesley wasn't dead)
30. Never Been Kissed (kiss on the baseball stadium)
31. Back To The Future (kiss between George McFly and Lorraine Baines at the end of the movie)
32. Rocky (kiss between Rocky Balboa and Adrian Pennino)
33. Cruel Intentions (Kathryn kisses Cecile on the lawn)
34. Princess Diaries (kiss in the garden at the end)
35. Brokeback Mountain (kiss on the mountain)
36. When Harry Met Sally… (Billy Crystal and Meg Ryan's kiss at the end)
37. From Here to Eternity (kiss on the beach)
38. Breakfast Club (when Claire kissed John at in the parking lot)
39. The Goonies (Mikey Walsh (Sean Astin) and Andy Carmichael's (Kerri Green) accidental kiss in the dark)
40. SPECTRE (Daniel Craig and Monica Bellucci's kiss)
41. Jerry Maguire ('You had me at hello' kiss)
42. Indiana Jones and the Last Crusade (Indiana Jones and Alison Doody's kiss)
43. The Quiet Man (kiss in the rain)
44. Amelie (Amelie and Nino Quincampoix exchange playful kisses)
45. The Godfather Part II (kiss of death between Michael and Fredo Corleone)
46. To Catch A Thief (kiss between Conrad Burns (Cary Grant) and Frances Stevens (Grace Kelly))
47. The Fault in Our Stars (first kiss)
48. Atonement (Keira Knightley and James McAvoy's kiss)
49. Clueless (Paul Rudd and Alicia Silverstone's kiss)
50. Lost In Translation (kiss between Bob Harris (Bill Murray) and Charlotte (Scarlett Johansen))
Now That's What I Call Haunted Magazine!
IS DOOFUS DISEASE HITTING THE UK?
Will this be the first and last ever Ghost Hunt at...
HELP US!! Our Facebook page is being kidnapped by ...
S to Z to D - THE ZOMBIE APOCALYPSE: DO THE MATHS ...
FACEBOOK FUNERALS: GO LIVE AFTER DEATH??
now that 2016 has finally buggered off, how DID YO...


Seat measures 15.5 flaps measure 11.5″ bar to bottom and 12.5″ across (#00D short flaps) the front gullet measures 5″-wide A0+1 tree.
2015 Model! The leather is soft and very "grippy" with the upgraded calfskin leather ($800 upgrade). It will give your child a true advantage because they are not slipping and sliding around. The color is a deep reddish brown that looks very pretty on all color ponies but will get a darker brown once oiled a couple more times. Front + back blocks under the flaps (back block has a small worn through area). You can see from the pictures it is in gorgeous well cared for condition. There are no tears, no loose stitching and no cracking. There was a name plate removed. Lovely, very rare type saddle that will not last long!


If vocal Baroque music is intrinsically linked to extraordinary virtuosity, then Cecilia Bartoli's 1999 Vivaldi recording imposed an impossible standard. After a few years, the first CDs of the American mezzo-soprano Vivica Genaux, most of them the one dedicated to arias composed for Farinelli, have proven that the impossible can be conquered, as her virtuosity provoked perplexity due to an unhuman agility. Even so, the technical virtuosity is always accompanied by the musical sense of a great artist and the purpose is not astonishment but, emotion. The program of her recital with Europa Galante and Fabio Biondi in the Romanian Atheneum was dedicated to Antonio Vivaldi's works.
You studied with Virginia Zeani, a great Romanian soprano. What roles did you study together and what is the most important piece of advice that she gave you?
I discovered her, as I do most things in my life, by accident! Back then, I was studying part-time, during summer, with a soprano from Texas, but I was due to return to the University of Rochester, New York, where I was studying Genetics. I was very unhappy. So, my teacher from Texas advised me to go to Indiana University and study with Virginia Zeani, because she taught the belcanto technique and that was what I needed to learn according to her. I was fortunate enough that my parents supported that move, changing from science to music and so I went to the audition. Virginia Zeani took me into her studio and I studied for three years, both with her and with her husband, Nicola Rossi-Lemeni.
I was really young. Virginia Zeani made her debut, I think, when she was 17 with La Traviata and of course she had unbelievable experiences by the time she was that old, while I had been basically taken care of my whole life. It was all completely new to me. I had never seen anybody that elegant, that beautiful, that expressive and sure of herself and she seemed amazing to me; and so foreign from everyone else in my life. She was feminine, in a time where being feminine in the United States was seen as a weakness, which is why women were always trying to be as strong as possible, as masculine as possible. For me that was the first time I saw someone who was 100% feminine but stronger than any person I had ever met in my whole life. She was amazing, an inconceivable role model for me, from whom I learned so much: first from her presence and then from her teaching. I remember she always had a very strong accent when she spoke English and one time she came to the masterclass and said: "You know I know that you make fun of the way I talk, but I make fun of the way you sing!" She had an evil sense of humor and I think there was much to learn from that too, if we think about the years when she was singing… I read a lot of autobiographies from the sopranos of that period: Galina Vishnevskaya, Beverly Sills, Marilyn Horne. I don't think it was an easy lifestyle. Although they earned good money, they had to fight for their position, which is something that we don't have to do as much today. I think that today you have a bigger sense of collegiality and of there being space for everyone, rather than being threatened by somebody else being better than you. I think Virginia Zeani was very strong, beautiful, elegant and tough and I learnt a lot from that – that you can be feminine and strong. That was a great breakthrough!
How many years did you study Genetics?
One and a half, but I didn't like it. It is funny because when I was at Indiana University, there was a fellow who was studying trumpet, but who has now become a Biology professor. We always say we traded off.
At the dawn of your career you performed Rossini with great success and then you headed towards baroque opera. How did that happen? Was it more suited to your temper, sensitivity or voice?
It was another accident. After singing Rossini for three years, people started to ask what else I could do, but I didn't know what to answer. I didn't sing Mozart, I still don't do much Mozart… I don't think it matches my voice. But going back to baroque, I was lucky enough to meet Matthew Epstein, who was at that time, I believe, artistic director of the Lyric Opera of Chicago. He looked at me and he said: "You need to sing Hasse!" but I didn't know who Hasse was! It turned out that Hasse was one of the most famous composers of the 1700, on a par with Handel, Hayden and all of the Greats of that time period… Matthew never told me if he knew that René Jacobs was looking for someone for a Hasse opera or if it was just a complete accident, coincidence or a fortuity, but a month after that conversation, I was invited to sing for René Jacobs at the Staatsoper in Berlin – auditioning for an opera by Hasse! It was one of the two times in my life when I got a job from an audition. René Jacobs hired me on the spot and the next year, when I heard Concerto Köln playing for the first time, I became incredibly emotional, I was feeling something completely unusual. It was the first baroque orchestra I had ever heard in my life and it was like that moment in The Wizard of Oz, when Dorothy opens the door into that beautiful, land full of colour. When I heard them playing, it was like I saw the colours that I had never previously seen and the fact that I was invited to play in that world with them, to be part of that, to experiment with those colours… it was brilliant! I fell in love with the Baroque music immediately, because of the sound, because of the participation of the instruments, but also because of the way it was written for the voice. I have always loved Coloratura, with its spectacular side, full of virtuosity and then also the arias, like the famous Ombra mai fu, as it just seemed to me that they inspired so many emotions and there was so much time to luxuriate in those emotions. It's like being in a jacuzzi and you just let yourself relax and explore every corner of one emotion, of one situation, of one problem, issue, joy, love… Since then, I remained faithful to Baroque opera because it opened a niche for me into its world and of course, because the recording of the Farinelli arias became my business card.
The disc entitled Arias for Farinelli enjoyed a tremendous success worldwide. Some arias were completely unknown, while others were of an incredible (astounding) virtuosity. Whose idea was it to record this disc? Did it belong to René Jacobs, one of the most important and inspired conductors of our times?
It was René Jacobs' idea and I was lucky that I was able to work with him from the start, because I had no idea what I was doing. In the United States, the only Baroque music I had listened to was from England and it was very different from the European kind. The continental style is still, to this day, much more visceral and much freer and much more exploratory. I believe that English Baroque music is purer and not that emotional and has nothing in common with the belcanto voice technique that I use. René Jacobs has always encouraged me and he was able to illustrate the elements of the vocal technique whenever I needed help.
Out of respect for the great former musicians, you created a tribute disc dedicated to the singer Faustina Bordoni, who was born in Venice. What held your attention the most, what inspired and intrigued you about this singer, wife of the great composer Johann Adolph Hasse?
The first one who got me started on Faustina Bordoni was someone called Klaus Muller, a scientist who was in love with music. Both he and his wife had been huge fans of Hasse's music and they had also learned about his wife. So, this one time after singing in Munich, this man approached me at the airport, where I was about to board a flight for Venice, and said: "You sang the concert last night! It was beautiful!" Then he started talking to me about Hasse and Faustina Bordoni and I found it all very interesting. Then, we boarded the plane and discovered we had seats next to each other. The conversation continued and he put me in touch with a musicologist in Dresden, who then took me to the library that has the whole collection of Hasse's operas and then he put me in touch with all the people who are today my sources of information. He was miraculous!
I have never been inspired by other people's recordings, not since my very early years. I used to listen to Marilyn Horne and then people said I sounded like her. I didn't like that… I have an ear that imitates very easily, which is good for languages, but when I'm learning a piece, I try not to listen to other people, whether it's a piece that is well known or not, because I involuntarily grab onto their tempo or their cadenzas. Fortunately, now I have a program on my computer called Sibelius, where I put the manuscript and I can hear the orchestra. Therefore, without any kind of interpretation, just with the dynamics, I can hear the harmonic progressions, the colour inspired by the harmonies and then, when I go into rehearsal, I already have a base.
What is the next disc you will be recording?
I just had the most unbelievable experience! I was invited by Cecilia Bartoli to sing with her in Madonna del Lago and so I had to go back to Rossini. I was so happy, because I don't get that many chances anymore to sing Rossini… We have already recorded at Salzburg Festival, just a couple of weeks ago, and hopefully it will come out in the next year. I've been listening to Cecilia for years and I had met her once briefly, but she was amazing to work with! She is an incredible, energetic and joyful person. The conductor was Gianluca Capuano, with whom I have worked before in Vivaldi, but he was amazing also in Rossini! This experience opened my heart completely!
I also think there should be a recording coming up that I did with the Bach Consort Wien and the conductor Rubén Dubrovsky, which took place during the concert in the Stephansdom last year: a Vivaldi program, including the famous Nisi Dominus. I have a project coming out in the fall, but it's a stage project, even though I would love to be able to record it. It is based on the life of Pauline Viardot, the youngest daughter of Manuel Garcia and the sister of Maria Malibran. It will be a one-woman show but with costumes, lights, projections, a real theatre experience, and I will sing Pauline Viardot's music and also what she composed for her students. She was a fascinating person, she spoke five languages and she translated some texts by Turgheniev and Pushkin.
Apart from all of that, I will sing Farinelli again.
Did you ever have a favorite recording that you couldn't stop listening to over and over again?
I usually listen to every recording over and over again. I fall in love with it, I live in it, I listen to it again and it becomes part of my catalogue… I think the one that I keep going back to, is a fabulous disc with Jessye Norman singing the The Four Last Songs by Richard Strauss. I like it so much! And another one that became part of my psychological cargo is that of the zarzuela arias, a disc recorded by Victoria de los Angeles many years ago.
Which was the most important musical event of your life?
What I consider the most important moment because of everything that followed after, was when I was 13 and wanted to get the lead in the musical My Fair Lady that they were doing in the high school music camp in Alaska. That year I went off on a trip: 5 months in Japan and 5 months in Texas. In Japan, I found by mistake a libretto of My Fair Lady in English. I memorized it in two days and then kept pressuring my mother every day so that she would find me a voice teacher when we got to Texas. I wanted to take voice lessons so I could audition and get the lead. Therefore, she found me this teacher in Texas, who was the first to give me my first opera arias and who taught me the song from My Fair Lady. When I went back, I got the part – my first experience in musical theatre – and that was my turning point. I fell in love with being on stage, with singing, with the feeling I had that time.
Many of your live recordings gave rise to hundreds of comments and controversies on Youtube, regarding comparisons to other musicians. Some ask who performs Armatae face et anguibus from Juditha Triumphans better: Cecilia Bartoli, Karina Gauvin or Vivica Genaux? Is there any real competition between artists or it is sheer collegiality?
From my part, it is sheer collegiality. I sing because I am happy, because I want to sing, and if somebody wants to hear me, that's great! I'm thrilled that I can make someone happy and I have people telling me that my singing has helped them in various ways, maybe gave their day a better start. I am on stage because I want to be there, because I want to express something and I want to have a good time, so there is no competition. The competition is with myself, with how much good time I can have, how well I can do it this time, how much I can express this time.
Are you interested in your fans' comments? Do you have time to read them?
Not really, because I know how I did and I know I'm trying to get better every single day. I know I have to keep on studying and I know that I'm doing this for my art. I'm really happy if an audience has a great time and if someone doesn't like me, that's fine too. I have no animosity towards anybody and I am not available for either the positivity or the negativity, because I'm emanating these myself and that's enough.
You live in Venice. How did you choose this city? Why not Rome or Florence?
I live here now because my husband used to live in a small town outside Venice. It is really funny, because the women in my family have travelled quite extensively. My mother's mother was born in Leipzig, she got married and moved to Mexico. My mother was born in Mexico and she was sent to Switzerland, after the Second World War, to meet a good Swiss man and get married. Instead, she met my father, who was an American expat from the war, and they felt in love. He was also going to study abroad in Switzerland – they married and he got a job in Alaska. I was born in Alaska, I came to study voice here,in Italy and I met a beautiful Italian man… This is the story of my life!


Meet Paul Burns - VP Research & Development at the Database Dept.
Paul is the driving force behind the development of the Database Dept.'s WebONE Integrated Marketing Database, an amazingly effective, highly functional and yet simple solution to the problems of managing large quantities of disparate data and recording varied marketing activities.
Paul's database expertise and focus on marketing began while working for Bond Direct, part of George Patterson Bates in 1988. It expanded when he started the Database Dept. in 1998 and has continued ever since, making Paul one of Australia's leading marketing data management and data quality specialists.
Paul believes that the secret to data quality and accuracy is that "data quality begins at the source". With regards to system development he believes that "less is more" – just because you can capture a specific data element it doesn't mean you should. Instead he believes you must weigh up the value and potential utility of any data element you are capturing against its currency (i.e. how long it will remain valid) and the effort required to maintain it. Paul originated one of the Database Dept.'s key principles – to "Achieve more by doing less".
His favourite saying is "don't boil the ocean" – he believes it's better to have something that's 98% accurate right now than 100% accurate at some indeterminate time in the future.
As well as being an exceptional (if slightly obsessive) system designer Paul is an accomplished guitarist and was a member of Sydney group the Enormous Horns, where he met his fellow director Nigel Mullane.


For 75 years our family has had the honor and privilege of supplying the world's premier cigar producers with fine leaf tobacco. Three generations have devoted their lives to learning the secrets of planting, cultivating, harvesting, curing and grading tobacco and earning the trust and confidence of our valued customers. Today we continue the tradition on our own farms in the Caribbean, South and Central America as well as with select contract farmers. Our leaf is the finest available because we're with it every step of the way. We spend a lot of time on the ground - judging the soil, selecting the seed, walking the fields, visiting the barns and working with our farmers.


text:
Women in Islām – Separating Fact from Fiction
The Fundamentals of Tawḥīd (Islamic Monotheism)
ISIS: Jihād in the Path of Satan
Concerning the Algerian Affair and additional Guidelines on Terrorism and Revolt
Al-ʿAllāmah Muḥammad ibn Ṣāliḥ al-ʿUthaymīn
An important set of questions answered by Imām Ibn al-ʿUthaymīn on the revolt in Algeria and terrorist activity.
Articles, Extremism and Terrorism, Khawārij, Maaz Qureshi, Muḥammad ibn Ṣāliḥ al-ʿUthaymīn, Society & Culture, The Muslim Brotherhood
Sep 15, 2001 | Leave a Comment
Ayyūb al-Sakhtiyānī would call all of the people of innovation: Khawārij, and he would say, "Verily the Khawārij differ in their names, but they are agreed upon the usage of the sword."
Former Member of the Committee of Major Scholars for the Kingdom of Saudi Arabia And a professor at the Qaseem branch of al-Imām Muḥammad Ibn Saud University.
Allāh – the Lord of the Worlds – said,
"And whoever kills a believer intentionally, his recompense is Hell to abide therein, and the wrath and the curse of Allāh are upon him, and a great punishment is prepared for him. "
[Sūrah al-Nisāʾ 4:93]
Shaykh Ibn al-'Uthaymīn– raḥimahullāh advised the Algerians: So my advice to you is that you put down the weapons and to establish peace and to answer what the government calls for from peace and benefit. Thereby the community can reach mutual understanding and rule by the Book and the Sunnah. This is something in which there will be much goodness and avoidance of fitan (trials, tribulations) and fighting. I mean that putting down the weapons and attempting to establish peace is obligatory upon the masses.
When the Prophet (ﷺ) was asked about revolt against the rulers, he said, "No, as long as he prays." So it is not permissible to revolt against him, nor is it permissible to perform takfīr upon him. Whomsoever performs takfīr upon him in this case, then he has started a new issue.
View/Download | 15 pages
Edited: August 23, 2022
Ibn Bāz Concerning the Algerian Affai…
Al-ʿAllāmah ʿAbd al-ʿAzīz ibn ʿAbdull…
Advice for the Confused and Bewildere…
Al-ʿAllāmah Muqbil ibn Hādī al-Wādiʿī
Music and Singing in Light of the Qurʾān and Sunnah by Shaykh @AbuKhadeejahSP (@SalafiPubs). To be available digitally and also in print in Canada @troidorg, USA @GtownMasjid, @phillyccdawah Almost ready إن شاء الله
RT @AbuKhadeejahSP: Women: Consider Polygyny. Would it be better to be one of a few wives instead of being lonely without a life partner?…
RT @AbuKhadeejahSP: In many societies, lewd behaviour, fornication, and adultery have become the norm, while plural Islamic marriages are f…
RT @hikmahpubs: "Do you not see that Allah drives the clouds, then He brings them together, and then He makes them into a mass, from which…
RT @hikmahpubs: Words that resulted in Allah saving Yunus from the belly of the whale: لَّا إِلَٰهَ إِلَّا أَنتَ سُبْحَانَك إِنِّي كُنتُ م…
🆕 Is it Sufficient Alone to Hope for Allāh's Mercy and Forgiveness in the Absence of Regret, Repentance and Refraining from Sin? – Imām Ibn al-Qayyim
Most Popular: Last 30 Days
Imām Muḥammad ibn Ṣāliḥ al…
Do Not Say "If Only" When Dealing with Sadness and Disappointment
Imām ʿAbd al-Raḥmān al-Saʿdī
What Do the Angels Actually Write About Us?
The People of Truth Will Not Be Extinguished
Make Preparations for Death before the Affliction of Sickness
Effects of Evil
When Exactly Should the Father Name the C…


Review: Beating Heart has shared the late Hugh Tracey's archive at the International Library of African Music (ILAM) with contemporary producers and keeping in line with Tracey's vision, all proceeds will be used to assist people in the areas where the music was originally recorded. This time, Warp Records and all round UK electronica legend Luke Vibert gives us the delightful oddball groove that is "Africable", Italian DJ Clap! Clap! Gives us the African polyrhythms via Detroit high-tech soul on "Kulira" while Los Angeles duo With You give us the sublime "No Resistance". Each 1500 albums sold will feed a school of 500 forever! Support a great cause and feed your ears with some wonderful music while you're at it.