text:
An Interview with Val Biro, Artist, Illustrator, Author and Book Cover Designer
NB: Val Biro passed away last month, at the age of 92 (Guardian obituary here). I've written about Val and his terrific dust jacket designs a number of times on Existential Ennui – follow this link to previous posts, or take a look at the examples of his dust wrapper work on this page – and last year had the opportunity to interview him in person about that work. The resulting article, an edited version of which appears below, was initially intended for Illustrators Quarterly, who in the wake of Val's passing will instead be running a more substantial feature on Val's life and art (drawing in part on my interview) to appear late this year/early next year. In the meantime, Illustrators have graciously given me the go-ahead to publish my original piece, which I present as my personal tribute to Val and his work, illustrated with wrappers and roughs from my own collection.
If you spend any amount of time browsing the hardback fiction shelves in secondhand bookshops – as I do, whenever I get the opportunity (and probably more than is entirely healthy) – chances are you'll have unwittingly encountered the work of Val Biro. Not as an author: for that aspect of Val's career you'd be better off heading to the children's section, where you'll doubtless find a selection of the 37 picture books he wrote and drew from 1966 to 2001, all starring Gumdrop, a vintage 1926 Austin 12/4 motorcar. No, the Biro work you'll see in the fiction department is of a different stripe. It was created both prior to and parallel with his children's titles, and the books it was made for number in their thousands.
From the early 1940s until the late 1970s Val Biro designed an estimated 3,000 dust jackets – more than any other jacket designer of the era. His artwork wrapped books by C. S. Forester and Sir Arthur Conan Doyle; Nevil Shute and James Hadley Chase; Iris Murdoch and Geoffrey Household – from crime thrillers to romance, literature to non-fiction, and for every major publisher. It's a remarkable body of work, encompassing not only the finished jackets but the preparatory roughs too – sometimes multiple roughs for a single wrapper – the vast majority with hand lettering painted directly onto the artwork.
His covers are instantly recognisable: a striking central image – evoking the feel of the novel overall rather than a particular scene – done in dry brush (gouache), often restricted to just two or three colours, i.e. three-colour line, "which in those days was quite popular because it was cheap to reproduce", as Val himself explained to me when I pinned him down for a chat at a book fair he was a guest at. He created his first wrapper as a freelance designer in 1942, for the Collins edition of Rex Stout's The Broken Vase (for which he was paid five guineas); at that time he was also employed as an assistant at Sylvan Press – illustrating interiors and covers – having spent three years at the Central School of Art after emigrating to the UK from Hungary in 1939. But by 1953, after a stint with John Lehmann Limited, Val was ready to take the plunge and go fully freelance.
In common with other jacket designers of the era, Val was rarely given a brief; instead he would read each novel he was designing the cover for, a practice virtually unheard of these days. "It would be: here's a manuscript, come up with a good design," he recalls. "They'd tell me whether it's full colour, or three-colour line, and the size. Then I'd do the roughs, which I put a lot of work into. Occasionally I would do two or even three roughs to give them a choice. I worked hard in those days!"
Val reckons his work rate in the very early days of his freelance wrapper designing would equate to "about four jackets a month – one a week. But when I went big time with it, I would have about fifteen commissions at any one time. At one point I did almost nothing else but book jackets." After reading a book he would produce a rough – which would take about half a day, working at the same size as the eventual wrapper so the publisher could see how the finished book would look (the final artwork would be produced at a quarter- or half-up) – in which he would "try to reflect the character of the whole story, not based on one particular scene but... encapsulating a whole book in one design". That rough and any variants Val had come up with would then be sent in to the publisher for approval – a process which was not, it seems, always straightforward...
"I remember, Mr. Walter Hutchinson himself, the eponymous publisher, he insisted on seeing a rough but it had to be twice up, full colour, everything. I was told he usually received the art editor in bed – well, he was in bed, because he liked the late mornings. The art editor would come in and say, Mr. Hutchinson, this is the cover for so-and-so, and give it to him. If he didn't like it, he would get out an indelible blue pencil, and with a 'no', put a line through it, ruining the picture."
Thankfully the pencil-wielding Mr. Hutchinson was in the minority; other publishers and art editors weren't quite so physical with their criticisms, and many of Val's roughs survive today. Indeed, Val has fond memories of most of the publishers he worked for, whether it be Michael Joseph, who commissioned him to design the wrappers for the first half-dozen Hornblower novels by C. S. Forester, or Hodder & Stoughton, who not only sent plenty of dust jacket work his way but also, from the 1960s on, published his own Gumdrop books (under their Brockhampton Press children's imprint). And admirers of his work didn't just number publishers and art directors; Nevil Shute, for whose novels Val designed the wrappers for In the Wet (1953), Requiem for a Wren (1955) and others, was certainly impressed by what he saw. "We received a letter from Mr. Shute from Australia," Val recalls with pride. "He said to the publisher, 'Thank you for employing an artist who evidently knows Australia well.' I'd never been there in my life!"
Val was just one among a multitude of book jacket designers beavering away in the '40s, '50s and '60s, all offering their own take on the restricted palette style – largely unsung artists like Donald Green, Peter Probyn, John Rowland, Roy Sanford and sisters Barbara and Eileen Walton (not to mention the rather better appreciated likes of Denis McLoughlin and Brian Wildsmith). Of his contemporaries, Val singles out Hans Tisdall, perhaps best known these days as a painter but back then also a book designer (his most famous wrapper probably being for Lampedusa's The Leopard) "who worked in a style not unlike the three-colour line which was typical of me in those days. I never met him but I admired his work. To an extent my lettering is influenced by him."
A greater influence came courtesy of Val's time at Central School. A number of Val's wrappers are reminiscent of woodcut prints – his jacket for Victor Canning's 1961 novel A Delivery of Furies, say – which, it turns out, was no accident: "I started as a wood engraver. At art college my tutor was John Farleigh – great name in his day. I did some, I think, very good engravings under his influence. But when I came to book jackets I realised that the timescale – I usually would get about a couple of weeks at most from rough to finish – was very tight. An engraving would take me about a fortnight to do!"
Towards the end of the 1970s Val's time as a jacket designer "as a main activity" drew to a close. "I became so involved in children's books and my own Gumdrops that I didn't have time or, actually, the interest. The problem with a jacket is, it's basically the same, isn't it?" he muses. "To encapsulate a whole book in one design. Which is interesting. But there came a time when I was much more interested in writing my own stories and developing my own books."
Working methods in jacket design had changed too – the introduction of Letraset and greater use of separations and superimposing – and this was also a factor in Val's decision to move on to other endeavours. While he, of course, as a professional, adapted to these changes, he much preferred his original way of working, "because it was very much integrated – I mean the design and the lettering was all one piece, whereas if you superimpose it it's not quite the same thing." As for more contemporary dust jacket design, it must be said that he's not overly keen: "A lot of it is computer-generated... I can't see today the individual hand, the person who's done it. It's often done in-house rather than by a freelancer, some of it by computer, and the concept is usually the concept of a committee rather than a single mind."
Instead, Val has continued to carve out a place in publishing history as an in-demand children's book author and illustrator. Now in his nineties, his most recent project has been a series of 200-page fully illustrated hardbacks for Award Publications, retellings of Aesop's Fables and Grimm's/Hans Christian Andersen's/Charles Perrault's Fairy Tales; the latest volume, based on the Arabian Nights, was in-progress when we spoke, but Val expects that "will probably be my last book because I can't imagine taking on a big commission like that again, at 91."
Even without all of his children's titles, his astonishing body of dust jacket work must surely stand as one of the greatest achievements in book design – 3,000 covers in less than 40 years. An incredible amount of work, agrees Val, but his only explanation for this prodigious output is as matter-of-fact as one would expect of this softly spoken, unassuming man: "I was probably the busiest jacket designer at that time in the country."
Val Biro on His Dust Jacket Designs
Geoffrey Household, A Time to Kill (Michael Joseph, 1952, sequel to A Rough Shoot): "This is two-colour line, dark red and black – the white is the paper – so it's two colours. This could be reproduced on line blocks without a screen, and therefore not art paper but ordinary cartridge. Very effective."
Nevil Shute, In the Wet (Heinemann, 1953): "This isn't based on a particular scene but on the feel of the flooded landscape."
Victor Canning, The Burning Eye (Hodder & Stoughton, 1960): "I used dry brush because it had to be reproduced by line rather than halftone. You had to be careful that you worked in such a way that it reproduced well."
James Barlow, The Hour of Maximum Danger (Hamish Hamilton, 1962): "An artist keeps his eyes open to what's happening in the art world, and I was quite taken by this kind of abstraction. But after the abstract era I left the conceptualists and so on totally aside because that's not me at all."
Labels: British Book Cover Design 1950s 1960s, illustration, interviews, publishing, Val Biro
B McMolo 5 August 2014 at 08:31
Those jackets (and that output) are stunning.
I'm going to track down these fully-illustrated children's books. Both of my daughters are approaching the age to enjoy them, as well, so it's a whole-family win.
EricB 5 August 2014 at 13:46
What an excellent piece on Val Biro. I came across his work gracing the covers of books by Rupert Croft-Cooke and Peter de Polnay, and many others. Many thanks.
Louis XIV, the Sun King (Nick Jones) 7 August 2014 at 04:24
Thanks for the kind words, both. I'm glad I got to talk to Val before he passed away; I only met him a couple of times, but he was a lovely guy as well as a fine artist.
The Rainbird Pattern (Birdcage #2) by Victor Canni...
Signed First Edition of The Satan Sampler (Birdcag...
Victor Canning's Firecrest (Heinemann, 1971) and t...
The Kingsford Mark by Victor Canning (Heinemann, 1...
Simon Harvester's Dorian Silk Spy Novel Series: Un...
The Spy Novels of Simon Harvester: Bibliography; D...
An Interview with Val Biro, Artist, Illustrator, A...
Michael Frayn's Debut Novel, The Tin Men (Collins,...


text:
Q: How to handle 'No' or 'Cancel' on Workbook.SaveAs overwrite confirmation? I'm want users to be prompted to save a workbook before the VBA script starts modifying content. When the SaveAs dialog box comes up, if the user clicks Cancel I raise a custom error and stop the script. If they click Save and the filename already exists I want them to be asked whether to overwrite.
Here's my code:
Function SaveCurrentWorkbook(wkbSource As Workbook, strNewFileName As String) As Variant
    If Not bolDebug Then On Error GoTo errHandler
    Dim varSaveName As Variant

SaveAsDialog:
    varSaveName = Application.GetSaveAsFilename(InitialFileName:=strNewFileName, FileFilter:="Excel Files (*.xls), *.xls")
    If varSaveName <> False Then
        wkbSource.SaveAs Filename:=varSaveName, ConflictResolution:=True, Addtomru:=True
        Set SaveCurrentWorkbook = wkbSource
    Else
        SaveCurrentWorkbook = False
        Err.Raise 11111, , "Save Canceled"
    End If

exitProc:
    Exit Function

errHandler:
    Select Case Err.Number
        Case 1004 'Clicked "No" or "Cancel" - can't differentiate
            Resume SaveAsDialog
        Case esle
            MsgBox "File not saved. Stopping script.", vbOKOnly, Err.Description
            Resume exitProc
    End select

End Function

If they click 'Yes', it overwrites it. If they click 'No', I want the SaveAs dialog box to come up so they can select a new filename, but instead I get an error. If they click 'Cancel', I want an error to occur and for the script to stop. The problem is I can't differentiate the errors triggered between 'No' and 'Cancel'.
Any suggestions how to handle this? (Please excuse any poor use of error handling - it's been a while.)
P.S. This function is called by another procedure so if the user clicks 'Cancel' at either the SaveAs dialog box or the ResolveConflict dialog, I would like the calling procedure to stop as well. I figure I can do this by checking what SaveCurrentWorkbook returns (either a Workbook object or False).

A: You can simply create your own "overwrite?"-question like this:
Function SaveCurrentWorkbook(wkbSource As Workbook, strNewFileName As String) As Variant
    If Not bolDebug Then On Error GoTo errHandler
    Dim varSaveName As Variant

SaveAsDialog:

    varSaveName = Application.GetSaveAsFilename(InitialFileName:=strNewFileName, FileFilter:="Excel Files (*.xls), *.xls")
    If varSaveName <> False Then
      If Len(Dir(varSaveName)) Then 'checks if the file already exists
        Select Case MsgBox("A file named '" & varSaveName & "' already exists at this location. Do you want to replace it?", vbYesNoCancel + vbInformation)
        Case vbYes
          'want to overwrite
          Application.DisplayAlerts = False
          wkbSource.SaveAs varSaveName, ConflictResolution:=2, Addtomru:=True
          Application.DisplayAlerts = True
          Set SaveCurrentWorkbook = wkbSource
        Case vbNo
          GoTo SaveAsDialog
        Case vbCancel
          SaveCurrentWorkbook = False
          Err.Raise 11111, , "Save Canceled"
        End Select
      Else
        wkbSource.SaveAs varSaveName, ConflictResolution:=True, Addtomru:=True
        Set SaveCurrentWorkbook = wkbSource
      End If
    Else
      SaveCurrentWorkbook = False
      Err.Raise 11111, , "Save Canceled"
    End If

exitProc:
    Exit Function

errHandler:
    Select Case Err.Number
    Case 1004 'Clicked "No" or "Cancel" - can't differentiate
      Resume SaveAsDialog
    Case Else
      MsgBox "File not saved. Stopping script.", vbOKOnly, Err.Description
      Resume exitProc
    End Select

End Function

As you have noticed, there is no difference between "No" and "Cancel" (for the application, because it will not stop the saving itself). Excel simply lies to itself saying: "I can't save here" and pops the same error for both cases... so the only real solution is to create your own msgbox :(

A: I would make SaveCurrentWorkbook return True or False and use Msgboxes to handle the save as strNewFileName.
Then in the script that calls SaveCurrentWorkbook you can do a simple boolean evaluation.

    If SaveCurrentWorkbook(wkbSource, "C:\...\SomeFile.xls") then
       'Do Something
    Else
       'Do Something else
    End If

Function SaveCurrentWorkbook(wkbSource As Workbook, strNewFileName As String) As Boolean
    Dim iResult As VbMsgBoxResult

    Dim varSaveName As Variant

    If Dir(strNewFileName) <> "" Then
        iResult = MsgBox("Press [Yes] to overwite " & strNewFileName & " or [No] to choose a new filename.", vbInformation + vbYesNo, "Save File")
    Else
        iResult = MsgBox("Press [Yes] to save as " & strNewFileName & " or [No] to choose a new filename.", vbInformation + vbYesNo, "Save File")
    End If

    If iResult = vbYes Then
        SaveCurrentWorkbook = True
    Else
        varSaveName = Application.GetSaveAsFilename(FileFilter:="Excel Files (*.xls), *.xls")
        If CStr(varSaveName) <> "False" Then
            wkbSource.SaveAs Filename:=varSaveName, ConflictResolution:=True, Addtomru:=True
            SaveCurrentWorkbook = True
        End If
    End If

End Function

You don't need to set a reference when using SaveAs because your original is closed (without being saved )and your reference automatically updated to the new file.  If you were using SaveCopyAs then your original file stays open and a copy of the current file (including any unsaved data) is made.
Notice in the test below that when we use SaveAs the refernce is updated to the SaveAs name. When we use SaveCopAs the name doesn't change because the original file is still open.

redpajama_set_name: RedPajamaStackExchange


text:
Hope Funds for Cancer Research 2007 Awards Gala
On the evening of August 25th, 2007, the Hope Funds held its inaugural Awards Gala. The event was a terrific success, raising more than $205,000 for basic research. Co-chaired by Trustee and Chairman of the Board Leah Rush Cann, Advisory Council member John Naughton, and Mrs. David L. Keefe, the evening brought together nearly 200 Trustees, Advisors, scientists, physicians, and friends. After dinner, guests enjoyed dancing to the Bob Hardwick Sound in the beautiful Newport mansion, Bois Doré.
Four distinguished individuals and an organization were honored:
Sir Paul Nurse-In recognition of his research that led to the identification of cyclin-dependent kinase (CDK) as the key regulator molecule controlling the process by which cells make copies of themselves. This discovery has been important in understanding the growth and development of cancer cells. The award was accepted on Sir Paul's behalf by Dr. James Moseley, a post-doctoral fellow in Dr. Nurse's laboratory at Rockefeller University.
Antonio J. Grillo-Lopez, M.D.-Chief Medical Officer Emeritus of IDEC Pharmaceuticals. Dr. Grillo-Lopez led the clinical development of rituximab, which was approved in 1997 by the FDA for the treatment of lymphoma. Dr. Grillo-Lopez also supervised the development of Zevalin, which is the first radio-immunotherapy approved for the treatment of cancer. He received the Hope Funds Award for Excellence in Clinical Development from Dr. David Straus of Memorial Sloan-Kettering Cancer Center.
Judah Folkman, M.D-The Andrus Professor of Pediatric Surgery and Professor of Cell Biology at Harvard Medical School, is widely recognized as the founder of the field of angiogenesis research. He received the Hope Funds Award for Excellence in Medicine in recognition of this work from Hope Funds Trustee, Dr. David Keefe. In 1990, Dr. Folkman was elected to the National Academy of Sciences. He is also a member of the American Academy of Arts and Sciences, the American Philosophical Society, the Institute of Medicine of the National Academy of Sciences and Presidential appointment to the National Cancer Advisory Board of the National Institutes of Health.
Paula Kim-In recognition of co-founding the Pancreatic Cancer Action Network (PanCAN), the disease's first and only national patient advocacy organization, received the Hope Funds Award for Excellence in Advocacy. She was presented the award by Hope Funds Trustee, Dr. Ayesha Sitlani, Merck & Co.
Corporate Angel Network-As the only charitable organization in the United States whose sole mission is to ease the emotional stress, physical discomfort and financial burden of travel for cancer patients by arranging free flights to treatment centers using the empty seats on corporate aircraft flying on routine business has been a model of philanthropy. Thanks to the generous cooperation of 500 of America's top corporations, Corporate Angel Network has coordinated more than 25,000 flights since its founding in 1981. The President of Corporate Angel Network, Bonnie LeVar, accepted the Award for Excellence in Philanthropy on behalf of the organization from Hope Funds Trustee, Dr. Debbie Kennedy, Cephalon Corporation.
Following the poignant and heartfelt remarks by presenters and honorees, guests danced into the night accompanied by the lively music of the Bob Hardwick Sound.
The Hope Funds is especially grateful to the following leadership donors whose generosity helped make this event a great success: Mr. and Mrs. Charles V. Baltic III, Ms. Katherine Burdon, Mr. and Mrs. Ross Sinclair Cann, Mr. and Mrs. William Egan, Mr. and Mrs. L. Scott Frantz, Mr. John K. Naughton, Mr. John E. Parks, Mr. and Mrs. William Vareika, Dr. and Mrs. David L. Keefe for the use of their beautiful home, Acker Merrall & Co., The Catered Affair, Veuve Clicquot Champagne, Rentals Unlimited, Waters Edge Florist and the Junior Committee.

redpajama_set_name: RedPajamaCommonCrawl


text:
Town hall meeting: Adelabu states plan for better Oyo State
The Accord Governorship candidate in Oyo state, Chief Adebayo Adelabu has declared that his desire to lead the state is to properly reposition the pace setter state for greater development.
Adelabu made this known during a Town hall meeting organized by a radio station, Fresh Fm, Ibadan ahead of March 11 governorship Election.
The former Deputy Governor of the Central Bank stressed that Oyo state deserves to have a responsible and responsive leader who has the capacity and ability as well as financial experience to move the state from poverty to prosperity through people- oriented policy.
" I resigned my appointment as Deputy Governor of Central Bank because I believe I have the capacity to make a huge impact in governance. I had demonstrated these in both private and public sectors for over 27 years. We will position the state in such a way that there would be accelerated development in the state ".
"I want to assure you that every good policy of the immediate past Government under the administration of Late Governor Abiola Ajimobi will be sustained.This is important to put the state back to the right track and ensure rapid development in all sector across the state, "Adelabu said.
Stating his plans and road map to accelerated development, he said Health care system have suffered neglect due to the lip service paid to the sector.
The Accord Candidate explained that all General hospitals and primary health care centers in the State would wear new looks by giving adequate attention to welfare of staff and provisions of drugs.
" Our administrstion will pay adequate attention to environmental sanitation through the re-introduction of sanitary inspectors, Weekly and Monthly environmental sanitation exercise in the market to curtail the spread of diseases.
"My administration will also work on refuse collection and reduce the bottle neck in the process towards ensuring clean environment and moving the state forward. "Adelabu said.
Previous Posts Olajide Olatubosun felicitates with Christians at Christmas.
Next Posts Christmas: Bayo Adelabu urges moderation, prayers for Country


I am a 28 year-old single mother of two boys, ages 1 and 3. I have a full time job as the Sales and Marketing director of an extremely successful local wellness center here in Stuart, Florida. My job and small children keep me moving, and rarely allow down time for sickness or fatigue.
Working in the wellness industry I am exposed daily to a multitude of nutritional supplements, none of which have sparked any real interest in me….
Lack of prevention of large intestinal cancer by VPS, an extract of Coriolus versicolor mushroom.
Fungicidal value of wood tar from pyrolysis of treated wood.
In the recently published edition of the Journal of Integrated Medicine (Online version), Dr. Jean Monro of the Breakspear Hospital outlines the impact of Coriolus versicolor supplementation as immunonutrition in thirty-six (36) Chronic Fatigue Immune Dysfunction Syndrome (CFIDS) patients over a six week period.
1) Natural Killer Cells–before treatment the average NK cell level was average=129.64/mm3. After treatment this had increased to 175/mm3, an increase of 35%.


Having traveled across the country to help everyday people with their cooking challenges, Chef Tyler Florence has developed a unique perspective on how Americans like to eat and cook today. He is a champion for uncomplicated recipes, bright flavors and fresh food, which he believes is the type of cooking that comes from a "real kitchen" – a place dedicated to culinary honesty.
Tyler has received acclaim from the national culinary community for his creativity and dedication to the art of cooking. He has been recognized as a leading chef by publications such as Food & Wine, GQ, Wall Street Journal, USA Weekend and People.
In 1991, Tyler graduated with honors from the College of Culinary Arts at Johnson & Wales University in South Carolina. After relocating to New York City in 1992, he honed his culinary skills under the tutelage of some of the city's premier chefs, including Charlie Palmer at Aureole, Marta Pulini at Mad 61 and Rick Laakonen at River Café.
Confident of his culinary talent, Tyler accepted the Executive Chef's position at Cibo in 1995, where his original creations received applause from numerous New York City publications, such as New York Times,New York Magazine and Crain's New York Business.
In 1998, Tyler opened the critically acclaimed Cafeteria in Manhattan as Executive Chef; under his direction, the restaurant received a nomination for "Best New Restaurant" in Time Out New York.
While firmly establishing his reputation and credibility on the New York food scene, Tyler also made his television debut in 1996 with guest appearances on Food Network. Tyler's national appeal was confirmed with the launch of Food 911 in 1999. He also has hosted other Food Network shows, including Tyler's Ultimate, Planet Food, All American Festivals and My Country, My Kitchen. Tyler is a regular on NBC's TODAY show and has appeared on The View, Rosie, E! and Access Hollywood, among others. Florence has written Tyler Florence's Real Kitchen, Eat This Book: Cooking with Global Fresh Flavors and Tyler's Ultimate: Brilliant Simple Food to Make Any Time.
Do you want to hire Tyler Florence? Directly request a quote. In 48 hours we can send you the availability of Tyler Florence If you would like to book Tyler Florence, Entertainment Booking Agency is the right place. We will offer you the best price and contact the management or we directly contact Tyler Florence. For corporate appearances or speaking engagements you can contact our agents and the will help you true the process.
Tags: hire Tyler Florence, Tyler Florence booking, book Tyler Florence, Tyler Florence appearances, find more information on booking Tyler Florence for appearances, Tyler Florence speaking engagements, Tyler Florence endorsements/spokesperson, Tyler Florence appearance fees, Tyler Florence booking agency contact info, biography of Tyler Florence, Contact an artist booking talent agent find a speakers bureau that can book Tyler Florence, speaker booking agency for Tyler Florence, Tyler Florence booking agency, Tyler Florence booking for corporate event.
EBA is one of the biggest entertainment booking agencies in the World. We book hundreds of celebrities, artist, athletes and speakers in a year. Important to know is that we are not claiming to be the management of Tyler Florence. We are not the official agent for Tyler Florence. Companies from around the globe book these artists and speakers true our company be course we have one of the biggest networks and we always have direct contact with the artist or the management. We help you to find the right celebrities for your corporate of private events. Please contact one of our agents to get free advice and we will help to get the world-famous artist on your party.


text:
Volodymyr Antonyuk (, born 10 May 1979) is a Ukrainian Paralympic footballer who won a gold medal at the 2008 Summer Paralympics in China.

References

External links

1979 births
Living people
Paralympic 7-a-side football players of Ukraine
Paralympic gold medalists for Ukraine
Paralympic silver medalists for Ukraine
Paralympic medalists in football 7-a-side
7-a-side footballers at the 2004 Summer Paralympics
7-a-side footballers at the 2008 Summer Paralympics
7-a-side footballers at the 2012 Summer Paralympics
7-a-side footballers at the 2016 Summer Paralympics
Medalists at the 2004 Summer Paralympics
Medalists at the 2008 Summer Paralympics
Medalists at the 2012 Summer Paralympics
Medalists at the 2016 Summer Paralympics
21st-century Ukrainian people

redpajama_set_name: RedPajamaWikipedia


The little black tunic of dreams. Its layered chiffon style not only looks luxurious, but is going to be one of the most flattering styles out there. A ruffle hem, long sleeves and v-neck are what bring it to life though important with a little black tunic to keep your look fresh and modern. Perfect for partying, all it needs are metallic strappy sandals and matching earrings to get you in the mood.


A machine learning approach inspired by the human brain, Deep Learning is taking many industries by storm. Empowered by the latest generation of commodity computing, Deep Learning begins to derive significant value from Big Data. It has already radically improved the computer's ability to recognize speech and identify objects in images, two fundamental hallmarks of human intelligence.
Industry giants such as Google, Facebook, and Baidu have acquired most of the dominant players in this space to improve their product offerings. At the same time, startup entrepreneurs are creating a new paradigm, Intelligence as a Service, by providing APIs that democratize access to Deep Learning algorithms. Join us on September 16, 2014 to learn more about this exciting new technology and be introduced to some of the new application domains, the business models, and the key players in this emerging field.


The EDT Committee is looking for three additional members to join the committee.
If you are interested in serving the MRSA in this capacity and have an interest in Education, Development and Training, please consider joining the team.
Committee service offers opportunities for staff to grow personally and professionally, to develop leadership skills, gain unique experience, and make lasting connections with colleagues across campus.
One, two-year term 2018-20; and two, one-year terms 2018-19.
Please complete the Nomination Form if you would like to nominate a colleague.
Please complete the Nomination Campaign Statement if you would like to run for one of the above terms. Your nomination by a colleague is required.
Candidates will be announced on Friday, November 30.
The election will be held online from 9 a.m., Monday, December 10 to 4 p.m., Tuesday, December 11.
Results will be shared on Wednesday, December 12.
If you have any questions, please do not hesitate to contact the MRSA office.


text:
Prince of Wales & Duchess of Cornwall 9th July 2015
Fashion and farming-all part of Charles & Camilla's day as #WalesWeek continues
Cindy Stockman
Farming & PRIME Cymru the focus of Prince Charles's last day of #WalesWeek
Wednesday in Wales proves to be another busy day for Charles and Camilla
Baking bread, joining a chapter of the WI, Prince Charles dancing and The Duchess of Cornwall hosting tea party for sick children are just part of what the royal couple have participated in during this very busy 'Wales Week.'
Thursday proved to be yet another full schedule, and it began visiting something close to both Charles and Camilla 's heart: an organic farm.
Prince Charles and his wife toured 'Humble by Nature', a functioning organic farm run by broadcaster Kate Humble and her husband, Ludo Graham.
Humble and Graham saved the working farm from closure in 2010.
The farm has now expanded to become the centre for a broad array of activities. It includes a rural skills centre that employs local experts to teach courses such as livestock management, hedge-laying, dry stone walling, willow weaving, charcuterie, sheep shearing and sustainable bee-keeping.
The farm also has a farm shop and café, an adventure playground and houses a variety of rare breed farm animals. It continues to be a working farm and is home to tenant farmers Tim and Sarah Stephens, breeders of Welsh Mountain sheep and Hereford cattle.
During their visit, the royal couple viewed the animal sheds, the farm shop and the café.
Following the farm visit the heir to the throne, and his wife went their separate ways, attending individual engagements before meeting later to tour textile business Charles and Patricia Lester.
Prince Charles went on to visit High Glanau Manor and tour its listed Art & Crafts garden.
High Glanau is a country house and Grade II* listed building within the community of Cwmcarvan, Monmouthshire, Wales.
Set in 12 acres of gardens designed by H. Avray Tipping in 1922, High Glanau Manor is an important Arts & Crafts house. Charles, well known for his love of architecture certainly was in his element during his visit on Thursday.
H. Avray Tipping was the Architectural Editor of Country Life Magazine from 1907 until his death in 1933.
One might recall, Charles was the guest editor of the magazine in 2014 as part of his 65th birthday celebrations. The editorship of Country Life magazine was the royal's first time editing a print magazine.
Currently, the gardens are being returned to their former glory, preserving many of their original features including formal terraces, an octogonal pool, the glasshouse and pergola.
Helena Gerrish owns the manor and gardens. She has written a book on Edwardian Country Life and Avray Tipping and frequently lectures horticultural societies on the Manor's famous previous owner.
As Charles was touring High Glanau Manor, his wife paid a visit to Ancre Hill Vineyard.
Ancre Hill Estates' family run 4-hectare vineyard located in the heart of the Wye Valley. Biodynamically and organically certified, the Estate grows Pinot Noir, Chardonnay and Albarino.
A new state of the art Winery was completed this year.
Since 2011, Camilla has been President of the United Kingdom Vineyards Association, met with staff and officially opened the new winery during her visit.
The UKVA is the only organisation recognised by the Government and the wider community as representing the English and Welsh wine industry.
During her visit, The Duchess of Cornwall met with staff and supporters, before officially opening the new winery.
After their solo visits Charles and his wife we on to visit the studio of fashion designers Charles and Patricia Lester.
The firm is celebrating its 50th year in business. They specialise in creating unique luxury women's wear and interior textile art and their clientele include the likes of Adele, Barbara Streisand and Princess Michael of Kent.
During their visit, the royal couple visited the studio where the met with staff and supporter. They learned about businesses the unique process that takes the textiles from their original form through to the printed result. Before departing, The Prince and his wife unveiled a plaque to commemorate the 50th anniversary.
As the day began to come to a close, Prince Charles had one more visit to squeeze into a very busy Thursday. Charles mad a stop at General Dynamics UK Limited, a defence and aerospace manufacturer.
General Dynamics UK delivers the British Army's primary land capabilities. The facility produces the Bowman – the British Armed Forces tactical communications programme, and the SCOUT Specialist Vehicle (SV) – the replacement for the British Army's reconnaissance vehicle fleet.
During his visit, Charles met with staff watched various demonstrations and viewed some of the equipment that the firm produces, including some of the armoured vehicles mentioned above.
Friday will see 'Wales Week' come to close as Charles has a handful of engagements focussing on Pub is the Hub, PRIME Cymru, Cambrian Mountains Initiative and The Duchy Future Farming Programme.
Next week will see The Duchess of Cornwall inaugurate the new Wichelstowe Landing Stage in Swindon. Also on the books is Charles and his wife attending the 157th Great Yorkshire Show in Harrogate and Camilla visiting St. Peter's Eaton Square Church of England Primary School.
Featured photo credit: Michel Temer [cropped from orginal] via Flickr
Photo credit: Elleen Boal via Flickr
Related ItemsBritish Armed ForcesBritish armyCamillaCharlesCharles and Patricia LesterCountry Life Magazinecstockmancstockman3General Dynamics UK LimitedHigh Glanau ManorHumble by Naturekate humbleprince charlesThe Duchess of CornwallThe Prince of WalesUnited Kingdom Vineyards Associationwales weekwinewlaes
More in Prince of Wales & Duchess of Cornwall
Prince of Wales says next 18 months critical for humanity when dealing with rapid climate change and biodiversity loss
The Prince of Wales warned late last week that the next 18 months would be crucial to the survival of humanity...
Did Camilla's cake help England win the Cricket World Cup?
There's no official word on whether she baked it herself. However, as England's cricketers took part in a nail biting final...


A deeper focus on our students' success both on campus and after graduation has united the campus over the past year. In this issue of SF State Magazine, you'll learn more about Graduation Initiative 2025, a CSU-wide plan to boost graduation rates for all 475,000 students across all 23 campuses. At SF State, the hard work of faculty, staff and campus leadership led to more than 250 classes being added to the spring curriculum. We have also opened up some impacted programs and we have brought even greater emphasis to improving advising and financial services. Read more about how we're responding to this critical issue on page 14.
San Francisco State University has a proud history of our community speaking its own mind, encouraging our students to own their own minds and witnessing how this commitment builds special talents and leadership skills as our graduates return to their families and communities. We care deeply about ideas, and we ask our students to link those ideas to action.
The ways our alumni embed social justice into their careers is a proud point for this University. We highlight several alumni in this issue who have used their voices and their actions to change the world. One such alumnus is Cleve Jones, an AIDS and LGBT rights activist, who worked with Harvey Milk while attending the University. He then went on to co-found the San Francisco AIDS Foundation and conceived of the NAMES Project AIDS Memorial Quilt.
Higher education and the entire country are entering a new phase where our social and intellectual values will not only be challenged, but sorely needed. Now more than ever our values of courage, resilience, equity, community and intellectual exploration motivate us to be a positive force in the world.


Dr. Imran Khan Farooka is a Gastroenterologist from Lahore Dr. Imran Khan Farooka is a certified Gastroenterologist and his qualification is MBBS. Dr. Imran Khan Farooka is a well-reputed Gastroenterologist in Lahore. Dr. Imran Khan Farooka is affiliated with different hospitals and you can find his affiliation with these hospitals here.
Dr. Imran Khan Farooka Address and Contacts. Dr. Imran Khan Farooka is a Gastroenterologist based in Lahore. Dr. Imran Khan Farooka phone number is 0300 065 4357, (042) 111 257 294, 92-42-35162546, 35162547, 35162548, 35162549 and he is sitting at a private Hospital in different timeframes.
Dr. Imran Khan Farooka is one of the most patient-friendly Gastroenterologist and his appointment fee is around Rs. 500 to 1000. You can find Dr. Imran Khan Farooka in different hospitals from 6 pm to 8 pm. You can find the complete list and information about Dr. Imran Khan Farook's timings, clinics and hospitals.
If you are looking for a Gastroenterologist in Lahore then you can Dr. Imran Khan Farooka as a Gastroenterologist You can find the patient reviews and public opinions about Dr. Imran Khan Farooka here. You can also compare Dr. Imran Khan Farooka with other Gastroenterologist here with the compare button above.


text:
RSBI may refer to:
 Radiographic supporting bone index
 Rapid shallow breathing index


Welcome to Deal Properties.com, your source for quality apartment homes at affordable prices. Deal Properties has been in business in Central Virginia since 1995 and manages apartment communities in the Lynchburg, Roanoke and Appomattox areas. In addition, we also offer single family homes and duplexes.


text:
155 years after their capture, imprisonment, and deaths — Mayor Soglin vows no rest for 'traitors'
Posted by Dave Blaska | Aug 22, 2017
No doubt feeling the heat from fair-minded citizens and national ridicule, Madison Mayor Paul Soglin doubled down on his unilateral decision to purify and sanitize the Confederates Rest section of Forest Hill Cemetery.
Soglin this morning (8-21-17) issued a 2,160-word exercise in finger-wagging (Mayor's Statement Here) to justify ripping away a plaque describing the provenance of the southern Civil War soldiers' resting place. Soglin also vowed to remove the much larger stone listing the names of all 140 Confederate soldiers buried there in 1862 after being held prisoner of war at old Camp Randall.
The larger monument at Madison's Forest Hill Cemetery is not a Civil War monument. It was installed over 60 years after the end of the war. It is slab of propaganda paid for by a racist organization on public property when our city was inattentive to both the new form of slavery propagated by the donors with the Black Codes and to the meaning of that despicable fixture honoring slavery, sedition, and oppression.
Soglin labeled the private organization that erected plaque and stone as a "hate group." The soldiers buried there were "traitors." The whole thing, Soglin maintained, is part of a insidious national campaign to brainwash good northerners into accepting "the subjugation of blacks [and] to retain as much of the slave economy as possible."
Proper-thinking Madison progressives are safe! The insidious propaganda has been carted away. We may forgive the British but never the Mississipians!
The United Daughters of the Confederacy is "a racist and bigoted organization." They and the Klu Klux Klan (Soglin lists them together) "spread their lies far beyond the boundaries of the rebellious states."
The Daughters laid the plaque and erected the monument "as part of their national strategy of propaganda and determination to rewrite history providing a favorable interpretation of the Civil War" to honor "the treasonous rebels."
Soglin cites the City of New Orleans' removal of statues of Robert E. Lee, Jefferson Davis, and P.G.T. Beauregard. Its mayor notes that none of those three had a direct connection to that city. But the 140 buried at Forest Hill have a direct connection to Madison: they were captured by Wisconsin Union troops, many of them trained at Madison Camp Randall, were imprisoned and died there between April and July 1862 and are buried here.
Unlike New Orleans, there is no general resplendent in uniform riding high on a pedestal astride a snorting and stamping horse. Confederates Rest is quiet, simple, and sorrowful.
Soglin, without input from the Common Council, absent any demand from Madison's progressive community, acted unilaterally to scrub this obscure corner of the city of any hint of political incorrectness. He did so Wednesday, August 16, after a demonstrators engaged in a deadly clash in Charlottesville, Va., over the city's intention to remove a statue of General Lee. (And they say we conservatives have our talking points!)
Rather histrionically, Soglin linked Madison's quiet, modest resting place to the 1916 movie Birth of a Nation which celebrated the Ku Klux Klan, and 1939's Gone With the Wind which presented a benign view of slavery.
It may be well to remember Abraham Lincoln's words as the Civil War was winding down:
"With malice toward none, with charity for all, with firmness in the right, as God gives us to see the right, let us strive on to finish the work we are in, to bind up the nation's wounds."
And not reopen them.
Cross-posted with permission from Stately Blaska Manor.
Dave Blaska is a former reporter at the Capital Times, a former aide to Governor Tommy Thompson, and a former member of the Dane County Board. He is perhaps most famous for getting an actual permit to hold a protest in the rotunda in the Capitol, something unheard of in Madison. He currently blogs at Stately Blaska Manor and is a frequent guest on the Vicki McKenna show on WIBA in Madison.
PreviousWMC and 42 Local Chambers Announce Support for Foxconn Legislation
NextMedia Advisory: Governor Walker to Highlight Transform Milwaukee Accomplishments at 5th Anniversary Celebration
Dave Blaska
Dave Blaska is a former reporter at the Capital Times, a former aide to Governor Tommy Thompson, and a former member of the Dane County Board. He currently blogs at Stately Blaska Manor and is a frequent guest on the Vicki McKenna show on WIBA in Madison.
Randy Bryce Compares Drunk Driving Arrest Record with Civil Rights Record of John Lewis at Debate
In Wisconsin, we have a front-row seat to the pitfalls of liberal media bias
Bryce Spokesman Leaves Campaign for Real Celebrity Candidate
Federal rules distort local education policy


text:
Subgerencia de Turismo
Jr. Pizarro 412, 1er piso.
Centro Histórico de Trujillo.
(044) 484 240 Anexo 317
In the conquest and colonization of America, the Spaniards used horses as their best weapons. These animals brought to the new world the genotypic and phenotypic conditions inherited from the Spanish native herds and from the Berber horses that formed the ancient Andalusian horse brought by the Spaniards to the American Continent.
The Peruvian de Paso horse would inherit from the Andalusian the elevation of the previous members, in turn inheritance of the Frison imported by the Spaniards and the Berber amble and some phenotypic features.
The climate, soils and pastures of the new Viceroyalty of Peru were forming horses of great musculature, compact tendons and resistant helmets.
The coastal geography formed an austere horse in the feeding of great resistance in the hard days through the desert, obtaining by selection, horses able to withstand the inclemencies of the geographical environment improving its faculties, perfecting its mechanics of movement, increasing its rusticity, to go selecting a horse that will transport the rider more quickly and comfortably.
Already in the colonizing stage, it was necessary to form a horse for the times of peace. The sensitivity of the breeder of the new Viceroyalty of Peru made the race of Andalusians adapt to travel through the desertic geography of the coast as well as the valleys that cross it from east to west.
All these factors led to the formation of a soft horse because by moving its center of gravity forward – leaning slightly towards one side – it transports the rider without the rigors of the trot of other races that move it up and forward.
Its rusticity, accompanied by its mechanics of movement in its form of movement, it has made the Peruvian de Paso Horse the best average of performance during long and long distance horseback riding.
After more than four hundred years the breeder of step horses has created one of the most beautiful breeds of horses, an exceptional combination that contains comfort, rusticity, strength, longevity, brilliance and beauty in a single race that produces the best horse of chair of the world "CABALLO PERUANO DE PASO".
In Trujillo, you can live the experience of knowing a unique race in the world: the Caballo de Paso Peruano, recognized worldwide, due to the different characteristics that distinguish it from other breeds of horses, being the most notorious and famous its way of walking: the steps, from where it receives its name; it is a movement that gives much brilliance to the Peruvian horse.
In the city, there are daily exhibitions of 45 minutes where they offer a show that includes marinera norteña. It is in charge of the Association of Breeders and Owners of Peruvian Paso Horses and it is located four kilometers from downtown, in Via de Evitamiento Km. 569 in the district of Víctor Larco Herrera.
Schedule of the show: From Monday to Sunday: 13:30 to 14:45 hrs.
Fee: 30.00 soles for adults and 10.00 soles for children.
Cellphone: (044) 948 315 055 – 948 315 056.


text:
<?php namespace Vi\Core\Framework\Providers;

use Illuminate\Routing\Router;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider {

}

redpajama_set_name: RedPajamaGithub


Our product range includes a wide range of 100% cotton women 's black colour dress, 100% cotton women's petrol green dress, women cotton dress and women's round neck 100% cotton dress.
The Dry State brings you this limited edition V neck 100% cotton Dress having a quality which none can match. We are known to provide the best quality in the design's print. The design has NO FEEL print quality and doesn't fade with time..!! Meaning No Rubber Print, No Bleeding Of Colour And No Shrinkage Of Fabric..!! Grab Now..!!
As an esteemed name in the industry. Our offered ladies Cotton Dress are stitched with soft fabric with the aid of advanced fabrication techniques as per the set standards. Moreover, we offer these ladies dress in various designs, sizes and color combination as per your choice. Customers can avail these ladies dress from us in a promised time frame at reasonable rates.


text:
Ravalli Republic
(The Conversation is an independent and nonprofit source of news, analysis and commentary from academic experts.)
Nathan Jensen, University of Texas at Austin
(THE CONVERSATION) U.S. states and cities hand out tens of billions in taxpayer dollars every year to companies as economic incentives.
Why states and cities should stop handing out billions in economic incentives to companies | Opinion
Some states and cities are getting very little for the taxpayer dollars they hand out to companies. Atstock Productions/Shutterstock.com Nathan Jensen, University of Texas...
Penn Live 2019-07-13
Why economic incentives to companies should stop
Editor's note: This article, distributed by The Associated Press, was originally published on The Conversation website. The Conversation is an independent and nonprofit...
Finance & Commerce 2019-07-11
Stop handing out billions in economic incentives to companies | The Conversation
U.S. states and cities hand out tens of billions in taxpayer dollars every year to companies as economic incentives. These businesses are supposed to use the money,...
The Morning Journal 2019-07-15
One Trump Tax Cut Was Said to Help the Poor. A Billionaire Ended Up Winning Big.
Under a six-lane span of freeway leading into downtown Baltimore sit what may be the most valuable parking spaces in America. Lying near a development project controlled by...
truthout 2019-06-27
N.J. firm failed to create jobs in Ohio despite incentives. Then it received a $260 million tax break here.
Editor's Note: This article, first published here, was produced as part of a partnership between WNYC and ProPublica. WNYC is a member of the ProPublica Local Reporting Network. In January 2014, as Holtec International explored sites for a new national headquarters and high-tech manufacturing center, the New Jersey company told state officials that the Garden State had stiff...
A Huge Tax Break Went to a Politically Connected Company in New Jersey Despite Red Flags
by Jeff Pillets and Nancy Solomon, WNYC, and Alex Mierjeski, ProPublica In January 2014, as Holtec International explored sites for a new national headquarters and high-tech manufacturing center, the New Jersey company told state officials that the Garden State had stiff competition. A number of other states, including Ohio and South Carolina, had offered "robust proposals" to...
Delivery company goPuff left out key details before winning $39M N.J. tax break
The home delivery service goPuff failed to disclose a federal labor law violation to New Jersey officials when it applied for a $39 million corporate tax break last summer, a warehouse workers union said. It is the latest example of a company facing scrutiny for its application to the controversial Grow New Jersey tax incentive program, which is currently under investigation by...
Pharmaceutical giant Merck to pull out of economic incentives agreement with state, city of Austin ...
After internal decisions to pump the brakes on its local employment efforts, pharmaceutical manufacturer Merck & Co. will forfeit economic incentive funds from the city of Austin and the state of Texas. Merck, which develops medicine and conducts medical research, signed separate economic incentive agreements with Austin and Texas in 2017 totaling $7 million if the company hit...
Community Impact Newspaper
\'Guaranteed loser\': State taxpayers give companies over $360K for 1 new Detroit job
Michigan taxpayers are handing some of the area's largest corporations between $68,000 and $361,000 to create one new job. In several cases, it's unclear whether companies will create any jobs in return for hundreds of millions of tax dollars. Metro Times calculated the per-job cost to taxpayers for the Ford autonomous vehicle headquarters planned for Corktown's Michigan...
California should skip this opportunity
Who says California opposes everything Trump does? Our state's leaders are embracing at least one lousy presidential policy: opportunity zones. Trump's 2017 federal tax law allows investors to defer or eliminate federal taxes by transferring capital gains into investments in designated "opportunity zones" — census tracts that state officials claim are impoverished....
LA Daily News


text:
package org.waabox.bomb;

import java.lang.reflect.Method;
import java.util.Set;

import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

/** Intercept methods that matches with the given list of expressions.
 *
 * @author waabox (waabox[at]gmail[dot]com)
 */
public class BombMethodInterceptor implements MethodInterceptor {

  /** The Proxied object, it's never null.*/
  private final Object bombed;

  /** The Regex that holds the matches for the methods,
   * can be null if the given expressions are empty.
   */
  private final String regex;

  /** Creates a new instance of the
   * @param instance the instance to be bombed, cannot be null.
   * @param expressions the list of expressions, cannot be null.
   */
  public BombMethodInterceptor(final Object instance,
      final Set<String> expressions) {
    bombed = instance;
    if (expressions.isEmpty()) {
      regex = null;
    } else {
      StringBuilder sb = new StringBuilder();
      sb.append(".*(");
      for (String expression : expressions) {
        sb.append(expression).append('|');
      }
      sb.replace(sb.length() - 1, sb.length(), ").*");
      regex = sb.toString();
    }
  }

  /** {@inheritDoc}.*/
  public Object intercept(
      final Object proxy,
      final Method method,
      final Object[] arguments,
      final MethodProxy methodProxy) throws Throwable {
    if (regex != null && method.getName().matches(regex)) {
      throw new BombException(String.format(
          "Method %s in %s cannot be touch!",
          method.getName(),
          bombed.getClass().getName())
      );
    } else {
      return bombed.getClass()
          .getDeclaredMethod(method.getName(), method.getParameterTypes())
          .invoke(bombed, arguments);
    }
  }

}


text:
//
//  SPExportSettingsPersistence.m
//  sequel-pro
//
//  Created by Max Lohrmann on 09.10.15.
//  Copyright (c) 2015 Max Lohrmann. All rights reserved.
//
//  Permission is hereby granted, free of charge, to any person
//  obtaining a copy of this software and associated documentation
//  files (the "Software"), to deal in the Software without
//  restriction, including without limitation the rights to use,
//  copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the
//  Software is furnished to do so, subject to the following
//  conditions:
//
//  The above copyright notice and this permission notice shall be
//  included in all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
//  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
//  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
//  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
//  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
//  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
//  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
//  OTHER DEALINGS IN THE SOFTWARE.
//
//  More info at <https://github.com/sequelpro/sequelpro>

#import "SPExportSettingsPersistence.h"
#import "SPExportFileNameTokenObject.h"
#import "SPExportFilenameUtilities.h"
#import "SPExportController+SharedPrivateAPI.h"

/**
 * converts a ([obj state] == NSOnState) to @YES / @NO
 * (because doing @([obj state] == NSOnState) will result in an integer 0/1)
 */
static inline NSNumber *IsOn(id obj);
/**
 * Sets the state of obj to NSOnState or NSOffState based on the value of ref
 */
static inline void SetOnOff(NSNumber *ref,id obj);

@interface SPExportController (Private)

- (void)_updateExportAdvancedOptionsLabel;

@end

@interface SPExportController (SPExportSettingsPersistence_Private)

// those methods will convert the name of a C enum constant to a NSString
+ (NSString *)describeExportSource:(SPExportSource)es;
+ (NSString *)describeExportType:(SPExportType)et;
+ (NSString *)describeCompressionFormat:(SPFileCompressionFormat)cf;
+ (NSString *)describeXMLExportFormat:(SPXMLExportFormat)xf;
+ (NSString *)describeSQLExportInsertDivider:(SPSQLExportInsertDivider)eid;

// these will store the C enum constant named by NSString in dst and return YES,
// if a valid mapping exists. Otherwise will just return NO and not modify dst.
+ (BOOL)copyExportSourceForDescription:(NSString *)esd to:(SPExportSource *)dst;
+ (BOOL)copyCompressionFormatForDescription:(NSString *)esd to:(SPFileCompressionFormat *)dst;
+ (BOOL)copyExportTypeForDescription:(NSString *)esd to:(SPExportType *)dst;
+ (BOOL)copyXMLExportFormatForDescription:(NSString *)xfd to:(SPXMLExportFormat *)dst;
+ (BOOL)copySQLExportInsertDividerForDescription:(NSString *)xfd to:(SPSQLExportInsertDivider *)dst;

- (NSDictionary *)exporterSettings;
- (NSDictionary *)csvSettings;
- (NSDictionary *)dotSettings;
- (NSDictionary *)xmlSettings;
- (NSDictionary *)sqlSettings;

- (void)applyExporterSettings:(NSDictionary *)settings;
- (void)applyCsvSettings:(NSDictionary *)settings;
- (void)applyDotSettings:(NSDictionary *)settings;
- (void)applyXmlSettings:(NSDictionary *)settings;
- (void)applySqlSettings:(NSDictionary *)settings;

- (id)exporterSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (id)dotSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (id)xmlSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (id)csvSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (id)sqlSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type;

- (void)applyExporterSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (void)applyDotSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (void)applyXmlSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (void)applyCsvSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type;
- (void)applySqlSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type;

@end

#pragma mark -

@implementation SPExportController (SPExportSettingsPersistence)

#define NAMEOF(x) case x: return @#x
#define VALUEOF(x,y,dst) if([y isEqualToString:@#x]) { *dst = x; return YES; }

+ (NSString *)describeExportSource:(SPExportSource)es
{
	switch (es) {
		NAMEOF(SPFilteredExport);
		NAMEOF(SPQueryExport);
		NAMEOF(SPTableExport);
	}
	return nil;
}

+ (BOOL)copyExportSourceForDescription:(NSString *)esd to:(SPExportSource *)dst
{
	VALUEOF(SPFilteredExport, esd,dst);
	VALUEOF(SPQueryExport,    esd,dst);
	VALUEOF(SPTableExport,    esd,dst);
	return NO;
}

+ (NSString *)describeExportType:(SPExportType)et
{
	switch (et) {
		NAMEOF(SPSQLExport);
		NAMEOF(SPCSVExport);
		NAMEOF(SPXMLExport);
		NAMEOF(SPDotExport);
		NAMEOF(SPPDFExport);
		NAMEOF(SPHTMLExport);
		NAMEOF(SPExcelExport);
		NAMEOF(SPAnyExportType);
	}
	return nil;
}

+ (BOOL)copyExportTypeForDescription:(NSString *)etd to:(SPExportType *)dst
{
	VALUEOF(SPSQLExport, etd, dst);
	VALUEOF(SPCSVExport, etd, dst);
	VALUEOF(SPXMLExport, etd, dst);
	VALUEOF(SPDotExport, etd, dst);
	//VALUEOF(SPPDFExport, etd, dst);
	//VALUEOF(SPHTMLExport, etd, dst);
	//VALUEOF(SPExcelExport, etd, dst);
	return NO;
}

+ (NSString *)describeCompressionFormat:(SPFileCompressionFormat)cf
{
	switch (cf) {
		NAMEOF(SPNoCompression);
		NAMEOF(SPGzipCompression);
		NAMEOF(SPBzip2Compression);
	}
	return nil;
}

+ (BOOL)copyCompressionFormatForDescription:(NSString *)cfd to:(SPFileCompressionFormat *)dst
{
	VALUEOF(SPNoCompression,    cfd, dst);
	VALUEOF(SPGzipCompression,  cfd, dst);
	VALUEOF(SPBzip2Compression, cfd, dst);
	return NO;
}

+ (NSString *)describeXMLExportFormat:(SPXMLExportFormat)xf
{
	switch (xf) {
		NAMEOF(SPXMLExportMySQLFormat);
		NAMEOF(SPXMLExportPlainFormat);
	}
	return nil;
}

+ (BOOL)copyXMLExportFormatForDescription:(NSString *)xfd to:(SPXMLExportFormat *)dst
{
	VALUEOF(SPXMLExportMySQLFormat, xfd, dst);
	VALUEOF(SPXMLExportPlainFormat, xfd, dst);
	return NO;
}

+ (NSString *)describeSQLExportInsertDivider:(SPSQLExportInsertDivider)eid
{
	switch (eid) {
		NAMEOF(SPSQLInsertEveryNDataBytes);
		NAMEOF(SPSQLInsertEveryNRows);
	}
	return nil;
}

+ (BOOL)copySQLExportInsertDividerForDescription:(NSString *)eidd to:(SPSQLExportInsertDivider *)dst
{
	VALUEOF(SPSQLInsertEveryNDataBytes, eidd, dst);
	VALUEOF(SPSQLInsertEveryNRows,      eidd, dst);
	return NO;
}

#undef NAMEOF
#undef VALUEOF

- (IBAction)importCurrentSettings:(id)sender
{
	//show open file dialog
	NSOpenPanel *panel = [NSOpenPanel openPanel];

	[panel setAllowedFileTypes:@[SPFileExtensionDefault]];
	[panel setAllowsOtherFileTypes:YES];

	[panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
		if(result != NSFileHandlingPanelOKButton) return;

		[panel orderOut:nil]; // Panel is still on screen. Hide it first. (This is Apple's recommended way)

		NSError *err = nil;
		NSData *plist = [NSData dataWithContentsOfURL:[panel URL]
											  options:0
												error:&err];

		NSDictionary *settings = nil;
		if(!err) {
			settings = [NSPropertyListSerialization propertyListWithData:plist
													  options:NSPropertyListImmutable
													   format:NULL
														error:&err];
		}

		if(!err) {
			[self applySettingsFromDictionary:settings error:&err];
			if(!err) return;
		}

		// give an explanation for some errors
		if([[err domain] isEqualToString:SPErrorDomain]) {
			if([err code] == SPErrorWrongTypeOrNil) {
				NSDictionary *info = @{
					NSLocalizedDescriptionKey:             NSLocalizedString(@"Invalid file supplied!", @"export : import settings : file error title"),
					NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"The selected file is either not a valid SPF file or severely corrupted.", @"export : import settings : file error description"),
				};
				err = [NSError errorWithDomain:[err domain] code:[err code] userInfo:info];
			}
			else if([err code] == SPErrorWrongContentType) {
				NSDictionary *info = @{
					NSLocalizedDescriptionKey:             NSLocalizedString(@"Wrong SPF content type!", @"export : import settings : spf content type error title"),
					NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:NSLocalizedString(@"The selected file contains data of type "%1$@", but type "%2$@" is needed. Please choose a different file.", @"export : import settings : spf content type error description"),[[err userInfo] objectForKey:@"isType"],[[err userInfo] objectForKey:@"expectedType"]],
				};
				err = [NSError errorWithDomain:[err domain] code:[err code] userInfo:info];
			}
		}

		NSAlert *alert = [NSAlert alertWithError:err];
		[alert setAlertStyle:NSCriticalAlertStyle];
		[alert runModal];
	}];
}

- (IBAction)exportCurrentSettings:(id)sender
{
	//show save file dialog
	NSSavePanel *panel = [NSSavePanel savePanel];

	[panel setAllowedFileTypes:@[SPFileExtensionDefault]];

	[panel setExtensionHidden:NO];
	[panel setAllowsOtherFileTypes:NO];
	[panel setCanSelectHiddenExtension:YES];
	[panel setCanCreateDirectories:YES];

	[panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger returnCode) {
		if(returnCode != NSFileHandlingPanelOKButton) return;

		// Panel is still on screen. Hide it first. (This is Apple's recommended way)
		[panel orderOut:nil];

		NSError *err = nil;
		NSData *plist = [NSPropertyListSerialization dataWithPropertyList:[self currentSettingsAsDictionary]
																   format:NSPropertyListXMLFormat_v1_0
																  options:0
																	error:&err];
		if(!err) {
			[plist writeToURL:[panel URL] options:NSAtomicWrite error:&err];
			if(!err) return;
		}

		NSAlert *alert = [NSAlert alertWithError:err];
		[alert setAlertStyle:NSCriticalAlertStyle];
		[alert runModal];
	}];
}

- (NSArray *)currentCustomFilenameAsArray
{
	NSArray *tokenListIn = [exportCustomFilenameTokenField objectValue];
	NSMutableArray *tokenListOut = [NSMutableArray arrayWithCapacity:[tokenListIn count]];

	for (id obj in tokenListIn) {
		if([obj isKindOfClass:[NSString class]]) {
			[tokenListOut addObject:obj];
		}
		else if([obj isKindOfClass:[SPExportFileNameTokenObject class]]) {
			NSDictionary *tokenProperties = @{@"tokenId": [obj tokenId]};
			// in the future the dict can be used to store per-token settings
			[tokenListOut addObject:tokenProperties];
		}
		else {
			SPLog(@"unknown object in token list: %@",obj);
		}
	}

	return tokenListOut;
}

- (void)setCustomFilenameFromArray:(NSArray *)tokenList
{
	NSMutableArray *tokenListOut = [NSMutableArray arrayWithCapacity:[tokenList count]];
	NSArray *allowedTokens = [self currentAllowedExportFilenameTokens];

	for (id obj in tokenList) {
		if([obj isKindOfClass:[NSString class]]) {
			[tokenListOut addObject:obj];
		}
		else if([obj isKindOfClass:[NSDictionary class]]) {
			//there must be at least a non-empty tokenId that is also in the token pool
			NSString *tokenId = [obj objectForKey:@"tokenId"];
			if([tokenId length]) {
				SPExportFileNameTokenObject *token = [SPExportFileNameTokenObject tokenWithId:tokenId];
				if([allowedTokens containsObject:token]) {
					[tokenListOut addObject:token];
					continue;
				}
			}
			SPLog(@"Ignoring an invalid or unknown token with tokenId=%@",tokenId);
		}
		else {
			SPLog(@"unknown object in import token list: %@",obj);
		}
	}

	[exportCustomFilenameTokenField setObjectValue:tokenListOut];

	[self updateDisplayedExportFilename];
}

- (NSDictionary *)currentSettingsAsDictionary
{
	NSMutableDictionary *root = [NSMutableDictionary dictionary];

	[root setObject:SPFExportSettingsContentType forKey:SPFFormatKey];
	[root setObject:@1 forKey:SPFVersionKey];

	[root setObject:[exportPathField stringValue] forKey:@"exportPath"];

	[root setObject:[[self class] describeExportSource:exportSource] forKey:@"exportSource"];
	[root setObject:[[self class] describeExportType:exportType] forKey:@"exportType"];

	if([[exportCustomFilenameTokenField stringValue] length] > 0) {
		[root setObject:[self currentCustomFilenameAsArray] forKey:@"customFilename"];
	}

	[root setObject:[self exporterSettings] forKey:@"settings"];

	if(exportSource == SPTableExport) {
		NSMutableDictionary *perObjectSettings = [NSMutableDictionary dictionaryWithCapacity:[tables count]];

		for (NSMutableArray *table in tables) {
			NSString *key = [table objectAtIndex:0];
			id settings = [self exporterSpecificSettingsForSchemaObject:key ofType:SPTableTypeTable];
			if(settings)
				[perObjectSettings setObject:settings forKey:key];
		}

		[root setObject:perObjectSettings forKey:@"schemaObjects"];
	}

	[root setObject:IsOn(exportProcessLowMemoryButton) forKey:@"lowMemoryStreaming"];
	[root setObject:[[self class] describeCompressionFormat:(SPFileCompressionFormat)[exportOutputCompressionFormatPopupButton indexOfSelectedItem]] forKey:@"compressionFormat"];

	return root;
}

- (BOOL)applySettingsFromDictionary:(NSDictionary *)dict error:(NSError **)err
{
	//check for dict/nil
	if(![dict isKindOfClass:[NSDictionary class]]) {
		if(err) {
			*err = [NSError errorWithDomain:SPErrorDomain
									   code:SPErrorWrongTypeOrNil
								   userInfo:nil]; // we don't know where data came from, so we can't provide meaningful help to the user
		}
		return NO;
	}

	//check for export settings
	NSString *ctype = [dict objectForKey:SPFFormatKey];
	if (![SPFExportSettingsContentType isEqualToString:ctype]) {
		if(err) {
			NSDictionary *errInfo = @{
				@"isType":       ctype,
				@"expectedType": SPFExportSettingsContentType
			};
			*err = [NSError errorWithDomain:SPErrorDomain
									   code:SPErrorWrongContentType
								   userInfo:errInfo];
		}
		return NO;
	}

	//check for version
	NSInteger version = [[dict objectForKey:SPFVersionKey] integerValue];
	if(version != 1) {
		if(err) {
			NSDictionary *errInfo = @{
				@"isVersion":                          @(version),
				NSLocalizedDescriptionKey:             NSLocalizedString(@"Unsupported version for export settings!", @"export : import settings : file version error title"),
				NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:NSLocalizedString(@"The selected export settings were stored with version\u00A0%1$ld, but only settings with the following versions can be imported: %2$@.\n\nEither save the settings in a backwards compatible way or update your version of Sequel Pro.", @"export : import settings : file version error description ($1 = is version, $2 = list of supported versions); note: the u00A0 is a non-breaking space, do not add more whitespace."),version,@"1"],
			};
			*err = [NSError errorWithDomain:SPErrorDomain
									   code:SPErrorWrongContentVersion
								   userInfo:errInfo];
		}
		return NO;
	}

	//ok, we can try to import that...

	[exporters removeAllObjects];
	[exportFiles removeAllObjects];

	id o;
	if((o = [dict objectForKey:@"exportPath"])) [exportPathField setStringValue:o];

	SPExportType et;
	if((o = [dict objectForKey:@"exportType"]) && [[self class] copyExportTypeForDescription:o to:&et]) {
		[exportTypeTabBar selectTabViewItemAtIndex:et];
	}

	//exportType should be changed first, as exportSource depends on it
	SPExportSource es;
	if((o = [dict objectForKey:@"exportSource"]) && [[self class] copyExportSourceForDescription:o to:&es]) {
		[self setExportInput:es]; //try to set it. might fail e.g. if the settings were saved with "query result" but right now no custom query result exists
	}

	// set exporter specific settings
	[self applyExporterSettings:[dict objectForKey:@"settings"]];

	// load schema object settings
	if(exportSource == SPTableExport) {
		NSDictionary *perObjectSettings = [dict objectForKey:@"schemaObjects"];

		for (NSString *table in [perObjectSettings allKeys]) {
			id settings = [perObjectSettings objectForKey:table];
			[self applyExporterSpecificSettings:settings forSchemaObject:table ofType:SPTableTypeTable];
		}

		[exportTableList reloadData];
	}

	if((o = [dict objectForKey:@"lowMemoryStreaming"])) [exportProcessLowMemoryButton setState:([o boolValue] ? NSOnState : NSOffState)];

	SPFileCompressionFormat cf;
	if((o = [dict objectForKey:@"compressionFormat"]) && [[self class] copyCompressionFormatForDescription:o to:&cf]) [exportOutputCompressionFormatPopupButton selectItemAtIndex:cf];

	// might have changed
	[self _updateExportAdvancedOptionsLabel];

	// token pool is only valid once the schema object selection is done
	[self updateAvailableExportFilenameTokens];
	if((o = [dict objectForKey:@"customFilename"]) && [o isKindOfClass:[NSArray class]]) [self setCustomFilenameFromArray:o];

	return YES;
}

