text:
Teachers, staff march through city to school…
Teachers, staff march through city to school board meeting
El Rancho Unified School District teachers and staff protest state budget cuts in front of El Rancho High School March 13, 2008. (SGVN/Staff photo by Leo Jarzomb/SWCITY)
March 13, 2008 at 12:00 a.m.
• Photo Gallery: Budget cuts protest
PICO RIVERA – Teachers and staff launched rallies Thursday in support of those receiving layoff notices because of pending state budget cuts.
The demonstration began at Rosemead and Washington boulevards and ended in front of El Rancho High School as the school board meeting began. About 400 people attended, waiving signs, banging on drums and chanting.
"It's all about public awareness," said Laura Rodriguez, the El Rancho Federation of Teachers representative.
Rodriguez, a special education teacher at North Ranchito Elementary School, said more than 100 of her colleagues have received or will receive layoff notices. An additional 100 school staffers also received notices. Four schools are being considered for closure.
The cuts have not been finalized, but would be necessary under Gov. Arnold Schwar- zenegger's recommended budget cuts to rid California of its $16 billion deficit.
At Thursday's meeting, school board members voted to issue the last of the notices but also passed a resolution against the budget cuts.
Board member Vincent Chavez said he supports the staff and teacher rallies, and hopes deep cuts will not have to be made.
"We're all in this boat together," Chavez said. "We're all hurting, as administrators, as board members, as teachers, as classified staff."
Rodriguez said she and other demonstrators attended the meeting to show their interest and involvement in the decisions of the board.
She said El Rancho Unified School District would likely have faced some layoffs this year due to a decline in student population districtwide, but teachers, staff and administrators are all working together to find a way to fund education.
The California Federation of Teachers has suggested reinstating a statewide vehicle license fee, increasing taxes for the top tax brackets, limiting mortgage interest deductions and closing what they called loopholes on luxury boat and plane taxes.
These moves would increase revenues more than enough to cover a $4 billion loss in expected school funding, Rodriguez said.
"With California being like 46th in the nation in school funding, and we've got the sixth largest economy in the world, how do you reconcile those two things?" Rodriguez said.
Michael McCormick is the chapter president for Pupil Transportation Co-op 727, a group within California School Employees Association that represents bus drivers and other workers.
"I live in the area and I pay my taxes," McCormick said. "Where is that money?"
Mayor Ron Beilke also attended the rally, to show support for schools and their staffs, he said.
"Pico Rivera is showing what's important to us and that's our children," Beilke said.
airan.scruby@sgvn.com


Mark Taylor finds out how businesses are adopting Microsoft's Dynamics 365 resource to lever its AI capabilities and drive growth.
The hype and noise around Artificial Intelligence (AI) often makes it difficult to know if advancements are truly revolutionising accounting and auditing, or simply inflating expectations to an impossible degree.
The applications to automate and streamline bookkeeping tasks currently flooding the market are increasingly offering data-driven insights into customer behaviours, ensuring there is little escape from the march of AI in its various forms.
Alongside their ability to simplify routine tasks such as coding accounting entries, the latest cloud-based iterations are designed to further replicate the human element through data-driven tax planning suggestions, intuitive operational reports, and machine-crafted client goals.
AccountingWEB was invited to an event by digital transformation experts Xpedition to learn more about their partnership with Microsoft and how businesses are adopting the latter's Dynamics 365 resource to lever its AI capabilities and drive growth.
Before we go any further it is worth clarifying some buzzwords; AI is a general category where machines are programmed to show characteristics of intelligent behaviour or to "think" like humans. Machine learning is a subset of AI in which a system of algorithms automatically learns and teaches itself with access to data and without strict programming.
Existing technology is boosting the rapid advancement of supervised machine learning, but unsupervised machine learning, where the machine runs itself, is not yet within reach for our industry.
The accountancy sector has been understandably reluctant to proclaim AI a silver bullet in the same way other industries have rushed to adopt it, but anyone longing for the days of individual ledgers for each transaction to return is out of luck.
Last week Microsoft regained its position as the world's most valuable company, surpassing rival Apple. There was an element of "slow and steady wins the race" about the Washington software giants revival.
None of what is provided is particularly new, but because Dynamics 365 plugs into and learns from everything else in the Microsoft universe, such as Office, it has an ubiquity and scale few solutions can match.
The most obvious advantage is firms can use the capabilities in Dynamics 365 to glean immediate insights from all existing Excel and email archives rather than bolting on a third-party vendor to do the same, probably at a greater cost.
The revamped customer relationship technology essentially allows agents to track a project from initial sale to final billing, with AI bots generating smarter opportunity management, project planning, resource management, team collaboration, and customer invoicing.
Professional services experts earn their corn by comprehending the rules and regulations their client is bound by, and giving recommendations in easily digestible formats.
Through machine learning a computer can spot and apply patterns, using its own algorithms based on those patterns, and honing the scenarios based on feedback. However, tax planning decisions and other advice are still best worked out through human reasoning and context.
Without a human observing the input and output of systems, the AI tools within Dynamics 365 and its ilk can capture and present basic system data, but cannot as yet create intelligent response plans of the silver-bullet type.
And to hammer the point home, a recent survey by consultants Accenture found that even with the rise of robo-advisers, 68% of their clients would rather talk to a human adviser, despite their relatively equal performance predicting the market.
It is not the case that overnight an AI accountant or auditor will appear to put everyone out of work, so thoughts turn to how we can use the technology to improve services and make better, more informed decisions.
The industry must consider how machine learning can be leveraged to strengthen and augment the role of auditors and accountants, and how corporate governance must adapt to counteract other risks to a business that machine learning technology presents.
One of the most crucial aspects of any business will be in the future of data governance, which will have to consider both data bias, and compliance issues. These are tasks that cannot be left to IT departments or compliance functions alone, as they do not have the expertise of holistic risk and control that accountants are skilled in managing.
A machine does not know what biased data looks like, but if that is the only data it is exposed to then its crunching will be polluted. Insights gleaned from data can only be effective if that data itself is clean, captured in consistent formats, and effectively managed.
If machine learning is properly applied, accountants can spend less time gathering and sorting data and more time diving in and mining proper insights from it, at a much faster pace.
This is what Dynamics 365 is driving at, and SMEs will have a decision to make on how far they want to jump with regard to licenses; some audience members were quick to point out there is such a thing as too much information.
For all its upsides, the prevalence of AI and its growing use in accountancy makes it easier to fall into the trap of choosing a technology in search of a problem, especially when under pressure. It's crucial to consider first the business and use case that will drive the most benefit, and then identify the right technology to solve that problem.
Microsoft is of course betting organizations will want to go beyond automation to further understand customer needs and push more into the sphere of relationship mapping.
Microsoft and consultants McKinsey have both billed data the new oil. Data management is becoming the lifeblood of modern business, yet a heady mix of denial, negligence and ignorance is creating considerable challenges across the sector.
Xpedition sought to dispel fears over GDPR violations and was at pains to point out how Dynamics 365 has built in privacy-by-design and privacy-by-default methodologies to help business comply; it is two years since Dynamics 365 was first launched and a lot has changed in that time in regard to ethical use of data.
Microsoft Dynamics 365 attempts to avoid the creation of silos, where a patchwork of different data capture solutions leads to an environment that is virtually impossible to unravel. Although they have been around in IT for some time, the concept and importance of data lakes and warehouses is being rapidly introduced to the accountancy profession.
The message is fairly simple; before you can run behavioural analytics over data and understand where a client is going wrong, firms need to ensure the data they are analysing is all present and correct, which for some, particularly those who went all in on Big Data analytics before the market matured, has proved difficult.
Tax software and bookkeeping are undergoing a period of disruption not seen for decades as technology such as that offered by Dynamics 365 automates many of the processes always considered manual. AI is powering this move to automation by making everything more intuitive and efficient, and is now spreading basic bookkeeping to other accounting functions, such as audit work papers.
The next step may be lowering fees related to technical aspects of accounting and tax preparation as more solutions become available, igniting competition, but also putting some firms at risk of extinction if they don't keep up.
The future looks bright for the sector, and with increasingly complex tax laws and geopolitical shocks not showing any sign of abating the accountants of tomorrow are well placed to tap into AI and augment their skills to help guide clients through ever choppier waters.


