IELTS Academic Task 1 Correction: Changes in Annual Spending of a U.K School – 1.
The pie charts give information about the percentages of the total expenditures per year on five different tasks in a particular school in the United Kingdom in during the years of 1981, 1991 and 2001. (during = time) Well-written.
Overall, it can be clearly seen that the largest proportion of spending was on teachers' salaries, while the insurance costs accounted for the least percentage of all share in these aforementioned years. (these refers to the years written above. no need to write aforementioned.) Good job!
In 1981, teachers' salaries had a accounted 40 percent of all the spending, which (which refers to spending and not teacher's salaries. Please connect it with the noun it modifies. In 1981, teachers' salaries, which accounted for 40 percent of the total expenses, was 20 folds greater than ……..) was 20 fold greater than the expense of insurance. Furniture and equipment spending as well as the resources for books had a proportion of the 15 percent of the whole expenditure during 1981. (Please note: An year wise structure of answer prevents you from comparing teachers' salaries from one year to another year. To make proper comparisons, please devote complete sentences to "one expenses head". In those sentences cover all years. Example: Teachers salaries, which accounted for 40 percent of total expenses in 1981, increased by 10 percent in 1991 and then declined marginally to 45 percent in 2001. Insurance contributed just 2 percent to total spending and increased marginally to 3 percent in 1991. However, in 2001, it winessed a dramatic increase to 8 percent.) One sentence on teachers' salaries and two on insurance covering all years.
Looking at the details of 1991, In 1991 (brevity) annual spending made on teachers' salaries rose to 50 percent, following a slight decrease to 45 percent in 2001. In addition, spending on insurance just only went up to a level of 3 percent in 1991, which was 2 percent lower than the furniture and equipment part (What makes you think this is the main feature? Please avoid comparing one category with another in NUMBERS. This will open a pandora's box necessitating you to compare one category with all four. While comparing make sure that the comparison is REALLY IMPORTANT. For instance – highest, lowest, etc.). In these three years, spending on other workers' wages, resources such as books and furniture and equipment experienced minor fluctuations.
To get our expert assistance, please contact us.
If you want to know more about us please visit our Facebook Page.
IELTS Essay Correction: The Internet is the Most Important Invention.
IELTS Essay, December 2017: Learn About Other Countries.


The amendments in the calculation of BSE's blue chip index SOFIX took effect yesterday, September 13. Insurance and reinsurance DZI and Biovet were left out and replaced by Kaolin, Sparky Eltos and Euroins.
The number of companies within the index is now 17, however, BTC's new owner declared intentions to delist the company soon.
The average price/earnings ratio (P/E) of the companies within the index, based on results over the past 12 months, stands at a little over 27, according to profit.bg data. Most companies in Bulgaria do not post financial results each quarter, which makes the calculation of their 12-months data a difficult task.
We have calculated the 12-month results on the basis of the 6-months reports. We have to take into consideration the fact that reports posted throughout the year show preliminary data, and may differ from the audited report at the end of the year.
The total profit of all companies in SOFIX stands at nearly 410 mln leva, or 209.629 mln euros (not counting the negative result of Petrol AD, which is the only SOFIX company to post a loss).
The stock of Elana Agricultural Land Opportunity REIT, Chimimport and Orgachim have the lowest P/E – below 20.
The P/E of all other companies is over 20, Sparky Eltos boasts the highest – a little over 64. Five of the companies have a P/E ratio higher than 40, and four bewteen 30 and 40.
By comparison, the US Dow Jones index has a P/E of 15.78, however, we should not forget that our market is still a developing one.
*Industrial Holding Bulgaria is in the middle of capital increase prodecures at the moment, so we have included the corrected price.


Google recently launched a business photos program to help businesses attract customers. Specially trained "Google Trusted Independent Photographers" provide 360-degree interactive panoramas of the interiors of businesses – Virtual Tours. These Virtual Tours are seen on Google Search Results, Maps, Earth, and Google + pages. Additionally they can be added to a businesses Website and Facebook FanPage. Businesses get higher visibility when consumers search on Google maps for a particular type of business in a geographic area, since the Local+ listings are found at the top of the results page.
Potential customers get a virtual tour of the business, so that they can imagine themselves being at the location to determine if they want to visit in person. This new program can be found in selected cities and countries. Currently, photographers are documenting businesses in the U.S., Canada, Australia, New Zealand, France, Japan and the UK. In the U.S., cities include: Chicago, New York, Los Angeles, San Francisco, Miami, Denver, Boston, and Seattle. Recently photographer Jack von Eberstein of OnlineBusinessTours.com earned certification from Google to bring this service to Washington businesses.
To be eligible, a business must have a Google Local+ page listing which is free. Most businesses can participate in this program, some that have include: restaurants, retail stores, beauty salons, auto dealerships, small dental and medical practices and health clubs such as a yoga facility. Any Businesses interested should contact OnlineBusinessTours.com to determine if it is eligible to be photographed. This is a paid service provided by Google Independent Photographers.
More information about this program is provided on the Google site http://maps.google.com/businessphotos.
Google Business Photographers also provide a set of "Point of Interest" images pertinent to a business such as: store hours, menus, awards, and interesting decor. Business owners may upload their own photos in addition to the ones from Google.
Google photographers are accomplished independent professional photographers who are participating in this program. They have been certified by Google to produce 360 degree HDR panoramas.


Q. How do I translate the numbers and letters to find a case?
The report of Gore v. Harris, decided by the Florida Supreme Court in 2000, begins on page 524 in volume 773 of the Southern Reporter, Second Series.


text:
The Season of Adventists: Can Ben Carson's Church Stay Separatist amid Booming Growth?
The denomination gains one million each year. Some want to be more evangelical.
Sarah Eekhoff Zylstra| January 22, 2015
Image: Photos by Ellen G. White Estate and BGEA / DeMoss
One of the Seventh-day Adventist Church's most famous sons, retired neurosurgeon Ben Carson, is seeking evangelical support for a likely 2016 presidential bid. But the global leader of his church worries that the thriving denomination is becoming too mainstream.
In 2014, for the 10th year in a row, more than 1 million people became Adventists, hitting a record 18.1 million members. Adventism is now the fifth-largest Christian communion worldwide, after Catholicism, Eastern Orthodoxy, Anglicanism, and the Assemblies of God.
But even as Adventist schools and hospitals spread, president Ted N. C. Wilson is concerned about assimilation.
"Don't be tempted by the Devil to blend in with the crowd or be 'politically correct,' " Wilson said during his annual sermon in October. "Don't proclaim a 'generic' Christianity or a 'cheap-grace Christ,' which does not point to the distinctive biblical truths to be declared worldwide" by Adventists (who regard themselves as God's faithful remnant).
Wilson listed ways that Satan is attacking Adventism, including attempts to make it easier to join; advancing Pentecostal worship styles; and people moving "independently" from the main church.
Many of those warnings seemed aimed at the global church's North American Division (NAD). (Though only about 1 million Adventists live in North America, they send out nearly half of the church's missionaries and operate 13 of its colleges.) Many NAD members are seeking more dialogue with mainstream evangelicals. The NAD has also overwhelmingly approved women's ordination, despite a global denominational ban.
Some Adventists worry ...
Adventists | Church Growth | Denominations | Evangelicalism
January/February 2015, Vol. 59, No. 1, Pg 18, "The Season of Adventists"
More From: Sarah Eekhoff Zylstra @sarahezylstra
The Church and Pastoral Leadership
How to Disagree Nicely but Not Lose Your Convictions
Everything is not a biblical issue—but who decides?
Tim Muelhoff and Richard Langer
The Capitol Attack Signaled a Post-Christian Church, Not Merely a Post-Christian Culture
Last year's events in DC threatened not only American democracy but also evangelical witness.
PortuguêsFrançais简体中文繁體中文
The Season of Adventists: Can Ben Carson's Church ...

redpajama_set_name: RedPajamaCommonCrawl