- (NSDictionary *)exporterSettings
{
	switch (exportType) {
		case SPCSVExport:
			return [self csvSettings];
		case SPSQLExport:
			return [self sqlSettings];
		case SPXMLExport:
			return [self xmlSettings];
		case SPDotExport:
			return [self dotSettings];
		case SPExcelExport:
		case SPHTMLExport:
		case SPPDFExport:
		default:
			@throw [NSException exceptionWithName:NSInternalInconsistencyException
										   reason:@"exportType not implemented!"
										 userInfo:@{@"exportType": @(exportType)}];
	}
}

- (void)applyExporterSettings:(NSDictionary *)settings
{
	switch (exportType) {
		case SPCSVExport:
			return [self applyCsvSettings:settings];
		case SPSQLExport:
			return [self applySqlSettings:settings];
		case SPXMLExport:
			return [self applyXmlSettings:settings];
		case SPDotExport:
			return [self applyDotSettings:settings];
		case SPExcelExport:
		case SPHTMLExport:
		case SPPDFExport:
		default:
			@throw [NSException exceptionWithName:NSInternalInconsistencyException
										   reason:@"exportType not implemented!"
										 userInfo:@{@"exportType": @(exportType)}];
	}
}

- (NSDictionary *)csvSettings
{
	return @{
		@"exportToMultipleFiles": IsOn(exportFilePerTableCheck),
		@"CSVIncludeFieldNames":  IsOn(exportCSVIncludeFieldNamesCheck),
		@"CSVFieldsTerminated":   [exportCSVFieldsTerminatedField stringValue],
		@"CSVFieldsWrapped":      [exportCSVFieldsWrappedField stringValue],
		@"CSVLinesTerminated":    [exportCSVLinesTerminatedField stringValue],
		@"CSVFieldsEscaped":      [exportCSVFieldsEscapedField stringValue],
		@"CSVNULLValuesAsText":   [exportCSVNULLValuesAsTextField stringValue]
	};
}