text:
South African to lead regional port association
By Philip Mwakio | July 30th 2015 at 00:00:00 GMT +0300
New PMAESA Secretary General Nozipho Mdawe.
MOMBASA: The Port Management Association for Eastern and Southern Africa (PMAESA) will get its first female secretary general following the appointment of South Africa's Nozipho Mdawe.
Ms Mdawe will lead the Mombasa-based secretariat starting July this year. She was appointed during a special council meeting held in Windhoek Namibia on May 9th, 2015.
According to PMAESA e-news letter, Ms Nozipho takes over from Franklin Mziray of Tanzania, who has held the position since March 2013 in an acting capacity following the departure of Jerome Ntibarekerwa, from Burundi, in 2012.
"She comes to PMAESA with a wealth of experience from Transnet, South Africa's giant freight logistic chain Transnet Freight Rail (TFR)," reads the letter in part.
Prior to her appointment, Mdawe was the General Manager for the Mineral Mining and Chrome Business Unit at TFR.
1 Ports conference planned for Dar es Salaam cancelled
2 Regional group launches fresh war on piracy in the Gulf of Aden
She had served in Operations and Human Resource over many years in various senior management positions, including as the Business Unit Executive at Transnet Port terminals, where she got the Leadership Award for the transformation of two diverse terminals.
She was promoted to the position of General Manager for the Mineral Mining and Chrome Business Unit in March 2012, where she was tasked with starting and leading a new business unit.
DECORATED MANAGER
Some of her achievements in the unit include bagging the Chief Executive Award in 2013 for efficiency improvement through the successful implementation of cost containment initiatives.
Mdawe is credited with piloting the Transnet Value Chain Co-ordinator concept in 2013, which was subsequently adopted by the Transnet Group for a number of key corridors.
She will be the eighth PMAESA Secretary General since the association's inception in 1973.
The new secretary general is a doctoral student at South Africa's Gordon Institute of Business Science.
She holds an MBA (2004) from the same institution and has since done courses on Global Executive Development Program; Advanced Strategic Management Program IRSMI Management Development Program at the University of France between 2008 and 2009 and a course in Finance for Non-Finance Program from Witwatersrand Business School in 2007.
She is described as a 'dynamically applicable management professional' with a distinctive ability to customise and personalise service delivery.
"She utilises logic to identify various strengths and weaknesses of the alternative solutions, conclusions or approaches to continuous business challenges," says the letter.
Mdawe has previously been involved in developing freight transport operational strategy, improved efficiency and minimising costs.
Port Management Association for Eastern and Southern Africa PMAESA Nozipho Mdawe
Kenya's Mzee Ojwang' evokes laughter till final day
Ports conference planned for Dar es Salaam cancelled
Regional group launches fresh war on piracy in the Gulf of Aden
Police arrest woman for not taking children to school
By Renson Mnyamwezi
19 aspirants seek to oust dock workers union boss
By Patrick Beja
Police in Nairobi rescue suspected robbers from angry mob
By Mireri Junior
Al Shabaab still major threat to Kenya, says US General
By Weldon Kipkemoi
Police probe death of trader in girlfriend's house
Which way Coast?
By Benard Sanga

redpajama_set_name: RedPajamaCommonCrawl


text:
branding/identity
handcrafting
Universo Chatarra: The Scrap Universe of Alejandro Burdisio
Argentinian artist Alejandro Burdisio (Burda) presents us with a melancholy future that does not forget the past.
Interview by:
Marcelo Guidoli
Artworks by:
Alejandro Burdisio
Argentinian artist Alejandro Burdisio (Burda) (b. 1963) presents us with a melancholy future that does not forget the past. After studying architecture and sharpening his pencils as a draftsman, Burdisio has made a career for himself as a concept artist. In his free time, Burdisio creates a digital illustration world with heavy political undertones, defined by the architectural and automotive iconography of a particular period in Argentinian history—what he calls Universo Chatarra. It is this body of work that I set out to ask the artist about.
Marcelo Guidoli: Did you study illustration? Do you have a formal artistic education?
Burda: I've been drawing since forever. I'm an only child and remember that when I was five or six my mom used to take me with her whenever she had to run errands, so I always found a corner to sit and draw in my little sketchbook until she was done. I drew all the time, although I went through a typical teenage "rebellious" period in which I didn't touch a pencil. When it comes to drawing, my formal education started right after I served in the army; I started taking painting classes and enrolled in a graphic design course. I had to choose between that path and architecture. I chose architecture. That's when I truly started learning about perspective, to understand space, to acknowledge my surroundings and to "read" the city.
I began to fine tune my observational skills, to collect details and look upwards, where I really could appreciate the city as a whole. When most people walk, their vision is limited to the horizon line; they seldom look up. Up there I find details like statues carrying the weight of the facades, gargoyles, domes, etc. All of this contributes to the content that informs my illustration work. It's wonderful to be able to appreciate history as told by an old building. You just have to look up.
MG: Besides all the visual details that you collect by "seeing" the city, how do you inform yourself for your illustrations?
AB: At the studio, I have a huge collection of magazines, books, and encyclopedias, which I complement by using Google. I don't use Pinterest to promote my work, but I do follow people whose work interests me; I also use that platform to collect and organize data concerning cars, architecture, and period wardrobes, etc. Although drawing techniques are important, you cannot communicate anything if the content isn't relevant. I always tell my students to be aware of their surroundings, not just what they see on the surface, but also the reigning economic and sociopolitical connotations. It's important to understand the world we live in.
MG: Somehow Universo Chatarra is a political statement. You're envisioning a technologically advanced, yet quite pessimistic future.
AB: There's always an emotional or sociopolitical load. Many people think I'm a staunch Peronist, because I use plenty of Peronist political vocabulary, but that's simply because that's the only party that shaped the urban landscape—as it had its own architectural style. I don't identify with any specific political party.
I don't have an optimistic view of what technology can do for us, as human behavior leaves much to be desired. I include a lot of corrugated roofing in my work, which is a symbol of poverty all over Latin America. Many folks from countries like Pakistan, India, and Turkey empathize with my illustrations; they certainly understand the meaning of corrugated roofing, perhaps because poverty is more explicit in the developing world. An American may see those roof panels as quaint or colorful, but I believe they may not read it as a symbol.
With Universo Chatarra I didn't invent anything. I simply combine things that are already there.
MG: Do you have any interest in taking Universo Chatarra to the realm of 3D? Or in compiling a book?
AB: I'm very interested in extending my universe to the 3D world but it's quite a challenge from Córdoba, where I live.
There's a plethora of very talented sculptors that can masterfully interpret my work, but prototyping is quite expensive here in Argentina, plus … I'm very busy and it's hard to find the time.
The idea of doing a book is out there, but so far I only have thirty-three illustrations, and I want to reach my goal of seventy images before considering it. I'm working on it everyday.
MG: Were you more influenced by comics or by films?
AB: Comics were my first love. I only discovered film as a teenager. My biggest comic influence was Juan Giménez's "As de Pique," the saga of a B-17 bomber during WWII. For people my age, that war constitutes a strong visual iconography, one that has fed many illustrators.
Another big influence from Argentina's golden era of comics were the Editorial Columba adventure magazines like Fantasía, El Tony, and D'Artagnan. I also used to love Totemmagazine from Spain.
In terms of film, the movie Alien made quite an impression on me. I was fourteen at the time I saw it, and, before then, space terror movies weren't what they are now. H.R. Giger, with all his darkness, came into the picture and created a new brand of storytelling. There was also Blade Runner, with all that great work from Syd Mead.
MG: Who are your heroes?
AB: There are plenty of talented artists that I genuinely admire. In the Concept Art field, I am a big fan of Sergey Kolesov, he's mega-talented. In general I like how Russian illustrators paint. I also follow Craig Mullings and Fen Zhu. There are also two artists I've been into from the very beginning, Frank Frazetta and Moebius.
From Argentina, Alberto Breccia and Juan Giménez are—without a doubt—the most inspirational for me.
MG: Do you know Ian McQue's work?
AB: Of course! He's a great talent. Many people get us mixed up because we do something similar, but not quite the same. My work is defined by the folklore of a very specific place, while his work is more neutral in that sense. In my illustrations you can see old logos from now-defunct companies from the 1940s and 50s, as well as a political subtext that's exclusive to my country. From the vehicles I draw, you can easily pinpoint the exact moment they were made and by whom, among other things. There are many historical layers in all of that, as well as a dose of humor.
MG: What piece of advice do you have for someone who's just beginning in the field?
AB: The first thing is to make sure you're passionate about what you do. Without passion it's all quite difficult, because that's the dynamo one needs to grow and evolve as an artist. You need to tend to your day job, of course, but it's important to leave space for your personal artistic exploration. Innate talent helps, but it's not enough; wasting it is a crime.
MG: Could you talk about your process? When I met you I was amazed at the fact that you used one only one Photoshop layer.
AB: That's right, that's how I worked for a long time—but now I use between five and seven layers; I don't use many, because I like to correct things with the same brush. I am always downloading new brushes, and I also create my own, but, at the end of the day, I end up using the same two brushes.
A few years ago I significantly changed the way I work. I felt my work was stiff, and I decided to suppress line work as much as possible. I usually start by creating background color stains; then I create a color palette and then work with the geometry of color, light, and shadow. I don't outline anything. I sculpt color as I go along. With a couple of brushstrokes I can now achieve what used to take me twenty or so. My stylus' pressure sensitivity is purposely turned off. I feel like a painter who happens to use Photoshop as his main tool.
MG: Is there anything that's particularly hard for you to draw?
AB: There are people who struggle with perspective; my weak spot is drawing feet and shoes.
MG: I find that fascinating. You mentioned your use of Pinterest already. I see you don't use Instagram. What's your take on social media?
AB: Instagram is designed to be used from your phone, and I literally pay no attention to my mobile. I do, however, use Facebook quite a lot; I consider it a pretty democratic platform. It's a great way to connect with others, but I also see a lot of violence, for it's very common to see people slandering talented artists—I recently encountered someone badmouthing Juan Giménez without really knowing what he was talking about. Umberto Eco said it beautifully, "Social networks made it possible for human stupidity to be everywhere."
MG: Do you have groupies?
AB: I have a lot of followers, but I'm too old to have groupies [laughs]. My work always incorporates elements that create empathy with people, humor, a nod to the grotesque—which are accents that help us to connect with others. I try to be patient and receptive with those who come to me with questions or affection; I always share my process and never keep any secrets about what I do.
MG: Thank you so much. This has been really interesting.
AB: You're welcome.
© 2021 - visualounge.com