text:
Getting Cozy With… Alaskan Faction!
Getting Cozy With
Hi, we are the four piece upbeat indie band Alaskan Faction. We've been together since March of 2012 and we formed while looking for an interesting escape from our monotonous degrees at the University of Nottingham (a various assortment of Physics, Finance and Physiotherapy). Over the past year we've refined our sound that follows influences ranging from Bombay Bicycle Club, Foals, Two Door Cinema Club, Peace and Swim Deep. We were recently played on BBC Radio 1 by Huw Stephens and would love to spend the summer gigging all over the UK. You can find all our songs on SoundCloud where they are free to download.
Facebook / / Twitter // SoundCloud //
[youtube http://www.youtube.com/watch?v=ePUXrCKe1E8?feature=player_detailpage&w=640&h=360]
Getting Cozy With… Richie Ashwin!
Song of the Day: "We're Just Waiting For Our Friends"
One thought on "Getting Cozy With… Alaskan Faction!"
ryanhyde93 says:
I really like this song and hope these guys can come to Australia!


Most of us have experienced once or more than once in our life where we felt that we stood in a cross road. Doubting. Confused. Hopeless. Maybe even disbelieving. Do you remember the feeling? There is a saying during my seminary years that stuck in my mind: "if you are standing in a cross road, just stand still and wait for the light to guide you." I have to go through a crossroad every year ... and indeed, the light guided me, that is why I am here today.
Over the past four weeks we are reflecting on the person of Jesus. We have focused for three consecutive Sundays on the Eucharistic presence of Jesus. And in the midst of the many gods that the world offers us we continue to choose in serving our God. The early companions of Jesus were confronted with the dilemma of choosing between the world and the Lord. The gospel tells us that some of the disciples left Jesus because they cannot accept everything that Jesus is teaching them regarding the truth. Jesus is asking us today: "do you also wish to go away?" Try to find the answer in the deepest recesses of your heart. What does your heart say? Are you going to walk away from the Lord? How many times that we are asked by Jesus to be a brother or sister to someone in need? Are we going to walk away? How many times that we are asked to give time to serve the Church or help in our parish programs and projects? Are we going to walk away?
May we all find the answer today, in our hearts. May we also say: "where shall we go, Lord?" May we find the courage to say today: "as for me and my house, we will serve the Lord."
Last week we reflected on the Eucharist. We will never have enough time if we talk about the Eucharist. Volumes of books have been written about it. Saints are all in-love with the Eucharist. This maybe elementary but fundamental to go back and talk about the Eucharist as if you are attending your first catechism class. The Eucharist is at the VERY CENTER of our Catholic faith. Last Sunday I said that Pope Benedict XVI said that the Church cannot exist without the Eucharist. For two thousand years, this has been the most revered TRUTH about our faith. The Eucharist is the bloodline of our Catholic life.
The gospel tells us again the pressing truth about Jesus as the Bread from Heaven. Jesus said that because He is the one who came down from heaven, people cannot come to the Father except through Him. He who has seen the Father is the way to the Father. Should we say more? Jesus is present with us in the Eucharist. He is present with you and for you. But the question is - "are we present with Him?"
Let us pray for ourselves that we may truly present ourselves before Jesus in the Eucharist to listen to Him and to receive Him worthily. Let us pray for our faith community here at Saint Mark's, St Mary's and Holy Trinity that as we continue to build a community of love, we may continue to grow in our love and devotion to the Eucharist, the source of our strength and the center of our faith community. Let us make Saint Mark's, St Mary's and Holy Trinity Parishes a truly Eucharistic community. AMEN.
Jesus is the life-giving bread.
Today, the Church invites us to reflect on Jesus the Bread who came down from heaven. God, the Father so love His people that He sent His only begotten Son to become our food. He feeds us with Himself. He is the Bread of Life. In our world today, many people suffer from spiritual malnutrition, from hunger that seems cannot be sufficed by any worldly things. Many people feel unsatisfied, unfulfilled, and unhappy. They thought that the unquenchable thirst they experience can be cured by material wealth or power and fame but the more they disconnect themselves from the source of true happiness the farther away they become from being the person that God created them to be - an image of the Creator.
God has made us for Himself. Saint Augustine puts it beautifully when he said: "you have created us and drawn us to yourself, oh God and our heart is restless until it rests in you." But that doesn't end there - God sustains His creation. Yes, not only that God created us, He also nourishes us. Pope Benedict XVI said, "The Church simply doesn't exist without the Eucharist." Bread becomes Body and wine becomes Blood: the greatest wonder of the world. And it happens not only 2,000 years ago in the first Eucharist at the Last Supper but it happens every single Mass at every single altar anywhere, everywhere and we are blessed to have been witnessing this greatest miracle on earth every time we go to Mass.
We should be familiar that each Mass concludes with the words: "go forth." The priest doesn't just say it because it is written in the sacramentary. Jesus wants us to go forth and fulfill our mission. Yes, brothers and sisters, there is a mission that we are all called to do. He wants us to become the bread for others. Jesus wants us to be broken and shared just as His body is broken and shared in every altar at every Mass. Our life after having been united with Christ becomes a life-giving bread as well. Let us ask ourselves: "is my life a bread that gives life?" Do I nourish others by the witnessing of my life? Do I feed others with good news? Do I share my life through acts of charity?
Let us pray to the Lord that the miracle He does WITH US continues to nourish other people with our own life as bread, broken and shared.


text:
Factceleb /biography/max-scherzer-bio-wiki-eyes-mlb-contract-girlfriend-wife-children-net-worth-divorce
Fact Celeb
Max Scherzer - Biography
Net Worth:
1.91 meter (6 feet 3 inch)
98 kg (216.05 lb)
Heterochromia - blue (right), brown (left)
Bicep Size:
Chest Size:
Waist Size:
Born on :
Birth Name /
Maxwell M. Scherzer
Chesterfield, Missouri, USA
Horoscope:
Father's Name:
Brad Scherzer
Jan Scherzer
Alex Scherzer (younger brother)
Parkway Central High School
Multi-ethnic (German, English)
Sexual Orientation:
Married Date:
Wife's Name:
Erica May
Brooklyn May-Scherzer (daughter)
Kacey Hart May-Scherzer (daughter)
Who is Max Scherzer?
Max Scherzer is a baseball player by profession and American by nationality. He is currently the pitcher for Washington Nationals of Major League Baseball (MLB).
Max Scherzer – Bio, Age, Parents, Siblings
Max Scherzer's birth took place on July 27, 1984, in Chesterfield, Missouri, USA. He was born as Maxwell M. Scherzer to mother Jan Scherzer and father Brad Scherzer. He is not the only child of his parents and has a sibling- younger brother Alex Scherzer, who died by suicide in 2012.
Max Scherzer in high school yearbook (Image: stltoday)
Education, Ethnicity
For education, he attended Parkway Central High School and after graduation in 2003 enrolled at the University of Missouri. Scherzer has heterochromia iridium and his right eye is blue and his left eye is brown.
Scherzer's ethnicity includes English and German.
Max Scherzer – Girlfriend, Wife, Children, Divorce
Max Scherzer met Erica May at the University of Missouri and started dating. Both were baseball pitchers there but May's heart condition prevented her from playing. He and his longtime girlfriend married on 23 November 2013.
He and his wife welcomed daughters Brooklyn May-Scherzer in November 2017 and Kacey Hart May-Scherzer on July 4 2019. The couple is raising their daughter without rumors of divorce or extra-marital affairs.
Erica is an activist, human rights advocate, having worked with multiple non-profit organizations. Moreover, both Max and Amy are passionate about animal rescue and rehabilitation.
Also read: Aaron Judge - Baseball player for New York Yankees
Max Scherzer, Erica May
(The Georgetowner)
Max Scherzer – Career
Scherzer grew up as a St. Louis Cardinals fan. He played baseball, football, and basketball in high school. He was even selected in the 2003 Major League Baseball (MLB) draft in the 43rd round (1,291st overall) by St. Louis Cardinals. But he declined the offer and joined the University of Missouri.
Also read: Noah Syndergaard - Baseball player for New York Mets
With Teams
In 2006 he was chosen in the first round and 11th overall in the 2006 MLB draft by Arizona Diamondbacks. He played for the team until the 2009 season. On December 9, 2009, Max Scherzer was traded to Detroit Tigers and played with them until 2014. In 2013 he was won the 2013 AL Cy Young Award after the successful season.
On January 21, 2015, Scherzer signed a 7 year, $210 million including $50 million signing bonus contract with Washington Nationals. He won his second Cy Young Award in 2016 and the third one in 2017.
Max Scherzer (Forbes)
Max Scherzer – Awards, Nominations
In addition to three Cy Young Award, Scherzer has won 2 Players Choice Award, 3 Esurance MLB, 2 Players Choice Award and has been named Baseball Digest Pitcher of the Year (2013), NL Pitcher of the Month five times, and The Sporting News Starting Pitcher of the Year three times.
Also read: Yu Darvish - Baseball player for Texas Rangers
Max Scherzer – Net Worth, Salary
His net worth is estimated to be around $50 million while his annual salary has been revealed to be $22 million.
Max Scherzer – Facebook, Twitter, Instagram
On social media, Max Scherzer is active on Twitter, Facebook, Instagram with several thousands of followers.
Also read: Chase Utley - Former baseball player
We endeavour for accuracy. If you believe our content has any misinformation, violates your copyright, or you want to propose an update, please feel free to contact us.
Tags : MLB Detroit Tigers Washington Nationals Arizona Diamondbacks Major League Baseball pitcher baseball player Max Scherzer
celebritynetworth
Malik McDowell Bio, Wiki, NFL, Arrest, Girlfriend, Net Worth, Instagram, Twitter
Kyle Kuzma – Bio, Wiki, Contract, Salary, Girlfriend, Mother, Stats, Net Worth
Thomas Thibodeau – Bio, Wiki, Height, Net Worth, Wife, Children, Head Coach
Arie Luyendyk Jr. – Bio, Wiki, Racer, The Bachelor, Wife, Children, Girlfriend, Net Worth, Divorce
Gleyber Torres – Bio, Wiki, Wife, Height, Stats, MLB, Girlfriend, Children, Divorce, Net Worth
Thomas Vonn – Bio, Wiki, Wife, Children, Girlfriend, Divorce, Ski, Parents, Brother, Net Worth
Ty Dillon – Bio, Wiki, NASCAR, Wife, Children, Family, Net Worth, Instagram
Julio Cesar Chavez Jr. - Bio, Wiki, Wife, Children, Fight, Net Worth, Record, Parents, Ethnicity
Mike Evans – Bio, Wiki, Stats, Wife, Children, Salary, Girlfriend, Siblings, Murder
Lee Westwood – Bio, Wiki, Golf, Wife, Children, Divorce, Girlfriend, Parents, Siblings, Net Worth
Drew Dober – Wife, UFC, Girlfriend, Net Worth, Mother, Sister
Tommy Fury – Wiki, Bio, Height, Brothers, Love Island, Girlfriend, Wife, Children, Divorce
Kathryn Tappen – Bio, Wiki, Husband, NBC, Children, Boyfriend, Divorce, Net Worth, Salary, Family
Valeri Bure Bio, Age, Father, Brother, Games, The Panthers, Winery, Height, Wife, Children, Net Worth
Rui Hachimura – Bio, Wiki, NBA, Parents, Height, Girlfriend, Net Worth, Wife, Children, Divorce
P. K. Subban – Bio, Wiki, Wife, Parents, Children, Girlfriend, Net Worth, Siblings, Salary, Divorce
Seth Rollins Bio, Wiki, WWE, Real name, Brother, Girlfriend, Wife, Children, Net Worth
Chris Eubank Jr. Bio, Wiki, Height, Girlfriend, Wife, Children, Net Worth, Boxing, Parents
Ada Hegerberg - Bio, Career, Net Worth, Husband, Children
Jermall Charlo – Bio, Wiki, Twin Brother, Height, IG, Girlfriend, Wife, Net Worth, Children
Islam Makhachev – Parents, Siblings, Net Worth, UFC, Ethnicity
Hope Solo – Bio, Wiki, Height, Net Worth, Boyfriend, Husband, Children, Divorce
Milan Lucic – Bio, Wiki, NHL, Wife, Children, Girlfriend, Divorce, Net Worth, Salary
Daniel Suarez – Bio, Wiki, NASCAR, Girlfriend, Wife, Family, Net Worth, Children
Jim Duggan Bio, Wiki, WWE, WWF, Wife, Children, Net Worth, Death
Iker Casillas Bio, Wiki, Real Madrid, Porto, Goalkeeper, Girlfriend, Wife, Children, Net Worth, Height


text:
Performance assessment of intelligent transportation systems using data envelopment analysis
Yuko J. Nakanishi, John Falcocchio
Civil and Urban Engineering
Data Envelopment Analysis (DEA) is a powerful, non-parametric technique that allows the comparison of diverse decision-making units (DMUs) and provides a summary measure of performance for each agency. Due to the special circumstances faced by public agencies, this mathematical programming technique is particularly suited for the assessment of public sector performance. Public agencies have multiple and frequently conflicting objectives, and difficult-to-price inputs and outputs. Also, public agencies operate in diverse environments with different service area characteristics and constraints. Other techniques that have been employed in the past include comparison of agency performance with the average agency. DEA is distinguished by the fact that it creates a best practice frontier and evaluates the performance of each agency against that frontier. This paper discusses the potential for DEA to make significant contributions to the evaluation of public sector investments in ITS technologies.
Research in Transportation Economics
Data envelopment analysis
Nakanishi, Y. J., & Falcocchio, J. (2004). Performance assessment of intelligent transportation systems using data envelopment analysis. Research in Transportation Economics, 8, 181-197. https://doi.org/10.1016/S0739-8859(04)08009-6
Performance assessment of intelligent transportation systems using data envelopment analysis. / Nakanishi, Yuko J.; Falcocchio, John.
In: Research in Transportation Economics, Vol. 8, 2004, p. 181-197.
Nakanishi, YJ & Falcocchio, J 2004, 'Performance assessment of intelligent transportation systems using data envelopment analysis', Research in Transportation Economics, vol. 8, pp. 181-197. https://doi.org/10.1016/S0739-8859(04)08009-6
Nakanishi YJ, Falcocchio J. Performance assessment of intelligent transportation systems using data envelopment analysis. Research in Transportation Economics. 2004;8:181-197. https://doi.org/10.1016/S0739-8859(04)08009-6
Nakanishi, Yuko J. ; Falcocchio, John. / Performance assessment of intelligent transportation systems using data envelopment analysis. In: Research in Transportation Economics. 2004 ; Vol. 8. pp. 181-197.
@article{65845ef43a694bc0a3817ff1b92e76c6,
title = "Performance assessment of intelligent transportation systems using data envelopment analysis",
abstract = "Data Envelopment Analysis (DEA) is a powerful, non-parametric technique that allows the comparison of diverse decision-making units (DMUs) and provides a summary measure of performance for each agency. Due to the special circumstances faced by public agencies, this mathematical programming technique is particularly suited for the assessment of public sector performance. Public agencies have multiple and frequently conflicting objectives, and difficult-to-price inputs and outputs. Also, public agencies operate in diverse environments with different service area characteristics and constraints. Other techniques that have been employed in the past include comparison of agency performance with the average agency. DEA is distinguished by the fact that it creates a best practice frontier and evaluates the performance of each agency against that frontier. This paper discusses the potential for DEA to make significant contributions to the evaluation of public sector investments in ITS technologies.",
author = "Nakanishi, {Yuko J.} and John Falcocchio",
journal = "Research in Transportation Economics",
publisher = "JAI Press",
T1 - Performance assessment of intelligent transportation systems using data envelopment analysis
AU - Nakanishi, Yuko J.
AU - Falcocchio, John
N2 - Data Envelopment Analysis (DEA) is a powerful, non-parametric technique that allows the comparison of diverse decision-making units (DMUs) and provides a summary measure of performance for each agency. Due to the special circumstances faced by public agencies, this mathematical programming technique is particularly suited for the assessment of public sector performance. Public agencies have multiple and frequently conflicting objectives, and difficult-to-price inputs and outputs. Also, public agencies operate in diverse environments with different service area characteristics and constraints. Other techniques that have been employed in the past include comparison of agency performance with the average agency. DEA is distinguished by the fact that it creates a best practice frontier and evaluates the performance of each agency against that frontier. This paper discusses the potential for DEA to make significant contributions to the evaluation of public sector investments in ITS technologies.
AB - Data Envelopment Analysis (DEA) is a powerful, non-parametric technique that allows the comparison of diverse decision-making units (DMUs) and provides a summary measure of performance for each agency. Due to the special circumstances faced by public agencies, this mathematical programming technique is particularly suited for the assessment of public sector performance. Public agencies have multiple and frequently conflicting objectives, and difficult-to-price inputs and outputs. Also, public agencies operate in diverse environments with different service area characteristics and constraints. Other techniques that have been employed in the past include comparison of agency performance with the average agency. DEA is distinguished by the fact that it creates a best practice frontier and evaluates the performance of each agency against that frontier. This paper discusses the potential for DEA to make significant contributions to the evaluation of public sector investments in ITS technologies.
JO - Research in Transportation Economics
JF - Research in Transportation Economics


14 Mar: Tower Sacco is in Nairobi!
Tower Sacco is Now in Nakuru . Visit our Branch Located at Tropical House next to Kitchen Planet Behind Gilanis Supermarket.
Tower Sacco involved in environmental conservation and green energy in partnership with Greenpot Enterprises.


I took Monday, Memorial Day, off from writing to give my family all my attention. I stayed at home Sunday night. We had a campfire under the stars, and many sunny walks. Oodles of fun were had. (I need a rest.) We spent exceptional quality time together. It was a wonderful long weekend!
That was great. You are such a good example and I am glad you were able to stay home for the night and spend time with your family.


text:
import logging
from pyvisdk.exceptions import InvalidArgumentError

########################################
# Automatically generated, do not edit.
########################################

log = logging.getLogger(__name__)

def VirtualMachineRuntimeInfoDasProtectionState(vim, *args, **kwargs):
    '''The DasProtectionState object describes the vSphere HA protection state of a
    virtual machine (VM).'''

    obj = vim.client.factory.create('ns0:VirtualMachineRuntimeInfoDasProtectionState')

    # do some validation checking...
    if (len(args) + len(kwargs)) < 1:
        raise IndexError('Expected at least 2 arguments got: %d' % len(args))

    required = [ 'dasProtected' ]
    optional = [ 'dynamicProperty', 'dynamicType' ]

    for name, arg in zip(required+optional, args):
        setattr(obj, name, arg)

    for name, value in kwargs.items():
        if name in required + optional:
            setattr(obj, name, value)
        else:
            raise InvalidArgumentError("Invalid argument: %s.  Expected one of %s" % (name, ", ".join(required + optional)))

    return obj

redpajama_set_name: RedPajamaGithub


Nature S Miracle Just For Cats Stain And Odor Remover Msds is free HD wallpaper. This wallpaper was upload at April 24, 2019 upload by admin in .You can download it in your computer by clicking resolution image in Download by size:. Don't forget to rate and comment if you interest with this wallpaper.


text:
Pitschugin () ist der Familienname folgender Personen:

 Iwan Pawlowitsch Pitschugin (1901–1944), sowjetisch-russischer General
 Maxim Borissowitsch Pitschugin (* 1974), russischer Skilangläufer

redpajama_set_name: RedPajamaWikipedia


About CST Studio Suite 2017. The electromagnetic simulation software CST STUDIO SUITE is the culmination of many years of research and development into the most accurate and efficient computational solutions for electromagnetic designs in a wide range of frequencies - static to optical. The 2017 release builds further on CST's synthesis and simulation capabilities, with new features for filter design, interference analysis and multiphysics simulation.
About CST Computer Simulation Technology AG. CST offers accurate, efficient computational solutions for electromagnetic design and analysis. Our 3D EM simulation software is user-friendly and enables you to choose the most appropriate method for the design and optimization of devices operating in a wide range of frequencies.
You might already know that a definitive agreement was signed regarding Dassault Systèmes (3DS) acquiring CST. The transaction was completed on 30 September, 2016.


I have been using Spinal Decompression on my disc herniation patients and getting excellent results. Now it seems that every other doctor has jumped on the spinal decompression band wagon, especially in the Manhattan area. As a doctor that does spinal decompression we take on a tremoundous amount of debt by purchasing a expensive table and spending money on advertising. Not every patient that walks through your will qualify for this procedure, some may not have thier finances in order. I only take patients that I know will see excellent results with. When someone forks over their hard earned money you better show results. Spinal decompression can really effectively treat herniated discs, spinla stenosis and Sciatica. If you are looking for doctors that specialize in Spinal decompression in Manhattan, New York I recommend you visit www.nycdisc.com which is a website of doctors comminted to Non-Surgical Spinal Decompression.


Spence Shelton is the Lead Pastor of Mercy Church in Charlotte, NC. Spence believes God has called Mercy Church to be a part of seeing a gospel awakening in Charlotte that gets carried to the ends of the earth. Spence has authored numerous small group studies including co-authoring The Meaning of Marriage small group study with Tim & Kathy Keller.
Prior to planting Mercy Church in 2015, Spence served as a pastor at the Summit Church in Raleigh-Durham, NC.
This free 6-week Bible study was based on the new NIV Biblical Theology Study Bible, previously published as the NIV Zondervan Study Bible. Click here to see inside.


text:
Q: Removing several blank lines in XLS using Apache POI HSSF with an incrementing loop I need to remove several lines of an excel xls sheet.
These lines always contain the same first cell thats why i check the first cell of all rows to find these rows
SSFCell myCell = myRow.getCell(0);
            myCell.setCellType(Cell.CELL_TYPE_STRING);
            String foundString = myCell.getStringCellValue();
            if(foundString.equals(searchString)){
                foundRows.add(rowCount);
            }
            rowCount++;

I then go on and "remove" those rows using removeRow which nulls all values
public static void removeRows() {

    List<Integer> foundRowsToDelete = new ArrayList<Integer>();
    //Copy values to another list
    for(int i=0; i<foundRows.size(); i++){
        foundRowsToDelete.add(foundRows.get(i));
    }
    //Delete values from rows, leaving empty rows
    while(foundRowsToDelete.size()!=0){
        int rowIndex = foundRowsToDelete.get(0);
        Row removingRow = mySheet.getRow(rowIndex);
        if (removingRow != null) {
            mySheet.removeRow(removingRow);
            foundRowsToDelete.remove(0);
    }
}
    //Move empty rows to bottom of the sheet
    for(int i = 0; i < mySheet.getLastRowNum(); i++){
        if(isRowEmpty(i)){
            mySheet.shiftRows(i+1, mySheet.getLastRowNum(), -1);
            i--;
        }
    }
}

I check if they are empty through using the duplicated rowcounter
//Comparision of previously detected empty rows and given row count
public static boolean isRowEmpty(int suspectedRowNumber) {
    for(int i=0;i<foundRows.size();i++){
        if (suspectedRowNumber == foundRows.get(i)){
            foundRows.remove(i);
            return true;
        }
    }
    return false;
}

However only the first of these rows gets deleted. The rest will stay empty.
I therefore assume that there is something wrong with some incrementing done by me, but i just can't figure out exactly why.
Thanks for your help in advance.

A: It's not immediately clear why your code isn't working, but I look at a couple things to debug

*

*Your foundRowsToDelete ArrayList is being populated with values contained in the foundRows Array.  Are you sure what you expect to find in foundRows is actually there.

*Is there a reason you don't remove the row when initally iterating through the rows in your sheet?  Maybe something like this:

Sheet sheet = workbook.getSheetAt(0);
    For (Row row : sheet) {
        SSFCell myCell = row.getCell(0);
        if(myCell.getCellType() == Cell.CELL_TYPE_STRING){
            String foundString = myCell.getStringCellValue();
            if(foundString.equalsIgnoreCase(searchString){
                // why not just remove here?
                sheet.removeRow(row);

            }
        }
    }
}

redpajama_set_name: RedPajamaStackExchange


text:
Box Office Stats
Search Amazon.com
Search Vudu
Buy the Soundtrack from Amazon.com
Download the Soundtrack from iTunes
Buy Related Merchandise from Amazon.com
Blue Planet (Il pianeta azzurro)
Add Movie to Favorites
Box Office Performance
See the information below to see how this movie performed in the Box Office results reported by studios.
Opened in Theaters - Thursday, January 1, 1981 (42 years ago)
No Box Office reports were found for this movie.
Notes About This Information
Our records date back to November 2007, and include the movies that appeared in the Top 10 Movies report each weekend since. If the movie did not place in the top 10 movies for a week, it will not appear in the reports above.
When a movie drops out of the Top 10 and then comes back again, the gap is represented by a row marked with ⋮. Due to an error in the data that is supplied to us, the "Box Office Change" value for the subsequent week is cleared when that occurs.
New Movies - Box Office - Favorite Movies - All Movies
Coming Soon - Search


text:
Education Week's blogs > Learning the Language See our English-Language Learners coverage
Education Week reporters cover English-language learners, bilingual education, and civil rights issues and explore the educational, policy, and social issues surrounding ELLs in U.S. schools.
« Language Politics Play Into GOP Primary Race in Puerto Rico | Main | English-Language Learners on Rise In Appalachia »
More to the Story on Dual-Language Immersion
By Lesli A. Maxwell on March 23, 2012 9:20 AM
I've got a new story up on edweek.org this morning that takes a look at the steady growth in dual-language immersion programs across the nation and why educators are increasingly adopting this approach to teach English learners.
The story has a bit of a kitchen sink feel to it because I tried to wedge in a number of examples from across states and a range of national perspectives. Because of that, and because I can't write a 5,000-word story, I had to leave out scenes from the dual-language classrooms I visited in California and I didn't get to address how states and districts are finding the teachers they need for these very demanding programs.
I told you a little bit already about the dual-language classrooms at Gardner Academy in San Jose and how, in the program's third year at the school, students, especially the English learners, are showing promising progress.
I also hung out at Abraham Lincoln High School in San Francisco, a large, comprehensive high school that has a thriving Chinese immersion program. At Lincoln, a mix of native Chinese speakers—some are immigrants while others are U.S. born—and non-native speakers who have been learning the language since the early grades, are taking advanced language courses together. These students are also taking at least two content courses a year in Chinese. One of those courses is biology, taught by teacher Fan Fang, who, with both a Chinese language credential and biology content credential, is a bit of a rare find.
Finding teachers like Fang is one of the biggest barriers to expanding dual-language programs into the upper grades. And in states like Utah and North Carolina where there is not a huge source of local teachers with bilingual skills, education officials are using agreements with countries such as Mexico, China, and Taiwan to hire teachers for up to three or five years. In Utah, the foreign teachers are paired with local teachers to split the instructional day into English and the second language.
Though Lincoln doesn't offer a dual Spanish immersion program per se, it does have an advanced language pathway in Spanish. Some students in the advanced Spanish courses have come through a dual-language program in Spanish/English in elementary and middle school, while others are native Spanish speakers who might still be English learners. Spanish teacher Suzann Baldwin is a big advocate for her students and has convinced many of the native Spanish speakers who have become more English-dominant to keep developing their primary language to become fully bilingual and biliterate.
The students I interviewed at Lincoln understand the advantages they will have in college and beyond with their bilingualism and biliteracy. And these are not kids of privilege. Most of them come from low income families and started out their schooling careers as English learners.
Itinerant English-Learners Pose Challenges for School Systems
U.S. Economy Needs More Foreign Language Studies to Stay Competitive, Report Says
As More States Adopt Bilingualism Seal, Equity Concerns Arise
Many Native American Students Don't Learn About Their Languages and Cultures in School
English-Learners and Graduation: How ESSA Could Penalize ELLs and Their Schools
--- Select a Category --- Accountability (25) Adult Education (7) Assessment (46) Bilingual Education (268) Charter Schools (19) Civil Rights (79) College Access (13) College Preparation (8) Common Core State Standards (64) Court Cases (21) Curriculum (52) DACA (12) Demographics (71) Districtwide Issues (20) Dual language (71) Election (11) ELLs in Secondary Schools (128) ELLs With Disabilities (33) Federal Policy (239) Good Read (11) Graduation Rates (33) Heritage Languages (126) Immigration (314) Innovations (23) Instruction (21) Job Changes (2) Native American Students (48) NCLB Waivers (4) Next generation science standards (2) Parent Engagement (29) Preschool (23) Reclassification Rates (45) Refugees (50) Research (116) Resources (51) Special education (22) Standards (19) State policy (124) Stimulus Funds (1) Students With Interrupted Formal Schooling (26) Teacher Training (52) Technology (5) Testing (92) Translation/Interpretation (44) Trend Watch (45)
Select a Month... May 2019 April 2019 March 2019 February 2019 January 2019 November 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007
Charles: ELLs in our state ARE required to take State standardized read more
Melissa: Maybe I'm just becoming jaded, but this feels to me read more
Anonymous: Are you kidding me....UNO is an organizaion that literally destroys read more
Meg Baker: Are any schools using ACCESS scores for purposes other than read more
Dr. Mendoza: This is great news i must say. Hopefully this DREAM read more


When marketers need to prove social media strategies are delivering ROI, they may instinctively pull data about follower count growth or reference sheer engagement volume, looking for more Likes or shares in the last quarter. Engagement metrics are great indicators of what kinds of social content resonate with target audiences, but they can steer marketers down a misleading path where they think bigger audiences are better than smaller, more qualified traffic.
The success one Brafton client experienced demonstrates why it's valuable to start with a comprehensive strategy, and use initial results to find the money audience that's highly convertible.
With products that translate in to attractive visual content, the client worked with Brafton to create a social marketing strategy around those strengths. It began with a diverse approach, targeting networks like Pinterest, Facebook, StumbleUpon and Twitter.
Over time, it became clear the brand had an active audience on Pinterest that was responding well to the social content it pinned. In fact, Pinterest became the No. 1 source of referral traffic to the site, and also the primary driver of pageviews.
By refining the social strategy further to reflect followers' preferences, the company successfully honed in its ideal audience of ready-to-convert leads. The traffic from Pinterest was fueling nearly half of all social conversions (three times as many as Facebook).
Because it had proven a results-driven network, it was surprising to see that the volume of Pinterest conversions dipped during Q3 2013, compared with data from the previous year. However, a closer look reveals that the number of individual conversions might have dropped, but the dollar value of each transaction tripled. Essentially, the company was generating more money with fewer purchases.
This is a sign the company had whittled down its ideal audience even further so the social content it shares is tailored to brand's most valuable customers. It can seem risky to ignore larger audiences bases in favor of smaller pools of big spenders, but there is a sweet spot where companies that reach this point can confidently create the type of content they know loyal customers like.
It's up to strategists and marketers to recognize when they are zeroing in on this select group and create content that generates stronger results.


text:
Q: How do I use Pivot when there's a 'Totals' column? I put together a query that displays the number of wells/year and sums their totals in a column called, "Totals".  Please see the db<>fiddle link at the bottom of the post for the working query.
SELECT
    YEAR(wd.eventdate) AS [Year],
    ISNULL(COUNT(DISTINCT w_oil.WellID), 0) AS [Oil Wells],
    ISNULL(COUNT(DISTINCT w_gas.WellID), 0) AS [Gas Wells],
    ISNULL(COUNT(DISTINCT w_service.WellID), 0) AS [Service Wells],
    ISNULL(COUNT(DISTINCT w_dry.WellID), 0) AS [Dry Holes],
    ISNULL(COUNT(DISTINCT w_tot.WellID), 0) AS [Totals]
FROM HWellDate wd
    LEFT JOIN HWell w_oil ON (w_oil.PKey = wd.WellKey and w_oil.WellType = 'OW')
    LEFT JOIN HWell w_gas ON (w_gas.PKey = wd.WellKey and w_gas.WellType = 'GW')
    LEFT JOIN HWell w_service ON
    (
    w_service.PKey = wd.WellKey
    AND w_service.WellType IN ('WI','GI','GS','WD','WS','TW')
    )
    LEFT JOIN HWell w_dry ON (w_dry.PKey = wd.WellKey and w_dry.WellType = 'D')
    LEFT JOIN HWell w_tot ON w_tot.PKey = wd.WellKey
WHERE wd.comment = 'PA'
    AND wd.event = 'WELLSTATUS'
    AND (YEAR(wd.eventdate) >= (YEAR(GETDATE()) - 4) AND YEAR(wd.eventdate) <= YEAR(GETDATE()))
GROUP BY YEAR(wd.eventdate)

The query works but I'd like to transpose the table so the years are listed at the top as column names and the totals column is a row at the bottom.
Here is the table that is produced from the query above:

Year
Oil Wells
Gas Wells
Service Wells
Dry Holes
Totals

2017
6
7
1
1
15

2018
15
23
5
6
49

2019
7
6
4
5
22

2020
10
16
4
0
30

2021
24
23
3
3
53

Here is what I'd like to have:

Well Types
2021
2020
2019
2018
2017

Oil Wells
24
10
7
15
6

Gas Wells
23
16
6
23
7

Service Wells
3
4
4
5
1

Dry Holes
3
0
5
6
1

Totals
53
30
22
49
15

I think I need to use PIVOT to rotate the table but suspect I may need to use UNPIVOT as well to get the results I'm looking for.  I was thinking I could insert the data from the first table into a temp table called, "#wellsPluggedTempTbl".  After that, maybe I could use dynamic sql to generate the results.
Here's what I have so far:
DECLARE @colsPivot AS NVARCHAR(MAX)
DECLARE @query  AS NVARCHAR(MAX)

INSERT INTO #wellsPluggedTempTbl([Year], [Oil Wells], [Gas Wells], [Service Wells], [Dry Holes], Totals)
SELECT
    YEAR(wd.eventdate) AS [Year],
    ISNULL(COUNT(DISTINCT w_oil.WellID), 0) AS [Oil Wells],
    ISNULL(COUNT(DISTINCT w_gas.WellID), 0) AS [Gas Wells],
    ISNULL(COUNT(DISTINCT w_service.WellID), 0) AS [Service Wells],
    ISNULL(COUNT(DISTINCT w_dry.WellID), 0) AS [Dry Holes],
    ISNULL(COUNT(DISTINCT w_tot.WellID), 0) AS [Totals]
FROM HWellDate wd
    LEFT JOIN HWell w_oil ON (w_oil.PKey = wd.WellKey and w_oil.WellType = 'OW')
    LEFT JOIN HWell w_gas ON (w_gas.PKey = wd.WellKey and w_gas.WellType = 'GW')
    LEFT JOIN HWell w_service ON
    (
    w_service.PKey = wd.WellKey
    AND w_service.WellType IN ('WI','GI','GS','WD','WS','TW')
    )
    LEFT JOIN HWell w_dry ON (w_dry.PKey = wd.WellKey and w_dry.WellType = 'D')
    LEFT JOIN HWell w_tot ON w_tot.PKey = wd.WellKey
WHERE wd.comment = 'PA'
    AND wd.event = 'WELLSTATUS'
    AND (YEAR(wd.eventdate) >= (YEAR(GETDATE()) - 4) AND YEAR(wd.eventdate) <= YEAR(GETDATE()))
GROUP BY YEAR(wd.eventdate)

However, I get this error after running the above:
"Invalid object name '#wellsPluggedTempTbl'.
For the well type ordering at the end, I know I need to use a CASE WHEN statement like this:
ORDER BY
    CASE WellType
        WHEN 'Totals' THEN 5
        WHEN 'Dry Holes' THEN 4
        WHEN 'Service Wells' THEN 3
        WHEN 'Gas Wells' THEN 2
        WHEN 'Oil Wells' THEN 1
    END

Here is a link to db<>fiddle where I have a sampling of the data that produces the results in this post.  Any help would be appreciated! Thanks.

A: You are approaching this wrong. Instead of pivoting your existing query you should be just using conditional aggregation.
Note other efficiencies

*

*No need to join multiple times. Just join once and use CASE expressions

*Note the use of CROSS APPLY (VALUES to create and re-use the grouping expression

*Use GROUPING SETS or ROLLUP to get the totals row, use the GROUPING() function to identify that row

*Do not use functions on columns in the WHERE, instead create the date range you need and filter on that.

*If you need dynamic years, instead of using dynamic SQL, just call the columns ThisYear LastYear etc

SELECT
  WellType = CASE WHEN GROUPING(v.WellType) = 0 THEN v.WellType ELSE 'Totals' END,
  [2021] = COUNT(CASE WHEN [Year] = 2021 THEN 1 END),
  [2020] = COUNT(CASE WHEN [Year] = 2020 THEN 1 END),
  [2019] = COUNT(CASE WHEN [Year] = 2019 THEN 1 END),
  [2018] = COUNT(CASE WHEN [Year] = 2018 THEN 1 END),
  [2017] = COUNT(CASE WHEN [Year] = 2017 THEN 1 END)
FROM HWellDate wd
JOIN HWell w ON w.PKey = wd.WellKey
CROSS APPLY (VALUES(
    CASE WHEN w.WellType = 'OW' THEN 'Oil Wells'
         WHEN w.WellType = 'GW' THEN 'Gas Wells'
         WHEN w.WellType IN ('WI','GI','GS','WD','WS','TW') THEN 'Service Wells'
         WHEN w.WellType = 'D' THEN 'Dry Holes'
    END,
    YEAR(wd.eventdate)
)) v(WellType, Year)
WHERE wd.comment = 'PA'
  AND wd.event = 'WELLSTATUS'
  AND wd.eventdate >= DATEFROMPARTS(YEAR(GETDATE()) - 4, 1, 1)
  AND wd.eventdate <  DATEFROMPARTS(YEAR(GETDATE()) + 1, 1, 1)
  AND w.WellType IN ('OW','GW','WI','GI','GS','WD','WS','TW','D')
GROUP BY GROUPING SETS (
    (v.WellType),
    ()
 )
ORDER BY GROUPING(v.WellType) DESC,
    CASE v.WellType
        WHEN 'Dry Holes' THEN 4
        WHEN 'Service Wells' THEN 3
        WHEN 'Gas Wells' THEN 2
        WHEN 'Oil Wells' THEN 1
    END
;

db<>fiddle

A: If you first group by the well type and the year, then it becomes easier to pivot in the outer query.
Since the Hole Category can already be calculated in the sub-query.
And by grouping with a rollup and conditional sums, it'll also gets the totals.
SELECT ISNULL(q.HoleCategory, 'Total') AS WellType
, ISNULL(SUM(CASE WHEN q.eventYear=2021 THEN q.Total END),0) AS [2021]
, ISNULL(SUM(CASE WHEN q.eventYear=2020 THEN q.Total END),0) AS [2020]
, ISNULL(SUM(CASE WHEN q.eventYear=2019 THEN q.Total END),0) AS [2019]
, ISNULL(SUM(CASE WHEN q.eventYear=2018 THEN q.Total END),0) AS [2018]
, ISNULL(SUM(CASE WHEN q.eventYear=2017 THEN q.Total END),0) AS [2017]
FROM
(
    SELECT w.WellType
    , YEAR(wd.eventDate) AS eventYear
    ,CASE
     WHEN w.WellType = 'OW' THEN 'Oil Wells'
     WHEN w.WellType = 'GW' THEN 'Gas Wells'
     WHEN w.WellType IN ('WI','GI','GS','WD','WS','TW') THEN 'Service Wells'
     WHEN w.WellType = 'D' THEN 'Dry Holes'
     END AS HoleCategory
    , COUNT(DISTINCT w.WellID) AS Total
    FROM HWellDate wd
    LEFT JOIN HWell w ON w.PKey = wd.WellKey
    WHERE wd.comment = 'PA'
      AND wd.event = 'WELLSTATUS'
      AND w.WellType IS NOT NULL
      AND YEAR(wd.eventdate) BETWEEN 2017 AND 2021
    GROUP BY w.WellType, YEAR(wd.eventDate)
) q
GROUP BY ROLLUP(q.HoleCategory)
ORDER BY
    CASE q.HoleCategory
    WHEN 'Oil Wells' THEN 1
    WHEN 'Gas Wells' THEN 2
    WHEN 'Service Wells' THEN 3
    WHEN 'Dry Holes' THEN 4
    ELSE 9
    END


And just like that, we were on our way back to the West Coast.
But not so fast. Toronto, it seemed, wanted to make this trip extra memorable.
I woke up past 3am on the morning of our check-out and departure. Don't know why. It wasn't a bad dream or anything–that was yet to come.
I sat up and stretched. For the first time, the TV hadn't been left on. Per our usual hotel viewing, we'd watch an HGTV marathon. Nothing like seeing Bryan Baeumler or Mike Holmes improving the lives of homeowners to send us peacefully off to SnoozeVille. They're like our oversized cherubs. Hammers instead of harps. Tool belts instead of wings. Home Improvement lullabies are the best.
Anyhoo, no TV this time around and the remote was waaaaay over on the other bed. I flopped back down and kicked off the covers for the nth time thanks to the A/C and its moodiness. Just as my eyelids began to droop, they curled back in surprise, as did my toes, to the sound of the fire alarm blaring throughout the room.
I got back up, went to check the window and to feel the door. Nada.
The Sisterhood came to and looked far less pleased than I already wasn't to hear such noise. It was as though someone finally ran over the Road Runner again and again and again.
A man's voice crackled over the PA system and informed us an alarm had been set off in our building. We kept hearing 3D, but it might have been thirty. Either way, being on the ninth floor already had me grabbing clothes to wear. Might be good to mention it was pouring outside because, really, how else should this story go?
The message ended with the guy telling us to stay in our rooms to await further instructions. I could already hear half a dozen doors on our floor open and shut as the harried and half-asleep dragged their feet towards the fire exit near our room.
Intermittent screechiness with the same droning of non-information resumed. I sighed and went to the bathroom. I figured if I was going to have to stand outside with the hundreds or thousands of other upset hotel guests and staff, it should be on an empty bladder.
And the song played on. For over thirty minutes.
Finally, the voice came back on the PA to inform us that the situation had been resolved, the system reset, and we didn't have to do anything further.
That's it. No explanation or "sorry for the inconvenience" of ripping us from slumber. I understand the fire alarms need to wail like banshees to get people up and outta there but, come on. We had more questions than answers. It was like topping off the perfect dessert of a vacation with sawdust and a ball bearing.
Well, on the TV went and at least we had Baeumler and Holmes to cheer us up. It took us another few hours to get ourselves back to sleep and that was only for a power nap because we had to do some last minute errands before checking out of the hotel.
So as not to repeat the subpar aeronautical experience at the start of our travels, the Sisterhood wisely booked us a couple of upgraded seats. Leg room, free food, and as a bonus, a functioning A/C system onboard the plane. I doubt she had anything to do with it, but she's been known to work magic here and there.
Aside from some snags towards the end, it was a much anticipated and well-deserved vacation.
1) SETTING. Take advantage of studying your surroundings. You never know if you need to write about a particular store front. Or you might partake in a local custom or event that you can include in an WIP. When you experience something firsthand you add depth to your writing by using all the senses.
2) PEOPLE WATCH. I know this is an old favorite of writers, but especially when you can hide behind the anonymity of a wandering tourist, you can drink it all in at your leisure. Without them even uttering a sound, I can count off at least a dozen people that I could base entire characters on for my stories. There's so much diversity out there waiting to be explored.
3) MONKEY SEE, MONKEY DO. And I say this with caution. To borrow another phrase, "When in Rome…" or in this case, Toronto. Yes, I'd been there before. But it was a long time ago. Still, first time or twentieth, you needn't always act like a tourist. It's also nice to blend in with the locals. For one, they won't treat you like a tourist (i.e. lure you into making touristy mistakes and/or impulse purchases). Also, if you're one with the people, you'll see them in their natural element which allows you to have all these authentic character studies at your disposal.
5) SOUNDTRACKS. I love a good soundtrack while I write. I also like using certain tracks to accompany scenes in my writing, much like a movie. I'm an audio/visual storyteller. This process might not work for everyone, but it really gets the juices flowing. For instance, we were on the highway heading towards the city centre. The Sisterhood's Bestie had music playing in the car. It was perfect. Just as I saw the CN Tower peek out from behind the tree line, the music swelled. It was like the end of a great movie. Camera pans out to show the stretch of road on which the car is traveling, fade to black, roll credits. Anything and everything can inspire you, if you let it.
It's good to be home, yes. Jet-lagged, exhausted, and emotionally drained–that was just from Les Mis! But also, seeing family and places from days gone by, there are so many stories to be told. I hope everyone gets to have such an intense and wonderful experience such as this on a regular basis. It's a beautiful way to recharge your creative batteries.
This entry was posted in Round of Words in 80 Days and tagged #ROW80, Bryan Baeumler, fire alarms, HGTV, Mike Holmes, monkey see monkey do, people watch, photographs, setting, soundtracks, Toronto, West Coast. Bookmark the permalink.
A few more tips to ponder for planning.
As ready as I'm going to be. How about you?