- (void)applyCsvSettings:(NSDictionary *)settings
{
	id o;
	if((o = [settings objectForKey:@"exportToMultipleFiles"])) SetOnOff(o,exportFilePerTableCheck);
	[self toggleNewFilePerTable:nil];

	if((o = [settings objectForKey:@"CSVIncludeFieldNames"]))  SetOnOff(o, exportCSVIncludeFieldNamesCheck);
	if((o = [settings objectForKey:@"CSVFieldsTerminated"]))   [exportCSVFieldsTerminatedField setStringValue:o];
	if((o = [settings objectForKey:@"CSVFieldsWrapped"]))      [exportCSVFieldsWrappedField setStringValue:o];
	if((o = [settings objectForKey:@"CSVLinesTerminated"]))    [exportCSVLinesTerminatedField setStringValue:o];
	if((o = [settings objectForKey:@"CSVFieldsEscaped"]))      [exportCSVFieldsEscapedField setStringValue:o];
	if((o = [settings objectForKey:@"CSVNULLValuesAsText"]))   [exportCSVNULLValuesAsTextField setStringValue:o];
}

- (NSDictionary *)dotSettings
{
	return @{@"DotForceLowerTableNames": IsOn(exportDotForceLowerTableNamesCheck)};
}

- (void)applyDotSettings:(NSDictionary *)settings
{
	id o;
	if((o = [settings objectForKey:@"DotForceLowerTableNames"])) SetOnOff(o, exportDotForceLowerTableNamesCheck);
}