Looking for Grace is about space, quiet and mystery, about what's said and unsaid, revealed and concealed, a measured embrace of the bleak and the comic.
Looking for Grace is a film of surprising twists and revelations, but it's also a movie that withholds things. It is a work made up of a series of quiet discoveries – some of them involve understanding what it is we cannot know, or coming to terms with what remains mysterious about those close to us.
"It's one of the things that drives it in the first place," says writer-director Sue Brooks (Japanese Story, Road To Nhill), "the idea that you never quite [get] the full picture of people's lives." For that reason, she's opted for a slightly fractured narrative, despite the story's apparent simplicity – significance emerges out of order and unpredictability, bleakness and comedy co-exist in ways you don't expect.
Odessa Young in Looking for Grace.
Looking for Grace is the tale of Grace (Odessa Young) a teenage girl who goes missing in rural Western Australia, and of her anxious parents, Denise and Dan (Radha Mitchell and Richard Roxburgh) who go in search of her. The viewer might expect that the quest will take some time, but it is resolved sooner that you would expect; there are other puzzles that we will be faced with along the way. Yet, in the midst of anxiety and absurdity there's something restrained about the film's approach. Brooks likes movies that have the confidence to be quiet. "Film is one of those great places where we can have a moment of meditation," she says. In a contemporary world of distractions – "and I'm one of the most easily distracted people you could ever meet" she adds – "I love the fact that when you go into a cinema, you can watch a story unfold in its own way. I love the idea of just sitting there with people, with a landscape, there in the moment."
There are two main locations, one external, one interior: the expansive landscape, and the tightly wound, neat home that Denise has constructed for herself and her family. Both are closely connected to the people that the film portrays. "I wanted characters you love and feel attached to, that you would feel warm about their haplessness. But at the same time I was interested in the aloneness of life, as opposed to loneliness. And we looked for that in images, not to underline it, but to feel it, as well as telling the story.
Going out into the wheatbelt in search of locations, she says, "we would have moments of grace ourselves". The crew bent over backwards during the shoot, so that the timing worked out, and they could film in what she calls an "honest" way. "So that we can say, "This is what the light looks that at this time of day. It has an effect, and people get it, I think."
As well as the sadness of disconnection that is part of Dan and Denise's strained relationship, there are moments of hilarity and deft comedy. "They are both very funny actors," Brooks says, "and the material was there for them to play with. They added so much to it in the way they looked at each other and sat in the scenes together. It's the space between them, I think, that's really interesting." This is true of Mitchell and Roxburgh, she says, and also of Roxburgh and Terry Norris, who plays a private detective hired to help the parents in their quest. "That's why I love those big wide shots, where you feel as if you're just watching them, rather than being told all the time where to go with it."
Similarly, the comic elements do not lock down or characterise, particularly when it comes to the figure of Denise: there's a space around her, and an intriguing element of self-awareness, even at the most unlikely moments. "There's something about what Radha's done with the character that you can't quite nail, and I love that," Brooks says. When they were in in the early stages, of the film, "When she was asking me the routine questions about Denise that an actor might ask a director, I'd say, I don't really know, let's go in there and play." So, with Denise, "she put stuff in, as if she has another world that I can't quite touch: there's something going on with her all the time."
At various stages, Brooks says, she got a certain amount of pressure to fill in more gaps or expand some characters. "We knew we were stepping out of the box a bit, of the way people think films should be made these days." She's not criticising film agencies, she says, just noting that they have become risk-averse. "If they know how a film should work, they want to steer you towards that. Eventually there were people who knew and loved it for what it was."


What consolidating loans services you decide to utilize will depend heavily on different kinds of debts you've gotten yourself into, and the degree of credit card debts you've got in total. If you decide to credit relief or take out any bad credit loan whenever you don't have an income, you must be quite careful. Debt consolidation; 108 Mile Ranch is an important issue for a great deal of 108 Mile Ranch people nowadays. British Columbia debts that may be forgiven include credit cards, 108 Mile Ranch medical accounts, judgments, even some home mortgages in 108 Mile Ranch British Columbia should they exceed the worth of your 108 Mile Ranch house! With these kinds of card consolidation loans, you combine all your bills, which makes it easier because you simply must make a single consolidation loans payment monthly. Another wonderful means to escape from debts faster is to make added income. On your debts spreadsheet, be certain to update it every 108 Mile Ranch payday (or however frequently you pay debts) so you can realize your reduction debts amount.
You should have a minumum of one consolidating loans loan which is not yet consolidated to qualify for a new credit card relief loan. Personal loans aren't qualified for consolidation loans. Unlike mortgages, unsecured credit card consolidation loans aren't backed by collateral like your 108 Mile Ranch property. It is possible to add new eligible student loans to a present credit consolidation loan for as much as 180 days after your initial consolidation loans date.
Like every consolidating loans loan, you've got to put in an application for a relief loans loan and become approved by the lending debt relief loans company. Debt relief loans provides borrowers the possiblity to simplify their debts payments and lower the quantity of money that they must pay monthly, which is precisely why so many unemployed men and women look to them as fair solutions. A credit consolidating loans loan is merely a particular sort of 108 Mile Ranch loan. As you might believe that you have gotten a relief loans loan since you are making a single monthly credit consolidating loans payment, this isn't a relief loans loan.
When the relief loans lender has a judgment, it must figure out a means to collect the debts. Lenders should know that you are able to repay the credit consolidating loans loan, and should they grant you a consolidating loans loan while you're unemployed, you're not likely to get competitive consolidating loans rates of interest or terms. This might or might not be a bright move in 108 Mile Ranch British Columbia since there are a whole lot of debt relief loans lenders that could easily consolidate your credit cards without a lot of difficulty in 108 Mile Ranch.
Bankruptcy will destroy your 108 Mile Ranch credit, but it's possible to recover. Chapter 7 Bankruptcy in 108 Mile Ranch BC forgives some or all your credit card debts so that you can begin fresh. In reality, a Chapter 13 bankruptcy in 108 Mile Ranch was made to help save assets like your 108 Mile Ranch home or car if you're facing foreclosure or repossession in 108 Mile Ranch British Columbia. It is not a liquidation bankruptcy, and your 108 Mile Ranch house and car are not in danger of being taken in 108 Mile Ranch BC by the court to satisfy your debts.
As it is such a huge relief loans company it also has a lot of difficulties coming up each day that they must solve in 108 Mile Ranch within few days to meet the customer. The consolidating loans organization knows that if they need to satisfy the 108 Mile Ranch customers they need to address their difficulties and grievances first. There are financial companies offering unsecured debt relief loans loans at sky-high interest prices in 108 Mile Ranch British Columbia.
Once you've discovered a credit consolidating loans agency which you feel is reputable and worth doing business in 108 Mile Ranch with then it's only a matter of finding out and picking the types of 108 Mile Ranch services that could help you receive relief from your credit cards. Debt relief loans agencies might be worthwhile choice to explore in 108 Mile Ranch British Columbia as long because you can research the things in 108 Mile Ranch that they tell you to do for yourself mundane, as many situations a specific agency may offer you a top-notch recommendation that's only intended to provide their 108 Mile Ranch partners with a chance to earn money off of the business it's possible to supply them. A relief loans agency can supply you with a lot of different kinds of 108 Mile Ranch services that may help provide you with a few relief from your bills, and there essentially three sorts of services that every relief loans agency might or might not have the ability to supply you in 108 Mile Ranch British Columbia.
When you choose a face-to-face in 108 Mile Ranch, you will probably be advised about the 108 Mile Ranch options mentioned previously. When working with a financial consultant or debt counsellor 108 Mile Ranch you'll be able to determine the most suitable debt consolidation; 108 Mile Ranch option and obtain expert guidance to guarantee the very best 108 Mile Ranch outcome. An alternative is for the credit consolidating loans lender to acquire a court order permitting the sheriff to go to your house and take any money he finds there up to the quantity of the 108 Mile Ranch judgment. Understand Your Basic credit cards Options Before you seek a good relief loans agency, it will help to understand your alternatives in 108 Mile Ranch British Columbia.


EXCLUSIVE AT MRPORTER.COM. Even among dapper-looking gents, like at his legendary Pitti Uomo dinners, Mr Brunello Cucinelli is still the best-dressed guy in the room. His secret is blazers like this 'Alessio' one. Named for the brand's head of men's style, it's tailored from a vintage-inspired houndstooth wool and cashmere-blend and partially lined through the shoulders. The little touches - functioning cuffs, a ticket pocket and sharp peak lapels - are proof of the designer's expert hand. Shown here with Brunello Cucinelli shirt, Brunello Cucinelli jeans, Brunello Cucinelli coat, Brunello Cucinelli boots, Brunello Cucinelli socks.
Copyright © 2019 www.nicholscanyonco-op.com. All Rights Reserved.


text:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <artifactId>cxfatwork-rs-j2ee</artifactId>
        <groupId>name.marmac.tutorials</groupId>
        <version>1.0.1444.BUILD-SNAPSHOT</version>
    </parent>

    <artifactId>cxfatwork-rs-j2ee-dal-impl-neo4j</artifactId>
    <packaging>jar</packaging>

        <name>CXF @ WORK :: CXF-RS J2EE EXAMPLES :: DAL IMPL :: NEO4J</name>
        <description>This module implement the Interfaces for CRUD DAL Service towards a NEO4J GraphDb</description>
        <url>${project.artifactId}</url>

        <build>
            <finalName>${project.artifactId}-${project.version}</finalName>

            <filters>
                <filter>profiles/${build.profile.id}/config.properties</filter>
            </filters>

            <resources>
                <resource>
                    <directory>${project.basedir}/src/main/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                      <include>**/*</include>
                    </includes>
                </resource>
            </resources>

            <testResources>
                <testResource>
                    <directory>${project.basedir}/src/test/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                      <include>**/*</include>
                    </includes>
                </testResource>
                <testResource>
                    <directory>${project.basedir}/src/integration-test/resources</directory>
                    <filtering>true</filtering>
                    <includes>
                      <include>**/*</include>
                    </includes>
                </testResource>
            </testResources>

            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>${maven-compiler-plugin.version}</version>
                    <configuration>
                        <source>${source.java.compliancy.version}</source>
                        <target>${target.java.compliancy.version}</target>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>build-helper-maven-plugin</artifactId>
                    <version>1.7</version>
                    <executions>
                        <!-- States that the plugin's add-test-source goal is executed at generate-test-sources phase. -->
                        <execution>
                            <id>add-integration-test-sources</id>
                            <phase>generate-test-sources</phase>
                            <goals>
                                <goal>add-test-source</goal>
                            </goals>
                            <configuration>
                                <!-- Configures the source directory of integration tests. -->
                                <sources>
                                    <source>src/integration-test/java</source>
                                </sources>

                            </configuration>
                        </execution>
                        <execution>
                            <id>add-integration-test-resources</id>
                            <phase>generate-test-resources</phase>
                            <goals>
                                <goal>add-test-resource</goal>
                            </goals>
                            <configuration>
                                <resources>
                                    <resource>
                                        <directory>src/integration-test/resources</directory>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <!-- Skips unit tests if the value of skip.unit.tests property is true -->
                        <skipTests>${skip.unit.tests}</skipTests>
                        <!-- Excludes integration tests when unit tests are run. ß-->
                        <excludes>
                            <exclude>**/IT*.java</exclude>
                        </excludes>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>${maven-failsafe-plugin.version}</version>
                    <executions>
                        <!-- States that both integration-test and verify goals of the Failsafe Maven plugin are executed. -->
                        <execution>
                            <id>integration-tests</id>
                            <goals>
                                <goal>integration-test</goal>
                                <goal>verify</goal>
                            </goals>
                            <configuration>
                                <!-- Skips integration tests if the value of skip.integration.tests property is true -->
                                <skipTests>${skip.integration.tests}</skipTests>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>

    <dependencies>
        <dependency>
            <groupId>org.neo4j</groupId>
            <artifactId>neo4j</artifactId>
            <version>2.1.6</version>
        </dependency>
    </dependencies>

</project>

redpajama_set_name: RedPajamaGithub


Grills are a hot item.
It was so hot the other day that even the mosquitoes were dropping like flies.
Sitting in the sun last summer a lot of people became well-red.
I needed a raise in my allowance. Mowing the grass all summer just wasn't cutting it.
Some people say I'm addicted to summersaults, but that's just how I roll.


text:
La St Paul's Suite (Op. 29, No. 2) originellement intitulée Suite en Do est une œuvre pour orchestre à cordes de Gustav Holst. Cette suite a été composée en 1912 mais à cause de révisions elle n'a été publiée qu'en 1922. Elle tire son nom de la St Paul's Girls' School où Holst a été directeur musical de 1905 à 1934. Il l'a composé en remerciement à l'école qui lui avait construit un studio d'enregistrement insonorisé.

Holst a composé de nombreuses pièces pour ses élèves de Saint Paul mais cette suite est la plus connue

Structure
La suite comporte quatre mouvements
 I. Jig : Vivace (alternance entre 6/8 et 9/8)
 II. Ostinato : Presto
 III. Intermezzo : Andante con moto (titrée Dance sur le manuscript)
 IV. Finale (The Dargason): Allegro (arrangement de Fantasia on the Dargason tiré de sa )

Elle est composée pour cordes mais Holst a ajouté des parties pour vents pour que plus d'étudiants de St. Paul'' puissent la jouer.

Notes et références

Voir aussi

 Liste des œuvres de Gustav Holst

Œuvre de Gustav Holst
Œuvre en do majeur

redpajama_set_name: RedPajamaWikipedia


The Dual Brush Grill & Pizza Stone Scrubber has simple clean lines with no creases. It fits comfortably in your hand making it easy to use when you clean your cooking grid and pizza stone.
Heavy duty, stainless steel mesh scrubber pads outperform wire brushes – with no bristles to come loose.


The theme of health in Nietzsche's thought.
Dept. of Philosophy. Paper copy at Leddy Library: Theses & Major Papers - Basement, West Bldg. / Call Number: Thesis1986 .L477. Source: Masters Abstracts International, Volume: 40-07, page: . Thesis (M.A.)--University of Windsor (Canada), 1986.
Letteri, Mark Robert, "The theme of health in Nietzsche's thought." (1986). Electronic Theses and Dissertations. 4706.


Verdigris Garden Pedestal - TOP 10 Results for Price Compare - Verdigris Garden Pedestal Information for April 18, 2019.
Based on historical column design, this pedestal is a perfect platform to showcase a sundial in the garden. 25" height. Cast aluminum with copper and light verdigris patina finish. Designed for all Rome sundials (except armillary sundials).This pedestal is designed for Rome sundials and does not fit sundials from other manufacturers.
Don't satisfied with search results? Try to more related search from users who also looking for Verdigris Garden Pedestal: Tiger Tiger Vintage, Pink Champagne Gift, Product Flight, Slayer Bodysuit, Silver Wave Counter Mat.
Verdigris Garden Pedestal - Video Review.


text:
/*	$NetBSD: omapip.h,v 1.1.1.3 2014/07/12 11:57:57 spz Exp $	*/
/* omapip.h

   Definitions for the object management API and protocol... */

/*
 * Copyright (c) 2009,2013-2014 by Internet Systems Consortium, Inc. ("ISC")
 * Copyright (c) 2004,2007 by Internet Systems Consortium, Inc. ("ISC")
 * Copyright (c) 1996-2003 by Internet Software Consortium
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 *   Internet Systems Consortium, Inc.
 *   950 Charter Street
 *   Redwood City, CA 94063
 *   <info@isc.org>
 *   https://www.isc.org/
 *
 */

#ifndef _OMAPIP_H_
#define _OMAPIP_H_
#include "result.h"
#include <stdarg.h>

#include <dns/tsec.h>

typedef unsigned int omapi_handle_t;

struct __omapi_object;
typedef struct __omapi_object omapi_object_t;

typedef enum {
	omapi_datatype_int,
	omapi_datatype_string,
	omapi_datatype_data,
	omapi_datatype_object
} omapi_datatype_t;

typedef struct {
	int refcnt;
	omapi_datatype_t type;
	union {
		struct {
			unsigned len;
#define OMAPI_TYPED_DATA_NOBUFFER_LEN (sizeof (int) + \
				       sizeof (omapi_datatype_t) + \
				       sizeof (int))
			unsigned char value [1];
		} buffer;
#define OMAPI_TYPED_DATA_OBJECT_LEN (sizeof (int) + \
				     sizeof (omapi_datatype_t) + \
				     sizeof (omapi_object_t *))
		omapi_object_t *object;
#define OMAPI_TYPED_DATA_REF_LEN (sizeof (int) + \
				  sizeof (omapi_datatype_t) + \
				  3 * sizeof (void *))
		struct {
			void *ptr;
			isc_result_t (*reference) (void *,
						   void *, const char *, int);
			isc_result_t (*dereference) (void *,
						     const char *, int);
		} ref;
#define OMAPI_TYPED_DATA_INT_LEN (sizeof (int) + \
				  sizeof (omapi_datatype_t) + \
				  sizeof (int))
		int integer;
	} u;
} omapi_typed_data_t;

typedef struct {
	int refcnt;
	unsigned len;
#define OMAPI_DATA_STRING_EMPTY_SIZE (2 * sizeof (int))
	unsigned char value [1];
} omapi_data_string_t;

typedef struct {
	int refcnt;
	omapi_data_string_t *name;
	omapi_typed_data_t *value;
} omapi_value_t;

typedef struct __omapi_object_type_t {
	const char *name;
	struct __omapi_object_type_t *next;

	isc_result_t (*set_value) (omapi_object_t *, omapi_object_t *,
				   omapi_data_string_t *,
				   omapi_typed_data_t *);
	isc_result_t (*get_value) (omapi_object_t *,
				   omapi_object_t *,
				   omapi_data_string_t *, omapi_value_t **);
	isc_result_t (*destroy) (omapi_object_t *, const char *, int);
	isc_result_t (*signal_handler) (omapi_object_t *,
					const char *, va_list);
	isc_result_t (*stuff_values) (omapi_object_t *,
				      omapi_object_t *, omapi_object_t *);
	isc_result_t (*lookup) (omapi_object_t **, omapi_object_t *,
				omapi_object_t *);
	isc_result_t (*create) (omapi_object_t **, omapi_object_t *);
	isc_result_t (*remove) (omapi_object_t *, omapi_object_t *);
	isc_result_t (*freer) (omapi_object_t *, const char *, int);
	isc_result_t (*allocator) (omapi_object_t **, const char *, int);
	isc_result_t (*sizer) (size_t);
	size_t size;
	int rc_flag;
	isc_result_t (*initialize) (omapi_object_t *, const char *, int);
} omapi_object_type_t;

#define OMAPI_OBJECT_PREAMBLE \
	omapi_object_type_t *type; \
	int refcnt; \
	omapi_handle_t handle; \
	omapi_object_t *outer, *inner