text:
#include "JNIUtil.h"
#include "Array.h"

#include <sstream>
#include <vector>
#include <locale.h>

#include <apr_strings.h>
#include <apr_tables.h>
#include <apr_general.h>
#include <apr_lib.h>

#include "svn_pools.h"
#include "svn_fs.h"
#include "svn_ra.h"
#include "svn_utf.h"
#include "svn_wc.h"
#include "svn_dso.h"
#include "svn_path.h"
#include "svn_cache_config.h"
#include <apr_file_info.h>
#include "svn_private_config.h"
#ifdef WIN32
/* FIXME: We're using an internal APR header here, which means we
   have to build Subversion with APR sources. This being Win32-only,
   that should be fine for now, but a better solution must be found in
   combination with issue #850. */
extern "C" {
#include <arch/win32/apr_arch_utf8.h>
};
#endif

#include "SVNBase.h"
#include "JNIMutex.h"
#include "JNICriticalSection.h"
#include "JNIThreadData.h"
#include "JNIStringHolder.h"
#include "Pool.h"

// Static members of JNIUtil are allocated here.
apr_pool_t *JNIUtil::g_pool = NULL;
std::list<SVNBase*> JNIUtil::g_finalizedObjects;
JNIMutex *JNIUtil::g_finalizedObjectsMutex = NULL;
JNIMutex *JNIUtil::g_logMutex = NULL;
bool JNIUtil::g_initException;
bool JNIUtil::g_inInit;
JNIEnv *JNIUtil::g_initEnv;
char JNIUtil::g_initFormatBuffer[formatBufferSize];
int JNIUtil::g_logLevel = JNIUtil::noLog;
std::ofstream JNIUtil::g_logStream;