- (NSDictionary *)xmlSettings
{
	return @{
		@"exportToMultipleFiles":     IsOn(exportFilePerTableCheck),
		@"XMLFormat":                 [[self class] describeXMLExportFormat:(SPXMLExportFormat)[exportXMLFormatPopUpButton indexOfSelectedItem]],
		@"XMLOutputIncludeStructure": IsOn(exportXMLIncludeStructure),
		@"XMLOutputIncludeContent":   IsOn(exportXMLIncludeContent),
		@"XMLNULLString":             [exportXMLNULLValuesAsTextField stringValue]
	};
}

- (void)applyXmlSettings:(NSDictionary *)settings
{
	id o;
	SPXMLExportFormat xmlf;
	if((o = [settings objectForKey:@"exportToMultipleFiles"]))     SetOnOff(o, exportFilePerTableCheck);
	[self toggleNewFilePerTable:nil];

	if((o = [settings objectForKey:@"XMLFormat"]) && [[self class] copyXMLExportFormatForDescription:o to:&xmlf]) [exportXMLFormatPopUpButton selectItemAtIndex:xmlf];
	if((o = [settings objectForKey:@"XMLOutputIncludeStructure"])) SetOnOff(o, exportXMLIncludeStructure);
	if((o = [settings objectForKey:@"XMLOutputIncludeContent"]))   SetOnOff(o, exportXMLIncludeContent);
	if((o = [settings objectForKey:@"XMLNULLString"]))             [exportXMLNULLValuesAsTextField setStringValue:o];

	[self toggleXMLOutputFormat:exportXMLFormatPopUpButton];
}