/* The omapi handle structure. */
struct __omapi_object {
	OMAPI_OBJECT_PREAMBLE;
};

/* The port on which applications should listen for OMAPI connections. */
#define OMAPI_PROTOCOL_PORT	7911

typedef struct {
	unsigned addrtype;
	unsigned addrlen;
	unsigned char address [16];
	unsigned port;
} omapi_addr_t;

typedef struct {
	int refcnt;
	unsigned count;
	omapi_addr_t *addresses;
} omapi_addr_list_t;

typedef struct auth_key {
	OMAPI_OBJECT_PREAMBLE;
	char *name;
	char *algorithm;
	omapi_data_string_t *key;
	dns_tsec_t *tsec_key;
} omapi_auth_key_t;

#define OMAPI_CREATE          1
#define OMAPI_UPDATE          2
#define OMAPI_EXCL            4
#define OMAPI_NOTIFY_PROTOCOL 8

#define OMAPI_OBJECT_ALLOC(name, stype, type) \
isc_result_t name##_allocate (stype **p, const char *file, int line)	      \
{									      \
	return omapi_object_allocate ((omapi_object_t **)p,		      \
				      type, 0, file, line);		      \
}									      \
									      \
isc_result_t name##_reference (stype **pptr, stype *ptr,		      \
			       const char *file, int line)		      \
{									      \
	return omapi_object_reference ((omapi_object_t **)pptr,		      \
				       (omapi_object_t *)ptr, file, line);    \
}									      \
									      \
isc_result_t name##_dereference (stype **ptr, const char *file, int line)     \
{									      \
	return omapi_object_dereference ((omapi_object_t **)ptr, file, line); \
}

#define OMAPI_OBJECT_ALLOC_DECL(name, stype, type) \
isc_result_t name##_allocate (stype **p, const char *file, int line); \
isc_result_t name##_reference (stype **pptr, stype *ptr, \
			       const char *file, int line); \
isc_result_t name##_dereference (stype **ptr, const char *file, int line);

typedef isc_result_t (*omapi_array_ref_t) (char **, char *, const char *, int);
typedef isc_result_t (*omapi_array_deref_t) (char **, const char *, int);

/* An extensible array type. */
typedef struct {
	char **data;
	omapi_array_ref_t ref;
	omapi_array_deref_t deref;
	int count;
	int max;
} omapi_array_t;

#define OMAPI_ARRAY_TYPE(name, stype)					      \
isc_result_t name##_array_allocate (omapi_array_t **p,			      \
				    const char *file, int line)		      \
{									      \
	return (omapi_array_allocate					      \
		(p,							      \
		 (omapi_array_ref_t)name##_reference,			      \
		 (omapi_array_deref_t)name##_dereference,		      \
		 file, line));						      \
}									      \
									      \
isc_result_t name##_array_free (omapi_array_t **p,			      \
				const char *file, int line)		      \
{									      \
	return omapi_array_free (p, file, line);			      \
}									      \
									      \
isc_result_t name##_array_extend (omapi_array_t *pptr, stype *ptr, int *index,\
				  const char *file, int line)		      \
{									      \
	return omapi_array_extend (pptr, (char *)ptr, index, file, line);     \
}									      \
									      \
isc_result_t name##_array_set (omapi_array_t *pptr, stype *ptr,	int index,    \
			       const char *file, int line)		      \
{									      \
	return omapi_array_set (pptr, (char *)ptr, index, file, line);	      \
}									      \
									      \
isc_result_t name##_array_lookup (stype **ptr, omapi_array_t *pptr,	      \
				  int index, const char *file, int line)      \
{									      \
	return omapi_array_lookup ((char **)ptr, pptr, index, file, line);    \
}

#define OMAPI_ARRAY_TYPE_DECL(name, stype) \
isc_result_t name##_array_allocate (omapi_array_t **, const char *, int);     \
isc_result_t name##_array_free (omapi_array_t **, const char *, int);	      \
isc_result_t name##_array_extend (omapi_array_t *, stype *, int *,	      \
				  const char *, int);			      \
isc_result_t name##_array_set (omapi_array_t *,				      \
			       stype *, int, const char *, int);	      \
isc_result_t name##_array_lookup (stype **,				      \
				  omapi_array_t *, int, const char *, int)

#define	omapi_array_foreach_begin(array, stype, var)			      \
	{								      \
		int omapi_array_foreach_index;				      \
		stype *var = (stype *)0;				      \
		for (omapi_array_foreach_index = 0;			      \
			     array &&					      \
			     omapi_array_foreach_index < (array) -> count;    \
		     omapi_array_foreach_index++) {			      \
			if ((array) -> data [omapi_array_foreach_index]) {    \
				((*(array) -> ref)			      \
				 ((char **)&var,			      \
				  (array) -> data [omapi_array_foreach_index],\
				  MDL));

#define	omapi_array_foreach_end(array, stype, var)			      \
				(*(array) -> deref) ((char **)&var, MDL);     \
			}						      \
		}							      \
	}

isc_result_t omapi_protocol_connect (omapi_object_t *,
				     const char *, unsigned, omapi_object_t *);
isc_result_t omapi_connect_list (omapi_object_t *, omapi_addr_list_t *,
				 omapi_addr_t *);
isc_result_t omapi_protocol_listen (omapi_object_t *, unsigned, int);
isc_boolean_t omapi_protocol_authenticated (omapi_object_t *);
isc_result_t omapi_protocol_configure_security (omapi_object_t *,
						isc_result_t (*)
						(omapi_object_t *,
						 omapi_addr_t *),
						isc_result_t (*)
						(omapi_object_t *,
						 omapi_auth_key_t *));
isc_result_t omapi_protocol_accept (omapi_object_t *);
isc_result_t omapi_protocol_send_intro (omapi_object_t *, unsigned, unsigned);
isc_result_t omapi_protocol_ready (omapi_object_t *);
isc_result_t omapi_protocol_add_auth (omapi_object_t *, omapi_object_t *,
				      omapi_handle_t);
isc_result_t omapi_protocol_lookup_auth (omapi_object_t **, omapi_object_t *,
					 omapi_handle_t);
isc_result_t omapi_protocol_set_value (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_typed_data_t *);
isc_result_t omapi_protocol_get_value (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_value_t **);
isc_result_t omapi_protocol_stuff_values (omapi_object_t *,
					  omapi_object_t *,
					  omapi_object_t *);

isc_result_t omapi_protocol_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_protocol_send_message (omapi_object_t *,
					  omapi_object_t *,
					  omapi_object_t *,
					  omapi_object_t *);
isc_result_t omapi_protocol_signal_handler (omapi_object_t *,
					    const char *, va_list);
isc_result_t omapi_protocol_listener_set_value (omapi_object_t *,
						omapi_object_t *,
						omapi_data_string_t *,
						omapi_typed_data_t *);
isc_result_t omapi_protocol_listener_get_value (omapi_object_t *,
						omapi_object_t *,
						omapi_data_string_t *,
						omapi_value_t **);
isc_result_t omapi_protocol_listener_destroy (omapi_object_t *,
					      const char *, int);
isc_result_t omapi_protocol_listener_signal (omapi_object_t *,
					     const char *, va_list);
isc_result_t omapi_protocol_listener_stuff (omapi_object_t *,
					    omapi_object_t *,
					    omapi_object_t *);
isc_result_t omapi_protocol_send_status (omapi_object_t *, omapi_object_t *,
					 isc_result_t, unsigned, const char *);
isc_result_t omapi_protocol_send_open (omapi_object_t *, omapi_object_t *,
				       const char *, omapi_object_t *,
				       unsigned);
isc_result_t omapi_protocol_send_update (omapi_object_t *, omapi_object_t *,
					 unsigned, omapi_object_t *);

isc_result_t omapi_connect (omapi_object_t *, const char *, unsigned);
isc_result_t omapi_disconnect (omapi_object_t *, int);
int omapi_connection_readfd (omapi_object_t *);
int omapi_connection_writefd (omapi_object_t *);
isc_result_t omapi_connection_connect (omapi_object_t *);
isc_result_t omapi_connection_reader (omapi_object_t *);
isc_result_t omapi_connection_writer (omapi_object_t *);
isc_result_t omapi_connection_reaper (omapi_object_t *);
isc_result_t omapi_connection_output_auth_length (omapi_object_t *,
                                                  unsigned *);
isc_result_t omapi_connection_set_value (omapi_object_t *, omapi_object_t *,
					 omapi_data_string_t *,
					 omapi_typed_data_t *);
isc_result_t omapi_connection_get_value (omapi_object_t *, omapi_object_t *,
					 omapi_data_string_t *,
					 omapi_value_t **);
isc_result_t omapi_connection_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_connection_signal_handler (omapi_object_t *,
					      const char *, va_list);
isc_result_t omapi_connection_stuff_values (omapi_object_t *,
					    omapi_object_t *,
					    omapi_object_t *);
isc_result_t omapi_connection_write_typed_data (omapi_object_t *,
						omapi_typed_data_t *);
isc_result_t omapi_connection_put_name (omapi_object_t *, const char *);
isc_result_t omapi_connection_put_string (omapi_object_t *, const char *);
isc_result_t omapi_connection_put_handle (omapi_object_t *c,
					  omapi_object_t *h);
isc_result_t omapi_connection_put_named_uint32 (omapi_object_t *,
						const char *,
						u_int32_t);
isc_result_t omapi_listen (omapi_object_t *, unsigned, int);
isc_result_t omapi_listen_addr (omapi_object_t *,
				omapi_addr_t *, int);