/**
 * Initialize the environment for all requests.
 * @param env   the JNI environment for this request
 */
bool JNIUtil::JNIInit(JNIEnv *env)
{
  // Clear all standing exceptions.
  env->ExceptionClear();

  // Remember the env parameter for the remainder of the request.
  setEnv(env);

  // Lock the list of finalized objects.
  JNICriticalSection cs(*g_finalizedObjectsMutex) ;
  if (isExceptionThrown())
    return false;

  // Delete all finalized, but not yet deleted objects.
  for (std::list<SVNBase*>::iterator it = g_finalizedObjects.begin();
       it != g_finalizedObjects.end();
       ++it)
    {
      delete *it;
    }
  g_finalizedObjects.clear();

  return true;
}

/**
 * Initialize the environment for all requests.
 * @param env   the JNI environment for this request
 */
bool JNIUtil::JNIGlobalInit(JNIEnv *env)
{
  // This method has to be run only once during the run a program.
  static bool run = false;
  svn_error_t *err;
  if (run) // already run
    return true;

  run = true;

  // Do not run this part more than one time.  This leaves a small
  // time window when two threads create their first SVNClient and
  // SVNAdmin at the same time, but I do not see a better option
  // without APR already initialized
  if (g_inInit)
    return false;

  g_inInit = true;
  g_initEnv = env;

  apr_status_t status;

  /* Initialize the APR subsystem, and register an atexit() function
   * to Uninitialize that subsystem at program exit. */
  status = apr_initialize();
  if (status)
    {
      if (stderr)
        {
          char buf[1024];
          apr_strerror(status, buf, sizeof(buf) - 1);
          fprintf(stderr,
                  "%s: error: cannot initialize APR: %s\n",
                  "svnjavahl", buf);
        }
      return FALSE;
    }

  /* This has to happen before any pools are created. */
  if ((err = svn_dso_initialize2()))
    {
      if (stderr && err->message)
        fprintf(stderr, "%s", err->message);

      svn_error_clear(err);
      return FALSE;
    }

  if (0 > atexit(apr_terminate))
    {
      if (stderr)
        fprintf(stderr,
                "%s: error: atexit registration failed\n",
                "svnjavahl");
      return FALSE;
    }

  /* Create our top-level pool. */
  g_pool = svn_pool_create(NULL);

  apr_allocator_t* allocator = apr_pool_allocator_get(g_pool);

  if (allocator)
    {
      /* Keep a maximum of 1 free block, to release memory back to the JVM
         (and other modules). */
      apr_allocator_max_free_set(allocator, 1);
    }

  svn_utf_initialize2(FALSE, g_pool); /* Optimize character conversions */
  svn_fs_initialize(g_pool); /* Avoid some theoretical issues */
  svn_ra_initialize(g_pool);

  /* We shouldn't fill the JVMs memory with FS cache data unless explictly
     requested. */
  {
    svn_cache_config_t settings = *svn_cache_config_get();
    settings.cache_size = 0;
    settings.file_handle_count = 0;
    settings.single_threaded = FALSE;
    svn_cache_config_set(&settings);
  }

#ifdef ENABLE_NLS
#ifdef WIN32
  {
    WCHAR ucs2_path[MAX_PATH];
    char *utf8_path;
    const char *internal_path;
    apr_pool_t *pool;
    apr_status_t apr_err;
    apr_size_t inwords, outbytes;
    unsigned int outlength;

    pool = svn_pool_create(g_pool);
    /* get dll name - our locale info will be in '../share/locale' */
    inwords = sizeof(ucs2_path) / sizeof(ucs2_path[0]);
    HINSTANCE moduleHandle = GetModuleHandle("libsvnjavahl-1");
    GetModuleFileNameW(moduleHandle, ucs2_path, inwords);
    inwords = lstrlenW(ucs2_path);
    outbytes = outlength = 3 * (inwords + 1);
    utf8_path = reinterpret_cast<char *>(apr_palloc(pool, outlength));
    apr_err = apr_conv_ucs2_to_utf8((const apr_wchar_t *) ucs2_path,
                                    &inwords, utf8_path, &outbytes);
    if (!apr_err && (inwords > 0 || outbytes == 0))
      apr_err = APR_INCOMPLETE;
    if (apr_err)
      {
        if (stderr)
          fprintf(stderr, "Can't convert module path to UTF-8");
        return FALSE;
      }
    utf8_path[outlength - outbytes] = '\0';
    internal_path = svn_dirent_internal_style(utf8_path, pool);
    /* get base path name */
    internal_path = svn_dirent_dirname(internal_path, pool);
    internal_path = svn_dirent_join(internal_path, SVN_LOCALE_RELATIVE_PATH,
                                  pool);
    bindtextdomain(PACKAGE_NAME, internal_path);
    svn_pool_destroy(pool);
  }
#else
  bindtextdomain(PACKAGE_NAME, SVN_LOCALE_DIR);
#endif
#endif

#if defined(WIN32) || defined(__CYGWIN__)
  /* See http://svn.apache.org/repos/asf/subversion/trunk/notes/asp-dot-net-hack.txt */
  /* ### This code really only needs to be invoked by consumers of
     ### the libsvn_wc library, which basically means SVNClient. */
  if (getenv("SVN_ASP_DOT_NET_HACK"))
    {
      err = svn_wc_set_adm_dir("_svn", g_pool);
      if (err)
        {
          if (stderr)
            {
              fprintf(stderr,
                      "%s: error: SVN_ASP_DOT_NET_HACK failed: %s\n",
                      "svnjavahl", err->message);
            }
          svn_error_clear(err);
          return FALSE;
        }
    }
#endif

  svn_error_set_malfunction_handler(svn_error_raise_on_malfunction);

  // Build all mutexes.
  g_finalizedObjectsMutex = new JNIMutex(g_pool);
  if (isExceptionThrown())
    return false;

  g_logMutex = new JNIMutex(g_pool);
  if (isExceptionThrown())
    return false;

  // initialized the thread local storage
  if (!JNIThreadData::initThreadData())
    return false;

  setEnv(env);
  if (isExceptionThrown())
    return false;

  g_initEnv = NULL;
  g_inInit = false;
  return true;
}