- (NSDictionary *)sqlSettings
{
	BOOL includeStructure = ([exportSQLIncludeStructureCheck state] == NSOnState);

	NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithDictionary:@{
		@"SQLIncludeStructure": IsOn(exportSQLIncludeStructureCheck),
		@"SQLIncludeContent":   IsOn(exportSQLIncludeContentCheck),
		@"SQLIncludeErrors":    IsOn(exportSQLIncludeErrorsCheck),
		@"SQLIncludeDROP":      IsOn(exportSQLIncludeDropSyntaxCheck),
		@"SQLUseUTF8BOM":       IsOn(exportUseUTF8BOMButton),
		@"SQLBLOBFieldsAsHex":  IsOn(exportSQLBLOBFieldsAsHexCheck),
		@"SQLInsertNValue":     @([exportSQLInsertNValueTextField integerValue]),
		@"SQLInsertDivider":    [[self class] describeSQLExportInsertDivider:(SPSQLExportInsertDivider)[exportSQLInsertDividerPopUpButton indexOfSelectedItem]]
	}];

	if(includeStructure) {
		[dict addEntriesFromDictionary:@{
			@"SQLIncludeAutoIncrementValue":  IsOn(exportSQLIncludeAutoIncrementValueButton),
			@"SQLIncludeDropSyntax":          IsOn(exportSQLIncludeDropSyntaxCheck)
		}];
	}

	return dict;
}