isc_result_t omapi_listener_accept (omapi_object_t *);
int omapi_listener_readfd (omapi_object_t *);
isc_result_t omapi_accept (omapi_object_t *);
isc_result_t omapi_listener_configure_security (omapi_object_t *,
						isc_result_t (*)
						(omapi_object_t *,
						 omapi_addr_t *));
isc_result_t omapi_listener_set_value (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_typed_data_t *);
isc_result_t omapi_listener_get_value (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_value_t **);
isc_result_t omapi_listener_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_listener_signal_handler (omapi_object_t *,
					    const char *, va_list);
isc_result_t omapi_listener_stuff_values (omapi_object_t *,
					  omapi_object_t *,
					  omapi_object_t *);

isc_result_t omapi_register_io_object (omapi_object_t *,
				       int (*)(omapi_object_t *),
				       int (*)(omapi_object_t *),
				       isc_result_t (*)(omapi_object_t *),
				       isc_result_t (*)(omapi_object_t *),
				       isc_result_t (*)(omapi_object_t *));
isc_result_t omapi_reregister_io_object (omapi_object_t *,
					 int (*)(omapi_object_t *),
					 int (*)(omapi_object_t *),
					 isc_result_t (*)(omapi_object_t *),
					 isc_result_t (*)(omapi_object_t *),
					 isc_result_t (*)(omapi_object_t *));
isc_result_t omapi_unregister_io_object (omapi_object_t *);
isc_result_t omapi_dispatch (struct timeval *);
isc_result_t omapi_wait_for_completion (omapi_object_t *, struct timeval *);
isc_result_t omapi_one_dispatch (omapi_object_t *, struct timeval *);
isc_result_t omapi_io_set_value (omapi_object_t *, omapi_object_t *,
				 omapi_data_string_t *,
				 omapi_typed_data_t *);
isc_result_t omapi_io_get_value (omapi_object_t *, omapi_object_t *,
				 omapi_data_string_t *, omapi_value_t **);
isc_result_t omapi_io_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_io_signal_handler (omapi_object_t *, const char *, va_list);
isc_result_t omapi_io_stuff_values (omapi_object_t *,
				    omapi_object_t *,
				    omapi_object_t *);
isc_result_t omapi_waiter_signal_handler (omapi_object_t *,
					  const char *, va_list);
isc_result_t omapi_io_state_foreach (isc_result_t (*func) (omapi_object_t *,
							   void *),
				     void *p);

isc_result_t omapi_generic_new (omapi_object_t **, const char *, int);
isc_result_t omapi_generic_set_value  (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_typed_data_t *);
isc_result_t omapi_generic_get_value (omapi_object_t *, omapi_object_t *,
				      omapi_data_string_t *,
				      omapi_value_t **);
isc_result_t omapi_generic_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_generic_signal_handler (omapi_object_t *,
					   const char *, va_list);
isc_result_t omapi_generic_stuff_values (omapi_object_t *,
					 omapi_object_t *,
					 omapi_object_t *);
isc_result_t omapi_generic_clear_flags (omapi_object_t *);

isc_result_t omapi_message_new (omapi_object_t **, const char *, int);
isc_result_t omapi_message_set_value  (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_typed_data_t *);
isc_result_t omapi_message_get_value (omapi_object_t *, omapi_object_t *,
				      omapi_data_string_t *,
				      omapi_value_t **);
isc_result_t omapi_message_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_message_signal_handler (omapi_object_t *,
					   const char *, va_list);
isc_result_t omapi_message_stuff_values (omapi_object_t *,
					 omapi_object_t *,
					 omapi_object_t *);
isc_result_t omapi_message_register (omapi_object_t *);
isc_result_t omapi_message_unregister (omapi_object_t *);
isc_result_t omapi_message_process (omapi_object_t *, omapi_object_t *);

OMAPI_OBJECT_ALLOC_DECL (omapi_auth_key,
			 omapi_auth_key_t, omapi_type_auth_key)
isc_result_t omapi_auth_key_new (omapi_auth_key_t **, const char *, int);
isc_result_t omapi_auth_key_destroy (omapi_object_t *, const char *, int);
isc_result_t omapi_auth_key_enter (omapi_auth_key_t *);
isc_result_t omapi_auth_key_lookup_name (omapi_auth_key_t **, const char *);
isc_result_t omapi_auth_key_lookup (omapi_object_t **,
				    omapi_object_t *,
				    omapi_object_t *);
isc_result_t omapi_auth_key_get_value (omapi_object_t *, omapi_object_t *,
				       omapi_data_string_t *,
				       omapi_value_t **);
isc_result_t omapi_auth_key_stuff_values (omapi_object_t *,
					  omapi_object_t *,
					  omapi_object_t *);

extern omapi_object_type_t *omapi_type_connection;
extern omapi_object_type_t *omapi_type_listener;
extern omapi_object_type_t *omapi_type_io_object;
extern omapi_object_type_t *omapi_type_generic;
extern omapi_object_type_t *omapi_type_protocol;
extern omapi_object_type_t *omapi_type_protocol_listener;
extern omapi_object_type_t *omapi_type_waiter;
extern omapi_object_type_t *omapi_type_remote;
extern omapi_object_type_t *omapi_type_message;
extern omapi_object_type_t *omapi_type_auth_key;

extern omapi_object_type_t *omapi_object_types;

void omapi_type_relinquish (void);
isc_result_t omapi_init (void);
isc_result_t omapi_object_type_register (omapi_object_type_t **,
					 const char *,
					 isc_result_t (*)
						(omapi_object_t *,
						 omapi_object_t *,
						 omapi_data_string_t *,
						 omapi_typed_data_t *),
					 isc_result_t (*)
						(omapi_object_t *,
						 omapi_object_t *,
						 omapi_data_string_t *,
						 omapi_value_t **),
					 isc_result_t (*) (omapi_object_t *,
							   const char *, int),
					 isc_result_t (*) (omapi_object_t *,
							   const char *,
							   va_list),
					 isc_result_t (*) (omapi_object_t *,
							   omapi_object_t *,
							   omapi_object_t *),
					 isc_result_t (*) (omapi_object_t **,
							   omapi_object_t *,
							   omapi_object_t *),
					 isc_result_t (*) (omapi_object_t **,
							   omapi_object_t *),
					 isc_result_t (*) (omapi_object_t *,
							   omapi_object_t *),
					 isc_result_t (*) (omapi_object_t *,
							   const char *, int),
					 isc_result_t (*) (omapi_object_t **,
							   const char *, int),
					 isc_result_t (*) (size_t), size_t,
					 isc_result_t (*) (omapi_object_t *,
							   const char *, int),
					 int);
isc_result_t omapi_signal (omapi_object_t *, const char *, ...);
isc_result_t omapi_signal_in (omapi_object_t *, const char *, ...);
isc_result_t omapi_set_value (omapi_object_t *, omapi_object_t *,
			      omapi_data_string_t *,
			      omapi_typed_data_t *);
isc_result_t omapi_set_value_str (omapi_object_t *, omapi_object_t *,
				  const char *, omapi_typed_data_t *);
isc_result_t omapi_set_boolean_value (omapi_object_t *, omapi_object_t *,
				      const char *, int);
isc_result_t omapi_set_int_value (omapi_object_t *, omapi_object_t *,
				  const char *, int);
isc_result_t omapi_set_object_value (omapi_object_t *, omapi_object_t *,
				     const char *, omapi_object_t *);
isc_result_t omapi_set_string_value (omapi_object_t *, omapi_object_t *,
				     const char *, const char *);
isc_result_t omapi_get_value (omapi_object_t *, omapi_object_t *,
			      omapi_data_string_t *,
			      omapi_value_t **);
isc_result_t omapi_get_value_str (omapi_object_t *, omapi_object_t *,
				  const char *, omapi_value_t **);
isc_result_t omapi_stuff_values (omapi_object_t *,
				 omapi_object_t *,
				 omapi_object_t *);
isc_result_t omapi_object_create (omapi_object_t **, omapi_object_t *,
				  omapi_object_type_t *);
isc_result_t omapi_object_update (omapi_object_t *, omapi_object_t *,
				  omapi_object_t *, omapi_handle_t);
int omapi_data_string_cmp (omapi_data_string_t *, omapi_data_string_t *);
int omapi_ds_strcmp (omapi_data_string_t *, const char *);
int omapi_td_strcmp (omapi_typed_data_t *, const char *);
int omapi_td_strcasecmp (omapi_typed_data_t *, const char *);
isc_result_t omapi_make_value (omapi_value_t **, omapi_data_string_t *,
			       omapi_typed_data_t *, const char *, int);
isc_result_t omapi_make_const_value (omapi_value_t **, omapi_data_string_t *,
				     const unsigned char *,
				     unsigned, const char *, int);
isc_result_t omapi_make_int_value (omapi_value_t **, omapi_data_string_t *,
				   int, const char *, int);
isc_result_t omapi_make_uint_value (omapi_value_t **, omapi_data_string_t *,
				    unsigned int, const char *, int);
isc_result_t omapi_make_object_value (omapi_value_t **, omapi_data_string_t *,
				      omapi_object_t *, const char *, int);
isc_result_t omapi_make_handle_value (omapi_value_t **, omapi_data_string_t *,
				      omapi_object_t *, const char *, int);
isc_result_t omapi_make_string_value (omapi_value_t **, omapi_data_string_t *,
				      const char *, const char *, int);
isc_result_t omapi_get_int_value (unsigned long *, omapi_typed_data_t *);