/**
 * Returns the global (not request specific) pool.
 * @return global pool
 */
apr_pool_t *JNIUtil::getPool()
{
  return g_pool;
}

void JNIUtil::raiseThrowable(const char *name, const char *message)
{
  if (getLogLevel() >= errorLog)
    {
      JNICriticalSection cs(*g_logMutex);
      g_logStream << "Throwable raised <" << message << ">" << std::endl;
    }

  JNIEnv *env = getEnv();
  jclass clazz = env->FindClass(name);
  if (isJavaExceptionThrown())
    return;

  env->ThrowNew(clazz, message);
  setExceptionThrown();
  env->DeleteLocalRef(clazz);
}

jstring JNIUtil::makeSVNErrorMessage(svn_error_t *err)
{
  if (err == NULL)
    return NULL;
  std::string buffer;
  assembleErrorMessage(err, 0, APR_SUCCESS, buffer);
  jstring jmessage = makeJString(buffer.c_str());
  return jmessage;
}

void
JNIUtil::throwNativeException(const char *className, const char *msg,
                              const char *source, int aprErr)
{
  JNIEnv *env = getEnv();
  jclass clazz = env->FindClass(className);

  // Create a local frame for our references
  env->PushLocalFrame(LOCAL_FRAME_SIZE);
  if (JNIUtil::isJavaExceptionThrown())
    return;

  if (getLogLevel() >= exceptionLog)
    {
      JNICriticalSection cs(*g_logMutex);
      g_logStream << "Subversion JavaHL exception thrown, message:<";
      g_logStream << msg << ">";
      if (source)
        g_logStream << " source:<" << source << ">";
      if (aprErr != -1)
        g_logStream << " apr-err:<" << aprErr << ">";
      g_logStream << std::endl;
    }
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  jstring jmessage = makeJString(msg);
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();
  jstring jsource = makeJString(source);
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  jmethodID mid = env->GetMethodID(clazz, "<init>",
                                   "(Ljava/lang/String;Ljava/lang/String;I)V");
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();
  jobject nativeException = env->NewObject(clazz, mid, jmessage, jsource,
                                           static_cast<jint>(aprErr));
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  env->Throw(static_cast<jthrowable>(env->PopLocalFrame(nativeException)));
}