- (void)applySqlSettings:(NSDictionary *)settings
{
	id o;
	SPSQLExportInsertDivider div;

	if((o = [settings objectForKey:@"SQLIncludeContent"]))   SetOnOff(o, exportSQLIncludeContentCheck);
	[self toggleSQLIncludeContent:exportSQLIncludeContentCheck];

	if((o = [settings objectForKey:@"SQLIncludeDROP"]))    SetOnOff(o, exportSQLIncludeDropSyntaxCheck);
	[self toggleSQLIncludeDropSyntax:exportSQLIncludeDropSyntaxCheck];

	if((o = [settings objectForKey:@"SQLIncludeStructure"])) SetOnOff(o, exportSQLIncludeStructureCheck);
	[self toggleSQLIncludeStructure:exportSQLIncludeStructureCheck];

	if((o = [settings objectForKey:@"SQLIncludeErrors"]))    SetOnOff(o, exportSQLIncludeErrorsCheck);
	if((o = [settings objectForKey:@"SQLUseUTF8BOM"]))       SetOnOff(o, exportUseUTF8BOMButton);
	if((o = [settings objectForKey:@"SQLBLOBFieldsAsHex"]))  SetOnOff(o, exportSQLBLOBFieldsAsHexCheck);
	if((o = [settings objectForKey:@"SQLInsertNValue"]))     [exportSQLInsertNValueTextField setIntegerValue:[o integerValue]];
	if((o = [settings objectForKey:@"SQLInsertDivider"]) && [[self class] copySQLExportInsertDividerForDescription:o to:&div]) [exportSQLInsertDividerPopUpButton selectItemAtIndex:div];

	if([exportSQLIncludeStructureCheck state] == NSOnState) {
		if((o = [settings objectForKey:@"SQLIncludeAutoIncrementValue"]))  SetOnOff(o, exportSQLIncludeAutoIncrementValueButton);
		if((o = [settings objectForKey:@"SQLIncludeDropSyntax"]))  SetOnOff(o, exportSQLIncludeDropSyntaxCheck);
	}
}