isc_result_t omapi_object_handle (omapi_handle_t *, omapi_object_t *);
isc_result_t omapi_handle_lookup (omapi_object_t **, omapi_handle_t);
isc_result_t omapi_handle_td_lookup (omapi_object_t **, omapi_typed_data_t *);

void * dmalloc (unsigned, const char *, int);
void dfree (void *, const char *, int);
#if defined (DEBUG_MEMORY_LEAKAGE) || defined (DEBUG_MALLOC_POOL) || \
		defined (DEBUG_MEMORY_LEAKAGE_ON_EXIT)
void dmalloc_reuse (void *, const char *, int, int);
void dmalloc_dump_outstanding (void);
#else
#define dmalloc_reuse(x,y,l,z)
#endif
#define MDL __FILE__, __LINE__
#if defined (DEBUG_RC_HISTORY)
void dump_rc_history (void *);
void rc_history_next (int);
#endif
void omapi_print_dmalloc_usage_by_caller (void);
isc_result_t omapi_object_allocate (omapi_object_t **,
				    omapi_object_type_t *,
				    size_t, const char *, int);
isc_result_t omapi_object_initialize (omapi_object_t *,
				      omapi_object_type_t *,
				      size_t, size_t, const char *, int);
isc_result_t omapi_object_reference (omapi_object_t **,
				     omapi_object_t *, const char *, int);
isc_result_t omapi_object_dereference (omapi_object_t **, const char *, int);
isc_result_t omapi_typed_data_new (const char *, int, omapi_typed_data_t **,
				   omapi_datatype_t, ...);
isc_result_t omapi_typed_data_reference (omapi_typed_data_t **,
					 omapi_typed_data_t *,
					 const char *, int);
isc_result_t omapi_typed_data_dereference (omapi_typed_data_t **,
					   const char *, int);
isc_result_t omapi_data_string_new (omapi_data_string_t **,
				    unsigned, const char *, int);
isc_result_t omapi_data_string_reference (omapi_data_string_t **,
					  omapi_data_string_t *,
					  const char *, int);
isc_result_t omapi_data_string_dereference (omapi_data_string_t **,
					    const char *, int);
isc_result_t omapi_value_new (omapi_value_t **, const char *, int);
isc_result_t omapi_value_reference (omapi_value_t **,
				    omapi_value_t *, const char *, int);
isc_result_t omapi_value_dereference (omapi_value_t **, const char *, int);
isc_result_t omapi_addr_list_new (omapi_addr_list_t **, unsigned,
				  const char *, int);
isc_result_t omapi_addr_list_reference (omapi_addr_list_t **,
					omapi_addr_list_t *,
					const char *, int);
isc_result_t omapi_addr_list_dereference (omapi_addr_list_t **,
					  const char *, int);

isc_result_t omapi_array_allocate (omapi_array_t **, omapi_array_ref_t,
				   omapi_array_deref_t, const char *, int);
isc_result_t omapi_array_free (omapi_array_t **, const char *, int);
isc_result_t omapi_array_extend (omapi_array_t *, char *, int *,
				 const char *, int);
isc_result_t omapi_array_set (omapi_array_t *, void *, int, const char *, int);
isc_result_t omapi_array_lookup (char **,
				 omapi_array_t *, int, const char *, int);
OMAPI_ARRAY_TYPE_DECL(omapi_object, omapi_object_t);
#endif /* _OMAPIP_H_ */


"Please believe he is walking down the aisle with me."
Being a born again virgin is a thing.
Brooke Valentine is ready to be locked down but is Marcus? In the Love & Hip Hop Hollywood sneak peek, Brooke's "ring finger is shining brighter than the others." She reveals she is engaged to Marcus following a break that did not last long—and he has no clue. After spending hella quality time together, Brooke snatched a ring he bought her before the previous drama, and claimed an engagement when he didn't propose. Although he didn't officially get on one knee, Brooke is ready to have his last name.
Meanwhile, Ray J is apparently in Vegas ignoring his pregnant wife and because of that Princess doesn't even want to have a gender reveal party. She's not the only one having marriage problems. K. Michelle's allegations that Lyrica tried to smash "her big d–k friend" Safaree has Brooke feeling like the rumors are true.
Between the forced engagement, Lyrica questionable fidelity, and Princess arguing with the Norwoods, there's a lot going on. Don't miss an all new Love & Hip Hop Hollywood next Monday at 8/7c!


text:
Our Admissions team is committed to finding the ideal education for your daughter.
We would be delighted if you could join us at one of our Admissions events to discover all there is to know about life and learning at Oxford High School.
'All About Us' Prep School Open Event 9:30-11:00 a.m. Thursday 9th March 2023 Register
If you have any questions about Admissions at OHS, don't hesitate to contact the team at admissions@oxf.gdst.net.
Pre-Admissions Forms and Documentation


text:
import pandas as pd
import pytest
from woodwork.logical_types import (
    Datetime,
    Double,
    Integer,
    IntegerNullable,
    NaturalLanguage
)

import featuretools as ft
from featuretools.entityset import EntitySet
from featuretools.utils.gen_utils import import_or_none

ps = import_or_none('pyspark.pandas')

@pytest.mark.skipif('not ps')
def test_single_table_spark_entityset():
    primitives_list = ['absolute', 'is_weekend', 'year', 'day', 'num_characters', 'num_words']

    spark_es = EntitySet(id="spark_es")
    df = pd.DataFrame({"id": [0, 1, 2, 3],
                       "values": [1, 12, -34, 27],
                       "dates": [pd.to_datetime('2019-01-10'),
                                 pd.to_datetime('2019-02-03'),
                                 pd.to_datetime('2019-01-01'),
                                 pd.to_datetime('2017-08-25')],
                       "strings": ["I am a string",
                                   "23",
                                   "abcdef ghijk",
                                   ""]})
    values_dd = ps.from_pandas(df)
    ltypes = {
        "values": Integer,
        "dates": Datetime,
        "strings": NaturalLanguage
    }
    spark_es.add_dataframe(
        dataframe_name="data",
        dataframe=values_dd,
        index="id",
        logical_types=ltypes)

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="data",
                         trans_primitives=primitives_list)

    pd_es = ft.EntitySet(id="pd_es")
    pd_es.add_dataframe(
        dataframe_name="data",
        dataframe=df,
        index="id",
        logical_types=ltypes)

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="data",
                   trans_primitives=primitives_list)

    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_computed_fm = spark_fm.set_index('id').loc[fm.index][fm.columns]
    # Spark dtypes are different for categorical - set the pandas fm to have the same dtypes before comparing
    pd.testing.assert_frame_equal(fm.astype(spark_computed_fm.dtypes), spark_computed_fm)

@pytest.mark.skipif('not ps')
def test_single_table_spark_entityset_ids_not_sorted():
    primitives_list = ['absolute', 'is_weekend', 'year', 'day', 'num_characters', 'num_words']

    spark_es = EntitySet(id="spark_es")
    df = pd.DataFrame({"id": [2, 0, 1, 3],
                       "values": [1, 12, -34, 27],
                       "dates": [pd.to_datetime('2019-01-10'),
                                 pd.to_datetime('2019-02-03'),
                                 pd.to_datetime('2019-01-01'),
                                 pd.to_datetime('2017-08-25')],
                       "strings": ["I am a string",
                                   "23",
                                   "abcdef ghijk",
                                   ""]})
    values_dd = ps.from_pandas(df)
    ltypes = {
        "values": Integer,
        "dates": Datetime,
        "strings": NaturalLanguage,
    }
    spark_es.add_dataframe(
        dataframe_name="data",
        dataframe=values_dd,
        index="id",
        logical_types=ltypes)

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="data",
                         trans_primitives=primitives_list)

    pd_es = ft.EntitySet(id="pd_es")
    pd_es.add_dataframe(
        dataframe_name="data",
        dataframe=df,
        index="id",
        logical_types=ltypes)

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="data",
                   trans_primitives=primitives_list)

    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_computed_fm = spark_fm.set_index('id').loc[fm.index]
    # Spark dtypes are different for categorical - set the pandas fm to have the same dtypes before comparing
    pd.testing.assert_frame_equal(fm.astype(spark_computed_fm.dtypes), spark_computed_fm)

@pytest.mark.skipif('not ps')
def test_single_table_spark_entityset_with_instance_ids():
    primitives_list = ['absolute', 'is_weekend', 'year', 'day', 'num_characters', 'num_words']
    instance_ids = [0, 1, 3]

    spark_es = EntitySet(id="spark_es")
    df = pd.DataFrame({"id": [0, 1, 2, 3],
                       "values": [1, 12, -34, 27],
                       "dates": [pd.to_datetime('2019-01-10'),
                                 pd.to_datetime('2019-02-03'),
                                 pd.to_datetime('2019-01-01'),
                                 pd.to_datetime('2017-08-25')],
                       "strings": ["I am a string",
                                   "23",
                                   "abcdef ghijk",
                                   ""]})

    values_dd = ps.from_pandas(df)
    ltypes = {
        "values": Integer,
        "dates": Datetime,
        "strings": NaturalLanguage
    }
    spark_es.add_dataframe(
        dataframe_name="data",
        dataframe=values_dd,
        index="id",
        logical_types=ltypes)

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="data",
                         trans_primitives=primitives_list,
                         instance_ids=instance_ids)

    pd_es = ft.EntitySet(id="pd_es")
    pd_es.add_dataframe(
        dataframe_name="data",
        dataframe=df,
        index="id",
        logical_types=ltypes)

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="data",
                   trans_primitives=primitives_list,
                   instance_ids=instance_ids)

    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_computed_fm = spark_fm.set_index('id').loc[fm.index]
    # Spark dtypes are different for categorical - set the pandas fm to have the same dtypes before comparing
    pd.testing.assert_frame_equal(fm.astype(spark_computed_fm.dtypes), spark_computed_fm)