void
JNIUtil::putErrorsInTrace(svn_error_t *err,
                          std::vector<jobject> &stackTrace)
{
  if (!err)
    return;

  JNIEnv *env = getEnv();

  // First, put all our child errors in the stack trace
  putErrorsInTrace(err->child, stackTrace);

  // Now, put our own error in the stack trace
  jclass stClazz = env->FindClass("java/lang/StackTraceElement");
  if (isJavaExceptionThrown())
    return;

  static jmethodID ctor_mid = 0;
  if (ctor_mid == 0)
    {
      ctor_mid = env->GetMethodID(stClazz, "<init>",
                                  "(Ljava/lang/String;Ljava/lang/String;"
                                  "Ljava/lang/String;I)V");
      if (isJavaExceptionThrown())
        return;
    }

  jstring jdeclClass = makeJString("native");
  if (isJavaExceptionThrown())
    return;

  char *tmp_path;
  char *path = svn_dirent_dirname(err->file, err->pool);
  while ((tmp_path = strchr(path, '/')))
    *tmp_path = '.';

  jstring jmethodName = makeJString(path);
  if (isJavaExceptionThrown())
    return;

  jstring jfileName = makeJString(svn_dirent_basename(err->file, err->pool));
  if (isJavaExceptionThrown())
    return;

  jobject jelement = env->NewObject(stClazz, ctor_mid, jdeclClass, jmethodName,
                                    jfileName, (jint) err->line);

  stackTrace.push_back(jelement);

  env->DeleteLocalRef(stClazz);
  env->DeleteLocalRef(jdeclClass);
  env->DeleteLocalRef(jmethodName);
  env->DeleteLocalRef(jfileName);
}

void JNIUtil::wrappedHandleSVNError(svn_error_t *err)
{
  std::string msg;
  assembleErrorMessage(svn_error_purge_tracing(err), 0, APR_SUCCESS, msg);
  const char *source = NULL;
#ifdef SVN_DEBUG
#ifndef SVN_ERR__TRACING
  if (err->file)
    {
      std::ostringstream buf;
      buf << err->file;
      if (err->line > 0)
        buf << ':' << err->line;
      source = buf.str().c_str();
    }
#endif
#endif

  // Much of the following is stolen from throwNativeException().  As much as
  // we'd like to call that function, we need to do some manual stack
  // unrolling, so it isn't feasible.

  JNIEnv *env = getEnv();

  // Create a local frame for our references
  env->PushLocalFrame(LOCAL_FRAME_SIZE);
  if (JNIUtil::isJavaExceptionThrown())
    return;

  jclass clazz = env->FindClass(JAVA_PACKAGE "/ClientException");
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  if (getLogLevel() >= exceptionLog)
    {
      JNICriticalSection cs(*g_logMutex);
      g_logStream << "Subversion JavaHL exception thrown, message:<";
      g_logStream << msg << ">";
      if (source)
        g_logStream << " source:<" << source << ">";
      if (err->apr_err != -1)
        g_logStream << " apr-err:<" << err->apr_err << ">";
      g_logStream << std::endl;
    }
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  jstring jmessage = makeJString(msg.c_str());
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();
  jstring jsource = makeJString(source);
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  jmethodID mid = env->GetMethodID(clazz, "<init>",
                                   "(Ljava/lang/String;Ljava/lang/String;I)V");
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();
  jobject nativeException = env->NewObject(clazz, mid, jmessage, jsource,
                                           static_cast<jint>(err->apr_err));
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

#ifdef SVN_ERR__TRACING
  // Add all the C error stack trace information to the Java Exception

  // Get the standard stack trace, and vectorize it using the Array class.
  static jmethodID mid_gst = 0;
  if (mid_gst == 0)
    {
      mid_gst = env->GetMethodID(clazz, "getStackTrace",
                                 "()[Ljava/lang/StackTraceElement;");
      if (isJavaExceptionThrown())
        POP_AND_RETURN_NOTHING();
    }
  Array stackTraceArray((jobjectArray) env->CallObjectMethod(nativeException,
                                                             mid_gst));
  std::vector<jobject> oldStackTrace = stackTraceArray.vector();

  // Build the new stack trace elements from the chained errors.
  std::vector<jobject> newStackTrace;
  putErrorsInTrace(err, newStackTrace);

  // Join the new elements with the old ones
  for (std::vector<jobject>::const_iterator it = oldStackTrace.begin();
            it < oldStackTrace.end(); ++it)
    {
      newStackTrace.push_back(*it);
    }

  jclass stClazz = env->FindClass("java/lang/StackTraceElement");
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  const jsize stSize = static_cast<jsize>(newStackTrace.size());
  if (stSize != newStackTrace.size())
    {
      env->ThrowNew(env->FindClass("java.lang.ArithmeticException"),
                    "Overflow converting C size_t to JNI jsize");
      POP_AND_RETURN_NOTHING();
    }
  jobjectArray jStackTrace = env->NewObjectArray(stSize, stClazz, NULL);
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();

  int i = 0;
  for (std::vector<jobject>::const_iterator it = newStackTrace.begin();
       it < newStackTrace.end(); ++it)
    {
      env->SetObjectArrayElement(jStackTrace, i, *it);
      ++i;
    }

  // And put the entire trace back into the exception
  static jmethodID mid_sst = 0;
  if (mid_sst == 0)
    {
      mid_sst = env->GetMethodID(clazz, "setStackTrace",
                                 "([Ljava/lang/StackTraceElement;)V");
      if (isJavaExceptionThrown())
        POP_AND_RETURN_NOTHING();
    }
  env->CallVoidMethod(nativeException, mid_sst, jStackTrace);
  if (isJavaExceptionThrown())
    POP_AND_RETURN_NOTHING();
#endif

  env->Throw(static_cast<jthrowable>(env->PopLocalFrame(nativeException)));
}