- (id)exporterSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	switch (exportType) {
		case SPCSVExport:
			return [self csvSpecificSettingsForSchemaObject:name ofType:type];
		case SPSQLExport:
			return [self sqlSpecificSettingsForSchemaObject:name ofType:type];
		case SPXMLExport:
			return [self xmlSpecificSettingsForSchemaObject:name ofType:type];
		case SPDotExport:
			return [self dotSpecificSettingsForSchemaObject:name ofType:type];
		case SPExcelExport:
		case SPHTMLExport:
		case SPPDFExport:
		default:
			@throw [NSException exceptionWithName:NSInternalInconsistencyException
										   reason:@"exportType not implemented!"
										 userInfo:@{@"exportType": @(exportType)}];
	}
}

- (void)applyExporterSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	switch (exportType) {
		case SPCSVExport:
			return [self applyCsvSpecificSettings:settings forSchemaObject:name ofType:type];
		case SPSQLExport:
			return [self applySqlSpecificSettings:settings forSchemaObject:name ofType:type];
		case SPXMLExport:
			return [self applyXmlSpecificSettings:settings forSchemaObject:name ofType:type];
		case SPDotExport:
			return [self applyDotSpecificSettings:settings forSchemaObject:name ofType:type];
		case SPExcelExport:
		case SPHTMLExport:
		case SPPDFExport:
		default:
			@throw [NSException exceptionWithName:NSInternalInconsistencyException
										   reason:@"exportType not implemented!"
										 userInfo:@{@"exportType": @(exportType)}];
	}
}

- (id)dotSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	// Dot is a graph of the whole database - nothing to pick from
	return nil;
}

- (void)applyDotSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	//should never be called
}

- (id)xmlSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	// XML per table setting is only yes/no
	if(type == SPTableTypeTable) {
		// we have to look through the table views' rows to find the current checkbox value...
		for (NSArray *table in tables) {
			if([[table objectAtIndex:0] isEqualTo:name]) {
				return @([[table objectAtIndex:2] boolValue]);
			}
		}
	}
	return nil;
}

- (void)applyXmlSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	// XML per table setting is only yes/no
	if(type == SPTableTypeTable) {
		// we have to look through the table views' rows to find the appropriate table...
		for (NSMutableArray *table in tables) {
			if([[table objectAtIndex:0] isEqualTo:name]) {
				[table replaceObjectAtIndex:2 withObject:@([settings boolValue])];
				return;
			}
		}
	}
}

- (id)csvSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	// CSV per table setting is only yes/no
	if(type == SPTableTypeTable) {
		// we have to look through the table views rows to find the current checkbox value...
		for (NSArray *table in tables) {
			if([[table objectAtIndex:0] isEqualTo:name]) {
				return @([[table objectAtIndex:2] boolValue]);
			}
		}
	}
	return nil;
}

- (void)applyCsvSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	// CSV per table setting is only yes/no
	if(type == SPTableTypeTable) {
		// we have to look through the table views' rows to find the appropriate table...
		for (NSMutableArray *table in tables) {
			if([[table objectAtIndex:0] isEqualTo:name]) {
				[table replaceObjectAtIndex:2 withObject:@([settings boolValue])];
				return;
			}
		}
	}
}

- (id)sqlSpecificSettingsForSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	BOOL structure = ([exportSQLIncludeStructureCheck state] == NSOnState);
	BOOL content   = ([exportSQLIncludeContentCheck state] == NSOnState);
	BOOL drop      = ([exportSQLIncludeDropSyntaxCheck state] == NSOnState);

	// SQL allows per table setting of structure/content/drop table
	if(type == SPTableTypeTable) {
		// we have to look through the table views rows to find the current checkbox value...
		for (NSArray *table in tables) {
			if([[table objectAtIndex:0] isEqualTo:name]) {
				NSMutableArray *flags = [NSMutableArray arrayWithCapacity:3];

				if (structure && [[table objectAtIndex:1] boolValue]) {
					[flags addObject:@"structure"];
				}

				if (content && [[table objectAtIndex:2] boolValue]) {
					[flags addObject:@"content"];
				}

				if (drop && [[table objectAtIndex:3] boolValue]) {
					[flags addObject:@"drop"];
				}

				return flags;
			}
		}
	}
	return nil;
}