@pytest.mark.skipif('not ps')
def test_single_table_spark_entityset_single_cutoff_time():
    primitives_list = ['absolute', 'is_weekend', 'year', 'day', 'num_characters', 'num_words']

    spark_es = EntitySet(id="spark_es")
    df = pd.DataFrame({"id": [0, 1, 2, 3],
                       "values": [1, 12, -34, 27],
                       "dates": [pd.to_datetime('2019-01-10'),
                                 pd.to_datetime('2019-02-03'),
                                 pd.to_datetime('2019-01-01'),
                                 pd.to_datetime('2017-08-25')],
                       "strings": ["I am a string",
                                   "23",
                                   "abcdef ghijk",
                                   ""]})
    values_dd = ps.from_pandas(df)
    ltypes = {
        "values": Integer,
        "dates": Datetime,
        "strings": NaturalLanguage
    }
    spark_es.add_dataframe(
        dataframe_name="data",
        dataframe=values_dd,
        index="id",
        logical_types=ltypes)

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="data",
                         trans_primitives=primitives_list,
                         cutoff_time=pd.Timestamp("2019-01-05 04:00"))

    pd_es = ft.EntitySet(id="pd_es")
    pd_es.add_dataframe(
        dataframe_name="data",
        dataframe=df,
        index="id",
        logical_types=ltypes)

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="data",
                   trans_primitives=primitives_list,
                   cutoff_time=pd.Timestamp("2019-01-05 04:00"))

    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_computed_fm = spark_fm.set_index('id').loc[fm.index]
    # Spark dtypes are different for categorical - set the pandas fm to have the same dtypes before comparing
    pd.testing.assert_frame_equal(fm.astype(spark_computed_fm.dtypes), spark_computed_fm)

@pytest.mark.skipif('not ps')
def test_single_table_spark_entityset_cutoff_time_df():
    primitives_list = ['absolute', 'is_weekend', 'year', 'day', 'num_characters', 'num_words']

    spark_es = EntitySet(id="spark_es")
    df = pd.DataFrame({"id": [0, 1, 2],
                       "values": [1, 12, -34],
                       "dates": [pd.to_datetime('2019-01-10'),
                                 pd.to_datetime('2019-02-03'),
                                 pd.to_datetime('2019-01-01')],
                       "strings": ["I am a string",
                                   "23",
                                   "abcdef ghijk"]})
    values_dd = ps.from_pandas(df)
    ltypes = {
        "values": IntegerNullable,
        "dates": Datetime,
        "strings": NaturalLanguage
    }
    spark_es.add_dataframe(
        dataframe_name="data",
        dataframe=values_dd,
        index="id",
        time_index="dates",
        logical_types=ltypes)

    ids = [0, 1, 2, 0]
    times = [pd.Timestamp("2019-01-05 04:00"),
             pd.Timestamp("2019-01-05 04:00"),
             pd.Timestamp("2019-01-05 04:00"),
             pd.Timestamp("2019-01-15 04:00")]
    labels = [True, False, True, False]
    cutoff_times = pd.DataFrame({"id": ids, "time": times, "labels": labels}, columns=["id", "time", "labels"])

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="data",
                         trans_primitives=primitives_list,
                         cutoff_time=cutoff_times)

    pd_es = ft.EntitySet(id="pd_es")
    pd_es.add_dataframe(
        dataframe_name="data",
        dataframe=df,
        index="id",
        time_index="dates",
        logical_types=ltypes)

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="data",
                   trans_primitives=primitives_list,
                   cutoff_time=cutoff_times)
    # Because row ordering with spark is not guaranteed, `we need to sort on two columns to make sure that values
    # for instance id 0 are compared correctly. Also, make sure the index column has the same dtype.
    fm = fm.sort_values(['id', 'labels'])
    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_fm = spark_fm.set_index('id').sort_values(['id', 'labels'])

    for column in fm.columns:
        if fm[column].dtype.name == 'category':
            fm[column] = fm[column].astype('Int64').astype('string')

    pd.testing.assert_frame_equal(fm.astype(spark_fm.dtypes), spark_fm, check_dtype=False)

@pytest.mark.skipif('not ps')
def test_single_table_spark_entityset_dates_not_sorted():
    spark_es = EntitySet(id="spark_es")
    df = pd.DataFrame({"id": [0, 1, 2, 3],
                       "values": [1, 12, -34, 27],
                       "dates": [pd.to_datetime('2019-01-10'),
                                 pd.to_datetime('2019-02-03'),
                                 pd.to_datetime('2019-01-01'),
                                 pd.to_datetime('2017-08-25')]})

    primitives_list = ['absolute', 'is_weekend', 'year', 'day']
    values_dd = ps.from_pandas(df)
    ltypes = {
        "values": Integer,
        "dates": Datetime,
    }
    spark_es.add_dataframe(
        dataframe_name="data",
        dataframe=values_dd,
        index="id",
        time_index="dates",
        logical_types=ltypes)

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="data",
                         trans_primitives=primitives_list,
                         max_depth=1)

    pd_es = ft.EntitySet(id="pd_es")
    pd_es.add_dataframe(
        dataframe_name="data",
        dataframe=df,
        index="id",
        time_index="dates",
        logical_types=ltypes)

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="data",
                   trans_primitives=primitives_list,
                   max_depth=1)

    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_fm = spark_fm.set_index('id').loc[fm.index]
    pd.testing.assert_frame_equal(fm.astype(spark_fm.dtypes), spark_fm)

@pytest.mark.skipif('not ps')
def test_spark_entityset_secondary_time_index():
    log_df = pd.DataFrame()
    log_df['id'] = [0, 1, 2, 3]
    log_df['scheduled_time'] = pd.to_datetime([
        "2019-01-01",
        "2019-01-01",
        "2019-01-01",
        "2019-01-01"
    ])
    log_df['departure_time'] = pd.to_datetime([
        "2019-02-01 09:00",
        "2019-02-06 10:00",
        "2019-02-12 10:00",
        "2019-03-01 11:30"])
    log_df['arrival_time'] = pd.to_datetime([
        "2019-02-01 11:23",
        "2019-02-06 12:45",
        "2019-02-12 13:53",
        "2019-03-01 14:07"
    ])
    log_df['delay'] = [-2, 10, 60, 0]
    log_df['flight_id'] = [0, 1, 0, 1]
    log_spark = ps.from_pandas(log_df)

    flights_df = pd.DataFrame()
    flights_df['id'] = [0, 1, 2, 3]
    flights_df['origin'] = ["BOS", "LAX", "BOS", "LAX"]
    flights_spark = ps.from_pandas(flights_df)

    pd_es = ft.EntitySet("flights")
    spark_es = ft.EntitySet("flights_spark")

    log_ltypes = {
        "scheduled_time": Datetime,
        "departure_time": Datetime,
        "arrival_time": Datetime,
        "delay": Double,
    }
    pd_es.add_dataframe(
        dataframe_name='logs',
        dataframe=log_df,
        index="id",
        logical_types=log_ltypes,
        semantic_tags={'flight_id': 'foreign_key'},
        time_index="scheduled_time",
        secondary_time_index={'arrival_time': ['departure_time', 'delay']})

    spark_es.add_dataframe(
        dataframe_name='logs',
        dataframe=log_spark,
        index="id",
        logical_types=log_ltypes,
        semantic_tags={'flight_id': 'foreign_key'},
        time_index="scheduled_time",
        secondary_time_index={'arrival_time': ['departure_time', 'delay']})

    pd_es.add_dataframe(dataframe_name='flights', dataframe=flights_df, index="id")
    flights_ltypes = pd_es['flights'].ww.logical_types
    spark_es.add_dataframe(dataframe_name='flights', dataframe=flights_spark, index="id", logical_types=flights_ltypes)

    pd_es.add_relationship('flights', 'id', 'logs', 'flight_id')
    spark_es.add_relationship('flights', 'id', 'logs', 'flight_id')

    cutoff_df = pd.DataFrame()
    cutoff_df['id'] = [0, 1, 1]
    cutoff_df['time'] = pd.to_datetime(['2019-02-02', '2019-02-02', '2019-02-20'])

    fm, _ = ft.dfs(entityset=pd_es,
                   target_dataframe_name="logs",
                   cutoff_time=cutoff_df,
                   agg_primitives=["max"],
                   trans_primitives=["month"])

    spark_fm, _ = ft.dfs(entityset=spark_es,
                         target_dataframe_name="logs",
                         cutoff_time=cutoff_df,
                         agg_primitives=["max"],
                         trans_primitives=["month"])

    # Make sure both matrices are sorted the same
    # Also make sure index has same dtype
    spark_fm = spark_fm.to_pandas().astype({'id': 'int64'})
    spark_fm = spark_fm.set_index('id').sort_values('delay')
    fm = fm.sort_values('delay')

    # Spark output for MONTH columns will be of string type without decimal points,
    # while pandas will contain decimals - we need to convert before comparing
    for column in fm.columns:
        if fm[column].dtype.name == 'category':
            fm[column] = fm[column].astype('Int64').astype('string')

    pd.testing.assert_frame_equal(fm, spark_fm, check_categorical=False, check_dtype=False)