void JNIUtil::handleSVNError(svn_error_t *err)
{
  try {
    wrappedHandleSVNError(err);
  } catch (...) {
    svn_error_clear(err);
    throw;
  }
  svn_error_clear(err);
}

void JNIUtil::putFinalizedClient(SVNBase *object)
{
  enqueueForDeletion(object);
}

void JNIUtil::enqueueForDeletion(SVNBase *object)
{
  JNICriticalSection cs(*g_finalizedObjectsMutex);
  if (!isExceptionThrown())
    g_finalizedObjects.push_back(object);
}

/**
 * Handle an apr error (those are not expected) by throwing an error.
 * @param error the apr error number
 * @param op the apr function returning the error
 */
void JNIUtil::handleAPRError(int error, const char *op)
{
  char *buffer = getFormatBuffer();
  if (buffer == NULL)
    return;

  apr_snprintf(buffer, formatBufferSize,
               _("an error occurred in function %s with return value %d"),
               op, error);

  throwError(buffer);
}

/**
 * Return if an exception has been detected.
 * @return a exception has been detected
 */
bool JNIUtil::isExceptionThrown()
{
  // During init -> look in the global member.
  if (g_inInit)
    return g_initException;

  // Look in the thread local storage.
  JNIThreadData *data = JNIThreadData::getThreadData();
  return data == NULL || data->m_exceptionThrown;
}

/**
 * Store the JNI environment for this request in the thread local
 * storage.
 * @param env   the JNI environment
 */
void JNIUtil::setEnv(JNIEnv *env)
{
  JNIThreadData::pushNewThreadData();
  JNIThreadData *data = JNIThreadData::getThreadData();
  data->m_env = env;
  data->m_exceptionThrown = false;
}

/**
 * Return the JNI environment to use
 * @return the JNI environment
 */
JNIEnv *JNIUtil::getEnv()
{
  // During init -> look into the global variable.
  if (g_inInit)
    return g_initEnv;

  // Look in the thread local storage.
  JNIThreadData *data = JNIThreadData::getThreadData();
  return data->m_env;
}

/**
 * Check if a Java exception has been thrown.
 * @return is a Java exception has been thrown
 */
bool JNIUtil::isJavaExceptionThrown()
{
  JNIEnv *env = getEnv();
  if (env->ExceptionCheck())
    {
      // Retrieving the exception removes it so we rethrow it here.
      jthrowable exp = env->ExceptionOccurred();
      env->ExceptionDescribe();
      env->Throw(exp);
      env->DeleteLocalRef(exp);
      setExceptionThrown();
      return true;
    }
  return false;
}

const char *
JNIUtil::thrownExceptionToCString(SVN::Pool &in_pool)
{
  const char *msg = NULL;
  JNIEnv *env = getEnv();
  apr_pool_t *pool = in_pool.getPool();
  if (env->ExceptionCheck())
    {
      jthrowable t = env->ExceptionOccurred();
      jclass cls = env->GetObjectClass(t);

      jstring jclass_name;
      {
        jmethodID mid = env->GetMethodID(cls, "getClass", "()Ljava/lang/Class;");
        jobject clsobj = env->CallObjectMethod(t, mid);
        jclass basecls = env->GetObjectClass(clsobj);
        mid = env->GetMethodID(basecls, "getName", "()Ljava/lang/String;");
        jclass_name = (jstring) env->CallObjectMethod(clsobj, mid);
      }

      jstring jmessage;
      {
        jmethodID mid = env->GetMethodID(cls, "getMessage",
                                         "()Ljava/lang/String;");
        jmessage = (jstring) env->CallObjectMethod(t, mid);
      }

      JNIStringHolder class_name(jclass_name);
      if (jmessage)
        {
          JNIStringHolder message(jmessage);
          msg = apr_pstrcat(pool,
                            static_cast<const char*>(class_name), ": ",
                            static_cast<const char*>(message), NULL);
        }
      else
        msg = class_name.pstrdup(pool);
      // ### Conditionally add t.printStackTrace() to msg?
    }
  return msg;
}

/**
 * Create a Java string from a native UTF-8 string.
 * @param txt   native UTF-8 string
 * @return the Java string. It is a local reference, which should be deleted
 *         as soon a possible
 */
jstring JNIUtil::makeJString(const char *txt)
{
  if (txt == NULL)
    // A NULL pointer is equates to a null java.lang.String.
    return NULL;

  JNIEnv *env = getEnv();
  return env->NewStringUTF(txt);
}

void
JNIUtil::setExceptionThrown(bool flag)
{
  if (g_inInit)
    {
      // During global initialization, store any errors that occur
      // in a global variable (since thread-local storage may not
      // yet be available).
      g_initException = flag;
    }
  else
    {
      // When global initialization is complete, thread-local
      // storage should be available, so store the error there.
      JNIThreadData *data = JNIThreadData::getThreadData();
      data->m_exceptionThrown = flag;
    }
}

/**
 * Initialite the log file.
 * @param level the log level
 * @param the name of the log file
 */
void JNIUtil::initLogFile(int level, jstring path)
{
  // lock this operation
  JNICriticalSection cs(*g_logMutex);
  if (g_logLevel > noLog) // if the log file has been opened
    g_logStream.close();

  // remember the log level
  g_logLevel = level;
  JNIStringHolder myPath(path);
  if (g_logLevel > noLog) // if a new log file is needed
    {
      // open it
      g_logStream.open(myPath, std::ios::app);
    }
}

/**
 * Returns a buffer to format error messages.
 * @return a buffer for formating error messages
 */
char *JNIUtil::getFormatBuffer()
{
  if (g_inInit) // during init -> use the global buffer
    return g_initFormatBuffer;

  // use the buffer in the thread local storage
  JNIThreadData *data = JNIThreadData::getThreadData();
  if (data == NULL) // if that does not exists -> use the global buffer
    return g_initFormatBuffer;

  return data->m_formatBuffer;
}

/**
 * Returns the current log level.
 * @return the log level
 */
int JNIUtil::getLogLevel()
{
  return g_logLevel;
}

/**
 * Write a message to the log file if needed.
 * @param the log message
 */
void JNIUtil::logMessage(const char *message)
{
  // lock the log file
  JNICriticalSection cs(*g_logMutex);
  g_logStream << message << std::endl;
}

/**
 * Create a java.util.Date object from an apr time.
 * @param time  the apr time
 * @return the java.util.Date. This is a local reference.  Delete as
 *         soon as possible
 */
jobject JNIUtil::createDate(apr_time_t time)
{
  jlong javatime = time /1000;
  JNIEnv *env = getEnv();
  jclass clazz = env->FindClass("java/util/Date");
  if (isJavaExceptionThrown())
    return NULL;

  static jmethodID mid = 0;
  if (mid == 0)
    {
      mid = env->GetMethodID(clazz, "<init>", "(J)V");
      if (isJavaExceptionThrown())
        return NULL;
    }

  jobject ret = env->NewObject(clazz, mid, javatime);
  if (isJavaExceptionThrown())
    return NULL;

  env->DeleteLocalRef(clazz);

  return ret;
}

/**
 * Create a Java byte array from an array of characters.
 * @param data      the character array
 * @param length    the number of characters in the array
 */
jbyteArray JNIUtil::makeJByteArray(const void *data, int length)
{
  if (data == NULL)
    {
      // a NULL will create no Java array
      return NULL;
    }

  JNIEnv *env = getEnv();

  // Allocate the Java array.
  jbyteArray ret = env->NewByteArray(length);
  if (isJavaExceptionThrown() || ret == NULL)
      return NULL;

  // Access the bytes.
  jbyte *retdata = env->GetByteArrayElements(ret, NULL);
  if (isJavaExceptionThrown())
    return NULL;

  // Copy the bytes.
  memcpy(retdata, data, length);

  // Release the bytes.
  env->ReleaseByteArrayElements(ret, retdata, 0);
  if (isJavaExceptionThrown())
    return NULL;

  return ret;
}

/**
 * Create a Java byte array from an svn_string_t.
 * @param str       the string
 */
jbyteArray JNIUtil::makeJByteArray(const svn_string_t *str)
{
  return JNIUtil::makeJByteArray(str->data, static_cast<int>(str->len));
}

/**
 * Build the error message from the svn error into buffer.  This
 * method calls itselft recursively for all the chained errors
 *
 * @param err               the subversion error
 * @param depth             the depth of the call, used for formating
 * @param parent_apr_err    the apr of the previous level, used for formating
 * @param buffer            the buffer where the formated error message will
 *                          be stored
 */
void JNIUtil::assembleErrorMessage(svn_error_t *err, int depth,
                                   apr_status_t parent_apr_err,
                                   std::string &buffer)
{
  // buffer for a single error message
  char errbuf[256];

  /* Pretty-print the error */
  /* Note: we can also log errors here someday. */

  /* When we're recursing, don't repeat the top-level message if its
   * the same as before. */
  if (depth == 0 || err->apr_err != parent_apr_err)
    {
      /* Is this a Subversion-specific error code? */
      if ((err->apr_err > APR_OS_START_USEERR)
          && (err->apr_err <= APR_OS_START_CANONERR))
        buffer.append(svn_strerror(err->apr_err, errbuf, sizeof(errbuf)));
      /* Otherwise, this must be an APR error code. */
      else
        {
          /* Messages coming from apr_strerror are in the native
             encoding, it's a good idea to convert them to UTF-8. */
          const char* utf8_message;
          apr_strerror(err->apr_err, errbuf, sizeof(errbuf));
          svn_error_t* utf8_err = svn_utf_cstring_to_utf8(
              &utf8_message, errbuf, err->pool);
          if (utf8_err)
            {
              /* Use fuzzy transliteration instead. */
              svn_error_clear(utf8_err);
              utf8_message = svn_utf_cstring_from_utf8_fuzzy(errbuf, err->pool);
            }
          buffer.append(utf8_message);
        }
      buffer.append("\n");
    }
  if (err->message)
    buffer.append(_("svn: ")).append(err->message).append("\n");

  if (err->child)
    assembleErrorMessage(err->child, depth + 1, err->apr_err, buffer);

}

/**
 * Throw a Java NullPointerException.  Used when input parameters
 * which should not be null are that.
 *
 * @param message   the name of the parameter that is null
 */
void JNIUtil::throwNullPointerException(const char *message)
{
  if (getLogLevel() >= errorLog)
    logMessage("NullPointerException thrown");

  JNIEnv *env = getEnv();
  jclass clazz = env->FindClass("java/lang/NullPointerException");
  if (isJavaExceptionThrown())
    return;

  env->ThrowNew(clazz, message);
  setExceptionThrown();
  env->DeleteLocalRef(clazz);
}