- (void)applySqlSpecificSettings:(id)settings forSchemaObject:(NSString *)name ofType:(SPTableType)type
{
	BOOL structure = ([exportSQLIncludeStructureCheck state] == NSOnState);
	BOOL content   = ([exportSQLIncludeContentCheck state] == NSOnState);
	BOOL drop      = ([exportSQLIncludeDropSyntaxCheck state] == NSOnState);

	// SQL allows per table setting of structure/content/drop table
	if(type == SPTableTypeTable) {
		// we have to look through the table views' rows to find the appropriate table...
		for (NSMutableArray *table in tables) {
			if([[table objectAtIndex:0] isEqualTo:name]) {
				NSArray *flags = settings;

				[table replaceObjectAtIndex:1 withObject:@((structure && [flags containsObject:@"structure"]))];
				[table replaceObjectAtIndex:2 withObject:@((content   && [flags containsObject:@"content"]))];
				[table replaceObjectAtIndex:3 withObject:@((drop      && [flags containsObject:@"drop"]))];
				return;
			}
		}
	}
}

@end

#pragma mark -

NSNumber *IsOn(id obj)
{
	return (([obj state] == NSOnState)? @YES : @NO);
}

void SetOnOff(NSNumber *ref,id obj)
{
	[obj setState:([ref boolValue] ? NSOnState : NSOffState)];
}


text:
De Viris Illustribus (Sobre hombres ilustres en latín) es una colección de ciento treinta y cinco pequeñas biografías, compiladas por el padre de la Iglesia latina del siglo IV, Jerónimo de Estridón, más tarde san Jerónimo. Él completó su trabajo en Belén el año 392-3.

Contenido
La obra consiste en un prólogo y ciento treinta y cinco capítulos, cada uno una breve biografía. El propio Jerónimo es el objeto del último capítulo. Una versión griega del libro, posiblemente hecha por el protagonista del capítulo ciento treinta y cuatro, Sofronio, también sobrevivió. Muchas de las biografías recogen la vida de importantes cristianos en la historia de la Iglesia, y se centran en su faceta de escritores. Se ha dicho que fue "escrita como una obra apologética para probar que la Iglesia había producido hombres instruidos". El libro fue dedicado a Flavio Lucio Dextro, que sirvió como secretario de Teodosio I y como prefecto de la guardia pretoriana del emperador Honorio (r. 395–423). Dextro era el hijo de Paciano de Barcelona, que fue muy elogiado en la obra.

Biografías

A continuación están listados los ciento treinta y cinco biografiados. Los números son de los capítulos encontrados en la obra:

Relato de san Jerónimo sobre sí mismo

En la conclusión de De Viris Illustribus, san Jerónimo nos ofrece su propia biografía como el más reciente ejemplo de escritor erudito de los cristianos. En el capítulo ciento treinta y cinco, resume su carrera así:

Referencias

Enlaces externos
  (en latín).
  (en griego).
  Gennadius de Marsella, una continuación de De Viris Illustribus de san Jerónimo, editada en 1913 (en inglés).
   (en inglés).

Libros religiosos
Obras de Jerónimo
Ensayos del siglo IV


About 15% of KGHM's revenue is generated by the sale of silver. The company is one the world leaders in the production of this precious metal.
Silver, due to its unique physical properties, is used in the jewellery, electronic and electrical industries as well as in medicine, optics, the power industry, automotive industry and in many others. In general, industry consumes 40% of the world's silver production. As a precious metal it is also treated as a valuable investment.
In 2015, according to the estimations of GFMS (Gold Fields Mineral Services), globalmined silver production amounted to 887 million ounces (27 579 tonnes). In 2015 KGHM produced 1283 tonnes of silver, ranking second in the world.
Currently, around 75% of metallic silver is obtained as a by-product of copper ore mining. KGHM's mineable resourcesbased on concessions currently held, including the new Deep Głogów deposit, are estimated at 1.1 billion tonnes of copper ore with a 2.08% copper grade and 58g/t of silver.
Silver is delivered in the form of granules to facilities manufacturing photographic materials, jewellery and metal companies producing alloys with Ag content. Silver in the form of bars is mainly delivered to banks. In 2013, the sales of silver on the domestic Polish market constituted 2% of the overall silver sales volume, while 98% was exported. The largest international customers of silver are the United Kingdom, Australia and the USA.


Sinus infection means infection of the layer lining the sinuses in skull. The tissue covering these sinuses, when get infected by a virus, bacteria or a fungi, can result in sinus infection.
The term sinusitis means inflammation of the sinus cavity lining tissue. However the term is used in conjunction with sinus infection (debatable) of paranasal sinuses.
A sinus means a hollow cavity in our skull. There are four of them and their lining tissue secreted fluid constantly. However this secreted fluid is in acceptable amounts and is removed from the sinuses constantly too.
They have many functions in the skull including keeping it lighter, shape and for resonance of sound.
In case of any blockage, the fluid might accumulate in them. This may get it filled with fluid and harmful germs like bacteria, viruses and fungi.
Acute sinusitis: sudden onset sinusitis, including symptoms of runny or stuffy nose, facial pain and cold like symptoms. Acute sinusitis lasts for almost 4 weeks or less.
Subacute sinusitis: it's the sinusitis for more than 4 week, upto 8 weeks, with similar symptoms as the acute sinusitis.
Chronic sinusitis: The sinus inflammation lasting for 8 or more weeks is called chronic sinusitis.
Recurrent sinusitis: This term refers to multiple sinusitis attaks per year.
Toothache and fever means that infection needs to be managed seriously now. However, the sinus infection should be treated seriously in its initial stage too, as the blockage in sinuses can lead to increase in infection very easily.
Infection has to be treated to stop the progress of the symptoms of chronic sinusitis.
The doctor will have a detailed history and physical examination to come to the diagnosis. Investigations to confirm sinusitis might be performed too such as X-ray, nasal endoscopy, CT-scan, blood tests, etc. in some cases.
For treatment of sinusitis if it's acute, the physician may suggest decongestants and steam inhalations. However don't use them or at least don't over use them without the prescription of the qualified physician. The doctor might prescribe antibiotics too if the infection needs them. Most of the issues can be solved by merely simple medication or remedies too though.
For the treatment of sinus infection once it has got chronic, then better care is needed. Avoiding cold is one of the main aims to prevent aggravation of the condition. Warm moist air or vaporizer steam from pan of boiling water may help. Make sure that the water is taken off from the heat source.
Saline nose drops are considered safe as a home remedy for the treatment of chronic sinusitis. Nasal decongestant drops and sprays help in the condition too but should be used only on doctors (ent) prescription, and only up to the duration he recommends. Antibiotic and oral steroids are also prescribed sometimes for the treatment of chronic sinus infection.


Sweat sets between finger crevices as you try furiously to wipe it into your thighs, leaving dark stains on your pants. But the effort is only awarded with more damp, zebra lines.
You can hear the clock ticking away. Not at its usual pace, but in a furious dance. "ticktickticktickticktickticktick..." Glancing around you see no big bens and realize that the clock exists solely inside your head. And you are running with it, trying to always sprint a step ahead.
Need to calm down. Need to think more clearly.
The strain begins at your tailbone and runs its path through your veins, up the spine, tensing the neck, and seeping into the fiery brain. The pirates are chasing each other like on the Caribbean ride of your favorite childhood place, Disneyland. Around and around they go. Spinning circles.
No need to rush. Nothing to worry about.
Squeezing the temples, you try to force the time bomb to stop its ticking. Massaging away the thousands of stresses, pictures of flowers, song, laughter, and love flash moments across the screen. Rolling the film in an endless flight as if the credits will never be reached, the story forever playing.
Be in control. Be smart. Be strong.
You finally take that one last breathe of entirety.... and slowly let it wind its way out. Steady. Sure of whom you are. Who you want to be.
The journey may be long and treacherous. But you will be there. Sitting on top, relaxed and sighing your heart's content. A smile bright across your face knowing it was all worth the while.
And the view from the top? Amazing.


Maria Santos in the lab with the mobile robots.
Researchers at the Georgia Institute of Technology have recently carried out an interesting study exploring how motion and shape descriptors that are associated with particular emotions can be incorporated into swarm behaviors to create evocative artistic expositions. Their research, recently published on arXiv, combines engineering and robotics with artistic expression in an innovative way.
"I have always been interested in the arts, as I am a musician myself," Maria Santos, the study's principal investigator, told TechXplore. "When I arrived to Georgia Tech as a graduate student in Electrical Engineering, I was offered the possibility of doing some research with Prof. Magnus Egerstedt that combined music theory and swarm robotics as a way of creating meaningful human interactions with the robots and I immediately got excited. As that research progressed, we wondered how to use a swarm of robots in performances such as music concerts or theatre plays, and how these small, relatively simple robots could convey a message to the audience, just like artists do. That is when we realized we should study the relationship between motions and emotions."
In their study, Santos and Prof. Egerstedt used concepts from social psychology related to the expression of emotions to create a new set of swarm behaviors. Each of these behaviors is designed to depict a fundamental emotion in a creative way.
In psychology, 'fundamental,' or 'basic' emotions are the six key emotions expressed by humans: happiness, surprise, anger, fear, disgust and sadness. To effectively convey these emotions using a swarm of miniature mobile robots, the researchers developed new behaviors inspired by shapes and motions rooted in social psychology theory.
"Behaviors associated with positive emotions (happiness and surprise) are based on round shapes," Santos explained. "In the case of happiness, the robots joyfully move along a circle with ripples at a moderate speed. For surprise, the radius of the circle expands with time, making the robots spiral outward."
To express negative emotions, on the other hand, the robots move in a jerky and erratic way, as social psychology theory associates such emotions with more unstable types of movements. For instance, to represent sadness, the robots move in a circle at a pace that Santos describes as "painfully slow," while for fear, the robots scatter over the stage in a fragmented way, as if they were afraid of each other.
"To display disgust, the robots move slowly from the center of the stage to its boundaries," Santos added. "Finally, for anger, the robots move aggressively toward each other at the center of the stage, giving the illusion of a heated argument. "
To evaluate the effectiveness of their swarm behaviors in conveying basic emotions, Santos and Prof. Egerstedt asked 45 people to watch videos of robots performing these behaviors and then complete a survey. They found that most participants who had observed the robots' 'performances' were able to correctly guess what emotion they were supposed to portray.
"Given that the robots in the swarm are very simple and do not have a face or a body, it is remarkable that these simple behaviors are directly identified by the spectators as conveying the intended emotions," Santos said. "This suggests that swarm robotics has a lot of potential to be used in artistic performances."
The study carried out by Santos and Prof. Egerstedt suggests that social psychology theory, particularly abstract descriptors associated with the fundamental human emotions, could inform the development of expressive and evocative swarm behaviors. In the future, these behaviors could help to create fascinating new performances and artistic displays, in which robots play an active role.
"We now want to continue expanding this framework of using robotic swarms in artistic expositions and performances by introducing widely used elements for scenic arts, such as music and dance," Santos said. "For example, one could think of a swarm of robots as a dance troupe to support a performance: how should these robots move to the music to fit the particular style of the musical piece but also the emotional landscape of the performance?"