svn_error_t *JNIUtil::preprocessPath(const char *&path, apr_pool_t *pool)
{
  /* URLs and wc-paths get treated differently. */
  if (svn_path_is_url(path))
    {
      /* No need to canonicalize a URL's case or path separators. */

      /* Convert to URI. */
      path = svn_path_uri_from_iri(path, pool);

      /* Auto-escape some ASCII characters. */
      path = svn_path_uri_autoescape(path, pool);

      /* The above doesn't guarantee a valid URI. */
      if (! svn_path_is_uri_safe(path))
        return svn_error_createf(SVN_ERR_BAD_URL, NULL,
                                 _("URL '%s' is not properly URI-encoded"),
                                 path);

      /* Verify that no backpaths are present in the URL. */
      if (svn_path_is_backpath_present(path))
        return svn_error_createf(SVN_ERR_BAD_URL, NULL,
                                 _("URL '%s' contains a '..' element"),
                                 path);

      /* strip any trailing '/' */
      path = svn_uri_canonicalize(path, pool);
    }
  else  /* not a url, so treat as a path */
    {
      /* Normalize path to subversion internal style */

      /* ### In Subversion < 1.6 this method on Windows actually tried
         to lookup the path on disk to fix possible invalid casings in
         the passed path. (An extremely expensive operation; especially
         on network drives).

         This 'feature'is now removed as it penalizes every correct
         path passed, and also breaks behavior of e.g.
           'svn status .' returns '!' file, because there is only a "File"
             on disk.
            But when you then call 'svn status file', you get '? File'.

         As JavaHL is designed to be platform independent I assume users
         don't want this broken behavior on non round-trippable paths, nor
         the performance penalty.
       */

      path = svn_dirent_internal_style(path, pool);

      /* For kicks and giggles, let's absolutize it. */
      SVN_ERR(svn_dirent_get_absolute(&path, path, pool));
    }

  return NULL;
}


23 Mayfield is a family run victorian detached guest house situated one mile from Edinburgh City Centre.
Within the 19th century exterior you will find quality cornicing and many more original features, the accommodation has all you need for a comfortable and relaxing atmosphere...FREE INTERNET ACCESS Wi-Fi, free off street secure parking.
Why not then discover and learn about the delights of 23 Mayfield Guest House, haven away from the main stream city centre hurly burly, yet superbly located for all the major tourist attractions and great shopping in Edinburgh city and perfect award winning accommodation for rewarding short breaks, romantic breaks and holidays in Edinburgh or why not have a night in and relax at the open fire.
Here at 23 Mayfield, resident proprietors Ross and Kathleen, natives of Edinburgh, offer an informal, friendly, home from home, with no airs or graces, in which you can relax and enjoy yourself whether you stay with us for a night or two, a short break or for a longer holiday here in Edinburgh.


Cool & praktisk korg tillverkad av återvunnet gummi med dekorativa, handsydda sadelsömmar. Funkar perfekt som ved- eller tidningskorg!
Den är ca 29 cm hög och diameter i ovankant är ca 50 cm.
Cool & practical basket made out of recycled rubber with decorative, hand sewn saddle seams. Works perfect for storing firewood or magazines!
It is about 29 cm high and the upper circuit is about 50 cm.
French Tadé Pays du Levant is a fair trade company that develops and respects the ecological, economical and social environment.


« What is a foil fuser and what does it do?
Within the last few months we have added a new line of money counters. These money counters are from Semacon, who is well known throughout the industry for their quality machines. In total, we will be adding five new machines.
Unlike many comparable money counters that are made in China, Semacon bill counters are made in Japan under the strictest quality control measures. Semacon has built a name for itself for its durable money handling equipment capable of taking a beating and lasting for years.
New Semacon products include bill counters, coin counters, coin sorters and coin crimpers. These new Semacon products are great for use in a retail store, bank, church or other organization. Having personally used these new products, I can vouch for their reliability. They are also very easy to set up, which is a big plus for me.
Many of the Semacon bill counters we have added to our site feature counterfeit detection measures, capable of detecting the most complex counterfeited money. The Semacon S-1400 even includes an air filter designed to filter out dust and particles found in dirty bills. This is ideal considering how dirty many bills can be, especially since many bills contain traces of narcotics.
Our most recent addition is Semacon's new S-520 coin counter. The new S-520 coin counter sorts and counts coins with great accuracy. It also includes the ability to batch count and has an easy-to-use interface. It is capable of counting up to 450 coins per minute and can be used by banks.
Stop by ABC Office and take a look at our new Semacon money counters now!
Have you heard about the new ten-dollar bill?
Counterfeit money continues to be a growing problem.
ABC Office now has its own brand of money counters.
ABC Office adds two new money counters to its lineup.
This entry was posted on Monday, November 10th, 2008 at 2:19 pm	and is filed under Money Handling, New Products. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
I'm always looking for more information about this, thanks for the awesome post, keep them coming!


Its a jewellery consultancy [login to view URL] a best logo for company.
My goal is to provide you with the most creative and unique work on the market. My specialty is logo and brand identity, although I have other skills that you may find useful.


Mixing electronics and rain might not sound like a good idea, but people usually think this for the wrong reason. Water alone is not what damages electronic components. It is even possible to wash the LilyPad if you want to; the important thing is to make sure that the LilyPad is dry once you turn it back on. Short circuits are what can destroy an electronic component. The problem with water is that it is a very good conductor, thus making it great for creating short circuits. But applied in the right way, water can be used as an input to your Arduino.


text:
The mysteries of an ancient civilisation that survived for more than a millennium on the island of Malta—and then collapsed within two generations—have been unravelled by archaeologists who analysed pollen buried deep within the earth and ancient DNA from skulls and bones.
The Ġgantija temples of Malta are among the earliest free-standing buildings known
[Credit: Bs0u10e01, licensed under CC BY-SA 4.0]
It's part of a field of work that is expanding the use of archaeological techniques into environments where they were previously thought to be unusable.
The Temple Culture of the Maltese archipelago in the Mediterranean began nearly 6,000 years ago and at its height probably numbered several thousand people—far denser than the people of mainland Europe could manage at the time. The island people constructed elaborate sacred sites, such as the famous Ġgantija temple complex, and their buildings are among the earliest free-standing buildings known. But, after 1,500 years, they were gone.
Professor Caroline Malone, prehistory specialist at Queen's University Belfast, Northern Ireland, wanted to understand how the fragile island ecology sustained the people for so long despite drought, violent storms and soil erosion—and why it ultimately failed.
She ran an ambitious project, Fragsus, which drew on multiple tools to find some answers. Scientists drilled earth cores ranging from eight to 30 metres deep, dating the sediment using carbon dating to understand which time period it referred to.
They counted the pollen at 2cm intervals and analysed individual pollen grains using chemical signatures imprinted by the surrounding environment to understand what nutrients the parent plants were absorbing from the ground. Molluscs embedded in the soil revealed glimpses of the landscape since 'snails are very particular about where they live and don't move far," said Prof. Malone.
Meanwhile, other specialists assessed the wear and tear on tens of thousands of human bones from a burial site to understand the islanders' lifestyles. The team broke new ground by analysing bone with a technique called ancient DNA (aDNA) analysis, says Prof. Malone. It had previously been thought that the warmth of any climate south of the Alps would destroy such old DNA. But it turned out that skulls buried at a relatively cool five metres' depth still harboured aDNA within thick bone behind the ear.
From what they've uncovered, the team thinks that these people understood the importance of soil management to fend off starvation. Within a hundred years of their arrival on the tiny, 316 square km archipelago they had felled most of the trees, exposing the ground to drastic erosion.
To survive, they reared dairy animals rather than prioritising meat—killing off newborn livestock before they had a chance to graze. They mixed livestock manure back into the soil and may even have made back-breaking journeys carting soil washed into the valleys back uphill to refresh the upland fields.
The evidence for this lies in strange, parallel ruts in the ground that may be cart tracks, as well as signs from the skeletons that soft tissue had sometimes been worn completely away by hard, repetitive activity. Oddly, says Prof. Malone, they ate almost no fish.
Malta's lost civilisation only lasted 1,500 years but it produced
some of the oldest buildings still standing today
[Credit: Horizon]
To achieve such complex collaborative effort something powerful must have held the community together: the temples.
Until now, the Temple Culture was thought to have centred on the worship of a mother goddess, but Prof. Malone thinks it was more of a clubhouse culture, focused on ritual and feasting but where food—rather than a deity—was revered. In the complexes it is now clear that the people displayed their livestock and harvests on special benches and altars, feasted, and also stored food.
There is no skeletal evidence of violent death and no fortifications, said Prof. Malone. Instead the society appears to have survived through cooperation and sharing.
Despite the society's strength and success, as centuries passed the soil erosion and climate conditions worsened, as evidenced by the different types of pollen in the soil, the diminishing number of tree remains and the human bones wracked with evidence of dietary deficiencies.
In the final centuries of the Temple Culture, between 2600 BC and 2400 BC, half of those dying were children.
Other factors likely contributed, said Prof. Malone. Adult skulls from this time are greatly varied, their DNA indicating the arrival of immigrants from as far as the Eurasian Steppes and sub-Saharan Africa, possibly causing population pressure and new diseases.
The decisive blow may have been an unknown catastrophe that occurred around 2350 BC, a period during which, according to tree ring analysis, the whole region suffered a catastrophic climate event—possibly a dust cloud caused by a volcanic eruption.
Islands can be used as laboratories for understanding change in the wider world, said Prof. Malone. However, the geographical peculiarities of islands can also present problems by rendering conventional research techniques redundant. In Spain's Canary Islands, for example, ancient pollen is not well-preserved in the local terrain. What's more, many important plants on the islands—such as its emblematic laurel trees—produce no, or little, pollen, and the environmental conditions have also eroded other pieces of evidence, such as macrofossils.
Palaeo environmental DNA in sediment cores is providing a long term perspective
of how Spain's Canary Islands weathered past climate change
[Credit: Lea de Nascimento]
Dr. Lea de Nascimento, a specialist in ecology at the Universidad de La Laguna in Tenerife said: "We lack (good preservation of) all the conventional proxies."
She wants to piece together the history of vegetation on the Canaries—in particular, what they were like before humans arrived over 2,000 years ago. To do so, she is using a new palaeoecological technique called palaeoenvironmental DNA analysis.
Environmental DNA (eDNA) is left in soil or water by microorganisms, plant and animal species, and scientists increasingly scan for it to find out what's going on in today's environment. It is a relatively new palaeoecological tool, which has so far been used in the coldest and driest places because of its vulnerability to warmth and humidity. But Dr. de Nascimento is now probing for it in core samples spanning several thousand years from the islands.
For the ISLANDPALECO project, she has spent two years learning from experts at a dedicated laboratory in New Zealand how to search for palaeo environmental DNA in sediment cores. After a year of setbacks, she has now found 100-year-old DNA of a much richer variety than can be found in the pollen record. She is still hoping to retrieve older palaeo environmental DNA.
"If you have a long perspective you will know the resilience of ecosystems," she said. "It will help us understand how an ecosystem will react if we keep putting pressure on it in the future—or in response to climate change."
She says that knowing more about past ecosystems will also help today's conservationists restore landscapes depleted by humans and the animals they brought with them.
"The problem is you could invest a lot of money restoring an ecosystem that was never there," she said.
Author: Aisling Irwin | Source: Horizon: The EU Research & Innovation Magazine [July 11, 2019]
Labels Archaeology, Climate Change, Earth Science, Europe, Malta, Southern Europe
melitamegalithic July 15, 2019 at 5:34 PM
The date 2350bc is a very good approximation for a major global event. This research adds valuable data to the understanding of secondary climatic changes. See link: https://melitamegalithic.wordpress.com/2019/03/15/searching-evidence-update-2/
'First undisturbed' Roman shipwreck found off eastern coast of Cyprus
The Department of Antiquities has announced the discovery of an ancient shipwreck in the sea off Protaras, Cyprus. The site was reported by...