Single Tier Wedding Cake Fresh Products is free HD wallpaper. This wallpaper was upload at April 15, 2019 upload by avvv in Wedding.
Images Products leading specifically for you from single tier wedding cake , single tirol, single tier, single stier frau tageskarte, source: palermobakery.com.
Description: Single Tier Wedding Cake Fresh Products from the above resolutions which is part of the Wedding. Download this image for free in HD resolution the choice "download button" below. If you do not find the exact resolution you are looking for, then go for a native or higher resolution.
Single Tier Wedding Cake - Through the thousands of photographs on the internet in relation to single tier wedding cake, choices the best series having ideal resolution simply for you, and now this images is considered one of pictures libraries within our best photos gallery with regards to Single Tier Wedding Cake. I am hoping you'll want it.
This particular impression (Single Tier Wedding Cake Fresh Products) over is classed along with: all for you.
Published by avvv with 2019-04-15 06:32:50. To determine almost all images inside Single Tier Wedding Cake photos gallery make sure you adhere to this hyperlink.
Download Single Tier Wedding Cake Fresh Products with original resolution Click Here!
20 Photos of "Single Tier Wedding Cake Fresh Products"
Related Posts of "Single Tier Wedding Cake Fresh Products"


text:
Learn about exercises and motivation
Drink More Tap Water!
Publish on March 6, 2020 By Tommie John
Tap water may taste different from region to region, but it does not necessarily have anything to do with its quality. Differences in taste occur if the water has been specially treated, for example with chlorine. Stadtwerke Düsseldorf, for example, disinfected its water with chlorine dioxide until two years ago. Among other things, this counteracted faecal germs, but the fine chlorine note could also be tasted. To not forget to drink water, some apps like the next one might be helpful: https://play.google.com/store/apps/details?id=reminder.drink.water
The so-called water hardness can influence the taste, especially of hot drinks. The aromas of tea and coffee are said to emerge better if they have been prepared with soft water. Hard water is water that is particularly rich in magnesium and calcium. When it rains, the substances are washed out of the rock and get into the groundwater. Depending on the type and composition of the rock layers, sometimes more, sometimes less.
Distilled water does not kill
Hard water leaves the well-known lime residues on tiles and fittings. Household appliances such as dishwashers or washing machines can be damaged by the deposits. However, hard water is not harmful to health at all: magnesium and calcium are important trace elements that are responsible for healthy nervous performance. Magnesium also plays an important role in several metabolic processes, calcium helps build bones and teeth and contributes to blood clotting. Other ingredients in water that are important for the body are sodium, potassium, iron and zinc.
However, humans do not consume these elements mainly through drinks, but obtain them mainly from solid food. Mineral-poor water therefore does not usually lead to deficiencies. Some people even drink only distilled water and cope with it. That this is supposed to be deadly is a legend. Nevertheless, the electrolyte balance can get confused if you drink only water without minerals. Therefore it is advisable to drink mineral or tap water.
Which of the two waters contains more minerals cannot be said in general. A study by Stiftung Warentest has shown that even natural mineral water can sometimes be poor in these substances.
Table water is not mineral water
For a water to be called mineral water, it must be bottled directly at a spring that is fed from underground water sources. Anyone who wants to drink natural mineral water does not have to resort to varieties from the French Alps or the northern Italian provinces. There are numerous springs in Germany. The Federal Office for Consumer Protection and Food Safety has compiled a detailed list.
The decisive factor for the title "natural mineral water" is that its ingredients may hardly be changed. In contrast to table water, which is actually only tap water, from which all minerals have first been removed and then certain quantities of substances have been added again. This means that table water can be bottled anywhere and still always tastes the same.
Improve your Memory: 10 Useful Tips for Your Everyday Life
The 5 things to DO to increase your MOTIVATION
The 5 good reasons to train outdoors with MPTraining
Tommie John
How do you start doing sports properly? What kind of exercises will help you? You will also learn how not to lose motivation for the sport.
How to choose the right running shoe?
Health Typology by Star Sign
2 METHODS and 2 ERRORS
Choose to rely on us for your well-being
"Don't you have time for yourself?" Find out how to train
It's hot: when and how to run? Here are 5 useful tips
Powered by WordPress | Theme: EyePress Developed By wp theme space

redpajama_set_name: RedPajamaCommonCrawl


We were victorious in pushing back attacks on our courts during the N.C. General Assembly's 2018 special session, but the 2018 short session promises more proposals to rig the system from political bullies working for their own partisan interests. The current focus is on gerrymandering our judicial voting districts (House Bill 717), slashing judicial terms (Senate Bill 698), take power to fill judicial vacancies from Governor's office (House Bill 240 and House Bill 241), and seizing the ability to choose judges themselves (legislative appointment under the so-called "purple plan") — all of which would undermine the independence of our courts and make North Carolina's judiciary more partisan. Others say "court-packing" is back on the table, a scenario where lawmakers add judges to our N.C. Supreme Court in an effort to get better outcomes.
On top of that, legislative leaders may also resurrect part of North Carolina's discriminatory 2013 Monster Voting Law. That law was rejected in federal court, but the NCGA could revive voter ID by placing it on the November ballot as a constitutional amendment. That's right: the same lawmakers who drafted an illegal voter ID law that targeted African-Americans "with almost surgical precision" now want to permanently add it to our state's constitution.
Together we have put intense pressure on lawmakers to end these schemes — and it's working. But we can't stop now. Join our "Fair Courts, Fair Votes Month of Action" (May 18-June 18) to fight back! Keep up the pressure with this 4th STEP OF 6.
STEP FOUR:As part of their sham process to rig our system for their control, the same lawmakers who are leading attacks on our courts are also planning to push new voting restrictions during the short session. It's time to tell them to stop all of the schemes against us.
Gerrymandering? Again? Really? Who Gives a Rat's Rear End?


text:
Q: Spring Boot 2.0.5 Issue Deployment When I run command : mvn clean compile package tomat7:run
Oct 12, 2018 2:51:51 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Oct 12, 2018 2:51:51 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Oct 12, 2018 2:51:51 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
Oct 12, 2018 2:51:51 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/online-web]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[/online-web]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 6 more
Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitializer cannot be cast to javax.servlet.ServletContainerInitializer
    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializer(ContextConfig.java:1670)
    at org.apache.catalina.startup.ContextConfig.getServletContainerInitializers(ContextConfig.java:1652)
    at org.apache.catalina.startup.ContextConfig.processServletContainerInitializers(ContextConfig.java:1562)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1270)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:878)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:376)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5322)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more

Oct 12, 2018 2:51:51 PM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]
    at java.util.concurrent.FutureTask.report(Unknown Source)
    at java.util.concurrent.FutureTask.get(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Tomcat.start(Tomcat.java:341)
    at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.startContainer(AbstractRunMojo.java:1238)
    at org.apache.tomcat.maven.plugin.tomcat7.run.AbstractRunMojo.execute(AbstractRunMojo.java:592)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 6 more

I am making multi module project
 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.aartek</groupId>
    <artifactId>online-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <modules>
        <module>online-data</module>
        <module>online-service</module>
        <module>online-web</module>
    </modules>
    <build>
        <finalName>online-test</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <url>http://172.16.3.106:8080/manager/text</url>
                    <username>saadkhan</username>
                    <password>qw4hddqcrg</password>
                    <server>Tomcat9</server>
                    <path>/${project.build.finalName}</path>
                    <update>true</update>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <forceJavacCompilerUse>true</forceJavacCompilerUse>
                    <encoding>utf8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                    <fork>true</fork>
                    <executable>C:\Program Files\Java\jdk1.8.0_141\bin\javac</executable>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <inherited>true</inherited>
                <configuration>
                    <classpathContainers>
                        <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
                        <classpathContainer>org.eclipse.jdt.USER_LIBRARY/TOMCAT_6.0.14_LIBRARY</classpathContainer>
                    </classpathContainers>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.javassist</groupId>
                    <artifactId>javassist</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mortbay.jasper</groupId>
            <artifactId>apache-el</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-api</artifactId>
                <version>2.7</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

A: As of Spring Boot 2.0 (and Spring Framework 5.0), the new baseline requires JDK8+ and Servlet 3.1+ containers. Tomcat 7 does not fall into this category and Tomcat 8.5+ is required.
See the Spring Framework wiki and Spring Boot reference documentation for the baseline requirements.

redpajama_set_name: RedPajamaStackExchange


The holidays are here. Business is slowing down as people shop, spend time with family and enjoy the festivities. It is the perfect time to take a hard look at your agency marketing and determine where you can make improvements.
Here are four steps to guide you through the planning process and help you focus on making your agency marketing better in the New Year.
Do you have a marketing plan? Dust it off, and review your goals and strategies for 2014. Compare how the year actually went for your agency marketing with what you had planned. Did you meet your goals? Did you stick to your plan and forecasted spending? Do you need more or less of a budget? Do you need to focus on other marketing tactics? Do you need to be more flexible in your plan? Don't panic if you don't have a plan. I wrote a blog post about how to create an insurance agency marketing plan that will help you write one.
Look at the performance of each of your marketing projects or campaigns. Compare each with your sales, revenue and retention goals. Which marketing tactics had little or no impact on your business goals? Were they a waste of time? Or could you make a change to improve the performance? Though a marketing campaign may have made little impact, it is not necessarily because it was a bad idea. Sure some marketing campaigns like an ad in the Yellow Pages may be a waste of time (if your numbers say that), but sometimes something as simple as changing the frequency of your newsletters or the kind of content you share on social media can make a difference.
Which marketing projects or campaigns did work? Why did these do well? Did you execute them better? Did you invest the time to make sure they worked? Did you use an outside expert to help you stay on top of these campaigns? If you focused more on those campaigns in 2015, do you think they could perform even better?
Look for what you're missing in your agency marketing plan. Do you have a good insurance agency website? Are you using email marketing? Are you active on social media? Do you automate your lead follow up process? Are you blogging? Are you consistent with your brand across all your marketing campaigns and collateral, including the colors, font and style you use? Do you have a search engine optimization strategy? What are you doing offline to support your online efforts and drive traffic to your website?
Taking the time now to look at your agency marketing and identify what worked, what didn't and what you're missing is worth the effort. It can be tough to see what didn't work especially when you consider your financial investment. But, you are better off when you recognize what didn't work so you don't continue to spend money on those projects or campaigns. Plus, you will have a clear idea of what does work for your agency and can focus your time and budget on those tactics.
Need help with your agency marketing? Request a free consultation.


text:
Francis Davison (1919-84)
Black, Green and Yellow c 1969
paper collage, 121 x 515 cm
Sheffield Art Galleries and Museums Trust
Francis Davison is, in my estimation to date, the pre-eminent British abstract artist of the second half of the 20th century.
He worked in isolation, within the passionate confines of his marriage to the artist Margaret Mellis. They kept poultry on their smallholding to make a living. Gradually, over many years, he developed his extraordinary language of large collage.
He never added pigments, but only used the given colours of the paper. What look like brushmarks are actually the remains of previously glued, torn-off sheets. He increasingly recycled old collages, for he worked incessantly, in the small front room of their house which he used for a studio, hardly selling anything, making his work richer and richer and bigger and bigger.
Davison was a modern-day equivalent of the illuminator of the Lindisfarne Gospels. I know of no-one else who could make hues, tones and shapes dance together in the mind's eye in such a life-enhancing way, in a purely abstract visual equivalent of song. The collages may look thrown together, but they're not. The colour-space relationships are absolutely exact. Every nick and tear tells in the raw-ragged, furious, utterly unsentimental but glorious beauty he gave to the world.
I put on a show of Francis Davison's work at the Hayward Gallery in 1982. A young student from Leeds called Damien Hirst had the nous to be bowled over by it, and he then tried to do his own versions of Davison. His attempts revealed his barren visual creativity and, like Duchamp before him (who suffered a similar impotence), he subsequently took his pathetic revenge on art. Neither Francis Davison nor I can be held responsible for the subsequent debacle.
Francis Davison's estate is in the care of Telfer Stokes. The remarkable Goldmark Gallery in Uppingham, Rutland - a beacon of excellence in art - promotes Davison's work.
For more information please visit Francis's website: www.francisdavisonart.com
Brilliant Black 1982
Tate Gallery, London


Good form and good fortune, two key elements of Preston North End's 12-game unbeaten run, were to desert them in Reading as game No.13 proved unlucky.
After pulling level on points with the top six before the international break, hopes were high among the 1,800 or so travelling PNE supporters at the Madejski Stadium that this could be the day their side climbed into a play-off slot.
However, Alex Neil's men weren't quite themselves in this battle Royale, and were especially wobbly at the back for a costly spell during the first half.
Injuries were also to haunt them during the contest, Ben Pearson and Brandon Barker both limping on to the bus for the journey home.
Pearson played a lot of the second half effectively on one leg as his hamstring cramped up and tightened.
One leg or not, he was still North End's best player on the day, soldiering on until the last few minutes when it was a case of damage limitation with his sore limb.
Neil had long since played all his cards in terms of subs by the time Pearson came off.
Two changes were made at half-time, one of them being Barker, who was unfortunate to last just 11 minutes before his hamstring went.
So a sub had to be subbed, yes it was one of those days when fate dealt North End a bit of a bad hand.
The contest was effectively decided in a six-minute spell, Reading scoring both of their goals just after the half-hour.
PNE's defending was not good for either, in particular the second goal.
It might not have been the finest hour for Ben Davies and Jordan Storey but bearing in mind how good they have been since pairing up in January, they must surely be cut some slack for a rare off-day.
Davies, Storey and Declan Rudd were all culpable in their different ways for the hosts' second goal.
A back pass from Davies didn't carry sufficient weight, then Storey and Rudd left it for each other to clear, allowing Mo Barrow to walk the ball in.
Barrow had six minutes earlier breezed past Storey to cross for Yakou Meite to open the scoring.
It left Preston with a tough task ahead of them in the second half.
Not since Aston Villa in October had they trailed 2-0 at the interval.
They roared back that night to lead 3-2 and then got pegged back to 3-3.
So this was not a lost cause by any means, although the task did ultimately prove to be beyond their grasp.
Jayden Stockley's halving of the deficit in stoppage time was too little too late.
Had it come just that little bit earlier, who knows what could have happened?
Mind you, after Stockley had turned the ball home in the third minute of time added on, there was still time for Josh Earl to put a header wide.
Although defeat will always be met with disappointment and frustration, this is not the time for toys going out of the pram.
Putting it in context, PNE had taken 28 points from the 36 on offer in the unbeaten run.
It is now 28 from 39, which is far from a disaster is it?
During the international break, Neil had spoken of five victories from the last eight probably being enough to secure a play-off place.
The Reading defeat means one life has gone, with five wins from seven needed.
A big ask, yes, but certainly not beyond them.
The next three fixtures will be a barometer of North End's fortunes.
A healthy points tally from Sheffield United, Leeds and West Bromwich will take their play-off push into Easter and beyond.
Should it go the other way, the top six will evade them once again.
Saturday's clash at the Madejski was one between two sides needing points for different reasons.
The Royals were able to put clear water between them and the bottom three with the win and to be honest, they looked anything but a side haunted by the threat of relegation.
They moved the ball more effectively than North End in the first half, then dropped deep to protect the lead in the second period.
Over the 90 minutes the possession count was 67%-37% in PNE's favour.
Possession guarantees you nothing but in this case was an indication of the extent the home side dropped off and let North End have the ball during the second half.
Unfortunately, Preston did little with it in terms of clear-cut chances.
They only had two shots on target, Stockley's goal and an effort from Louis Moult which forced Emi Martinez into his one save of the afternoon.
Paul Gallagher might have done better with a volley he fired across goal and wide late in the day.
As an attacking unit, PNE did not really fire all day.
Neil started with Callum Robinson, Sean Maguire and Lukas Nmecha in a front three.
Robinson and Nmecha were subbed at half-time with Stockley and Barker getting their opportunity.
The untimely injury for Barker meant a chance in the forward line for Moult.
All three substitutes made their mark, even if Barker was on only for a short time.
A pretty bland opening half-hour burst into life when the Royals took the lead in the 30th minute. John Swift turned Darnell Fisher well inside the Reading half and played the ball up the channel for Barrow to chase.
His low cross found Meite at the far post who lifted a shot on the stretch into the net.
Barrow and Davies gave chase down the right, Davies first to it on the side of the box, from where he tried to guide it back towards Rudd.
It lacked weight, Barrow nipping in between Storey and Rudd to take it sideways and find the empty net.
Preston's consolation came in the third minute of time added on, Moult knocking a high ball from Storey into the path of Maguire.
From an angle to the left of goal, Maguire got a shot away which came back off the post.
The rebound fell Stockley's way, the striker wrapping his foot around it to fire home.


text:
Different Insect Species Use Different Chemicals to Identify Queens
Entomology Today	 February 4, 2016	 2 Comments
For years it was thought that ants, wasps, and other eusocial insects used a common class of chemical compounds to distinguish queens from workers and other members of their colonies or hives. However, new research shows that these chemical signals are very different, even between closely related species.
"These chemical signatures are incredibly important, because social insect groups couldn't function without them," said Adrian Smith, lead author of a paper on the work. "These signals are how insects in a colony distinguish males from females and workers from queens."
Researchers collected the colonies of three closely related trap-jaw ant species found in the southeastern United States: Odontomachus ruginodis, O. relictus and O. haematodus. The researchers then took samples of the chemicals found on the exoskeleton of each colony's queen and workers and used a gas chromatograph to analyze each ant's chemical signature.
The researchers found that the queens of each trap-jaw species used very different chemicals to differentiate themselves from workers.
"Not only are these pheromones outside of the class of compounds thought to be common to all eusocial insect queens, but they are not even similar to each other," Smith said. "Each species uses its own unique blend of chemicals. And two of these chemicals are — as far as we can tell — completely new to science."
These new chemicals belong to a class of compounds called dialkyltetrahydrofurans, which had previously been found in butterflies, but not in eusocial insects.
Queen and worker ants are all females, but the researchers also sampled the chemicals found on males.
"Across these three Odontomachus species, the males had much more similar chemical signatures than females — though you could still tell one species from another," Smith said. "Males are outsiders in ant society — they fly out of the colony to breed and then die. Perhaps because of this, they are not well studied. Little is known about their chemical signatures, even though these male pheromones may play a key role in how prospective queens identify their mates."
The new findings raise interesting questions in two areas. Firs, are these results evidence of evolutionary links between solitary and social insect communication?
"Solitary insects use their chemical signatures for distinguishing the sexes and finding a mate," Smith said. "This study demonstrates that social insects are likely doing the same thing, as well as things that are specific to social insects, such as queen signaling."
Another line of questioning revolves around the new chemical compounds that researchers found in Odontomachus queens. Additional research is needed to explore why the ants have evolved to produce these chemicals, and whether these chemicals may have practical uses in other applications.
Read more at:
– Comparative analysis of fertility signals and sex-specific cuticular chemical profiles of Odontomachus trap-jaw ants
Adrian Smith, dialkyltetrahydrofurans, eusocial insects, Odontomachus haematodus, Odontomachus relictus, Odontomachus ruginodis, Trap-jaw Ants
Bed Bug Genome Map May Provide Clues for Controlling Them
This Artificial Diet May Make Insect Rearing Easier
Aziza Sharaby says:
This is an important knowledge. Thanks
Insectarium Zoo says:
Wow this is amazing


@Linda – a dash generally means refer to the header row for that broker, e.g. taking the first example in the Flat Fee table, Interactive Investor, their regular dealing fee is £1 – this applies whether you do it in an ISA, standard trading account, or SIPP.
As an aside, although Interactive Investor charge an annual fee of £90 for an ISA (and/or trading account) you get this much back in trading credit, which means you could make 90 regular scheduled trades, or 9 adhoc trades, per year for no additional cost.
One thing to watch is how cash is treated. With the Fidelity SIPP, uninvested cash attracts the full platform fee, 0.35%. HL charge nothing.
My ISA is a pretty good fit for iWeb or Halifax.
However, when I asked them whether they held iShares Physical Gold ETC (SGLN) OCF, they said yes, but only in USD, not in GBP.
Is it common for brokers not to hold local stocks? Is there a good alternative to iWeb/Halifax in this range?
Personally, I wouldn't worry about using the USD version of an ETF from one of the major providers (e.g. iShares, Source, VanEck). If it's anything like Youinvest, it works in practice just like the GBP version except that the value is quoted in USD. The charges are the same, in fact it may actually be cheaper because the USD version may have a "tighter spread" because it is more widely traded. Just stick to physically backed ETFs (strictly speaking an Exchange Traded Commodity) and prepare to be asked some questions when you attempt to trade. You may be asked if you are "qualified" to trade in ETCs and if you know what the additional risks (even if you are actually lowering the overall risk of a diversified portfolio).
I've generally found with iWeb/Halifax/Lloyds (they are all the same company) that if you email customer services the security name, ticker number, exchange and ISIN they will be more than happy to ask Dealing Control to add the stock as tradable on their systems for you.
Apparently, they don't automatically add new pooled investment products (unless it's a really big launch) as there is some compliance work for them to do before they can allow dealing with private investors. I've found that it takes about one week from emailing them before a new product is tradable; they are pretty on the ball.
Many thanks. When I spoke to them, they said they wouldn't add it since they already had investors using the US version. Perhaps I'll drop them a note and ask again.
Thank you. My concern is that in addition to gold price risk, wouldn't I also be taking on currency risk if I buy the USD version?
Again, personally, I'm not too concerned which currency you use to price gold as, in a way, gold itself is a currency. By buying something tied to the price of gold you are already exposed to all currencies used to buy or sell gold, which will include principally the USD but also the yen, rupee, euro, GBP, etc. I actually prefer holding a "basket of currencies" rather than favouring the GBP, at least whilst I'm still accumulating savings. I personally don't like to speculate one way or the other, the underlying asset is the most important thing, which is something linked to the price of gold. I'm assuming you would be buying and holding for the long term, which will hopefully even out fluctuations in currencies. Depending on how much gold you want to hold, I actually prefer using something like BullionVault. The gold is actually yours. Okay, it's not in an ISA or SIPP, but then it does not produce income (so can't be taxed) and you are unlikely to sell enough in one year to incur capital gains tax. The only problem is that it is slightly more difficult to maintain a specific balance between different assets, but the solution is just to top-up the one that's dropped below a target allocation (across all accounts).
There was a blog on here a while back explaining that the intermediate currency didn't matter. I'll look for the link.
That's a very helpful read, thank you so much.
I came here a few weeks ago looking for somewhere to transfer my interactive investor (ex td direct) portfolio. I don't like ii due to their past behaviour & fees tariff, and I'm already well over my comfort level with my iweb holdings. The broker tool suggested IG group as cheapest after iweb, and although IG don't do funds, I plan to keep funds in current iweb account and so initiated ii transfer to IG. I've come back here today and notice now that IG has completely disappeared off the broker tool calculator and also the table. Is there some reason for this? Just concerned that there's something I haven't picked up on with IG and I've already initiated transfer to them.
@ Jane M like The Investor says IG were never on the table. Maybe they recommended in the comments?
But don't forget that you only need to place three trades of any value across any of your IG accounts during the quarter, in order to be exempt entirely from the fee.
Very useful table and thread, thank you.
Interesting to hear about IG changing their charging structure. I use them, and they haven't yet advised me of this change to their fees. Possibly because I am slightly over their £15k threshold, but … its still a bit opaque of them.
Given that Barclays and Lloyds are on the list – I would suggest it is worth adding HSBC, especially if you can invest or earn enough to qualify for Premier banking. For equities and for a limited set of ETFs (incl some Vanguard ones) they are sort-of competitive and they do provide a further FSCS-regulated platform for those with larger portfolios to spread their risk across. The other attraction – assuming that you have the 50k to invest or the 100k of income – is that Premier banking gives you and your household some good quality worldwide travel insurance incl medical/ USA/ winter sports, which makes up for the £40 or so annual platform fee.
Overall I don't think they are as good as say ii or iweb, but as a major clearing bank they are a very visible, way more competitive than some on this list.
Also just had a look at DeGiro via your link and their investor protection is not as good as FSCS – Netherlands based and only a 20k limit. If you have time it would be good to have a column that identifies which regulatory regime provides protection for each platform, and how much.
Well spotted Snowman. I've checked Cavendish Online (since it's a white label version of Fidelity) and they are quoting both fees depending on if people have been "migrated" to the new platform.
Such an increase in charges seems excessive; especially since they are still only offering a "selection" of ETFs and ITs rather than any ETF or IT listed on the LSE, and that they add together all customers' trades and just instruct their broker JP Morgan to perform one deal per day!
Wrt Cavendish/Fidelity: Does anyone know how dealing fees work with respect to tax refunds in a SIPP? If I deposit £400/mo in to a SIPP do I pay £1.50 on the £400 buy and then another £1.50 on the £100 buy after the tax relief comes in, or will it be a whopping £10 on the later buy?
Also, why does the AJ Bell SIPP get a "good for" comment of "ETF portfolios below £15K" when Fidelity/Cavendish clearly win here? Better selection?
Ive been looking into hsbc as they have low currency exchange charge for buying US stocks but you have to have a seperate invest directplus account which is seperate to your main isa account!?
Im leaning to IG as they only chareg 0.3% exchange rate premium vs 1.5% for most others. However they dont do funds that I can see. Is there an etf equiv of Vanguard lifestrat ( sons long terms savings) or would I have to to get a mix of etfs?
A Fidelity customer service representative told me on the phone yesterday that ETFs cannot be held in their SIPP. The broker comparison table suggests that you can hold ETFs in the Fidelity SIPP, so either the table is wrong or I was given incorrect information.
Can someone who is a Fidelity SIPP account holder please check whether ETFs are available inside the SIPP and post a reply comment so we can be sure the broker comparison table is correct?
To Stefan, I hold about a dozen EFTs in my Fidelity SIPP. There are quite a lot to choose from so yes you were given wrong info.
Pretty sure you can hold ETFs in a Fidelity SIPP. Researched this recently but intend to transfer away as selection poor and costs relatively high for me.
@ Mr Optimistic/Stefan – you can, but two disadvantages, we found: a) it's forward-pricing only, so you can deal 'live' – just put in an order for a 12am purchase/sale the next day; b) the range is limited and they were really only willing to accept existing portfolio holdings, so it was quite limiting. Service was good, but not having access to live pricing for shares was ridiculous, so we left them.
@ Mr Optimistic/Stefan – you can, but two disadvantages, we found: a) it's forward-pricing only, so you can't deal 'live' – just put in an order for a 12am purchase/sale the next day; b) the range is limited and they were really only willing to accept existing portfolio holdings, so it was quite limiting. Service was good, but not having access to live pricing for shares was ridiculous, so we left them.
@Susan. Thanks. I have heard the Fidelity offering described as more of a platform than a SIPP so that may explain it. I noted the fact that they charge the platform fee on cash too.
Hihi – what about Saxo bank? I see their ISAs have a custody fee of 0.06% of invested assets floored at £5/month… so £60 a month up until you have £100,000 invested… which looks alright no?
I've just tried the comparison tool and just wanted to say how easy it was to use (and quite a revelation). Thanks very much!
Please add sharedealactive and x-o sipp to the interactive comparison.
Is it just me or are these platforms just changing for the worse?
Fidelity look set to cause a conundrum for me. Having both ISA's and my SIPP with them I made the move to mostly ETF's and IT to reduce platform charges and make use of the £45 fee cap. However about 6 months ago I started putting some of my regular SIPP savings into cash in anticipation of a market top, only now to find as stated above, that they levy the full 0.35% charge on cash held in accounts.
I also don't like the fact that they are moving to fixed £1.50 dealing costs on regular contributions. I currently split my monthly contribution 8 ways, taking advantage of ability to diversify across sectors, using the percentage allocation option currently available. Total cost 0.1% on transactions. When they change over the SIPP to the new model (currently running on ISA and trading accounts) I will then face a £12 dealing charge per month. A jump from 50p to £12 is somewhat staggering on a £500 contribution and would be even worse for lower monthly savings amounts. I guess I'll ride this out until they change it and decide what to do then.
Other ISA's in TD Direct have now gone to ii and again I feel this is a change for the worse. I resent having to pay charges on the basis that 'I may' need to use them. I hold mainly shares in this account so I think I'll probably be joining many and changing to iWeb. My worry here is that their website and platform looks sorely in need of an update and it seems when platforms do this they also rejig their charging structure.
On a slightly separate note I was looking to put some additional regular savings into funds. I was looking at Close Brothers? They seem cheap at 0.25% but perhaps a bit less slick (i.e. it took them 3-4 days for me to open an account and it looks like you have to post monthly savings instructions setup). Does anyone have any experience? Or perhaps Charles Stanley offer a similar alternative.
I should clarify my previous comment. I checked out my account and actually seems that Fidelity are paying interest on cash held in my SIPP account! This works out at currently 0.35% in the current environment. Not bad to be earning something while it's waiting to be invested. I checked the t and c's which backs this up. I have to speak to them tomorrow and so will try to confirm.
I have a total pot of £60k and am in my early 30s, so not looking to drawdown any time soon, but would be looking to transfer in additional cash once every quarter. A la Warren Buffett, I just want to be fully invested in a Global Equity tracker and forget about it for 30 years, but also have the option to take on a bit more risk with smaller companies or/and emerging markets via investment trusts. I also already have a Charles Stanley Direct Stocks & Shares ISA and like their platform.
I've calculated a CSD SIPP would cost me c.£150: a platform fee of 0.25% for funds and shares (£150, which is annoyingly only capped for shares, although funds dealing is £0); and a £100 admin charge which would be waived due to platform assets being greater than £30k (so £0). This tallies with the Daily Telegraph's SIPP table, which shows CSD SIPP being one of the cheapest for a £50k portfolio (£148).
However, the Monevator comparison tool gives a cost of £691: £0 platform; £686 fund; and £5 exit. Can anyone help reconcile these figures?
The comparison tool recommends ii (£213 pa), but I'm put off by peoples' poor reviews. I know a 'flat fee broker' would be best in the long run but none of the Monevator ones appeal. If I invested in ETFs rather than funds, at least I'd eventually benefit from CSD or HL's cap on platform fees for shares?
Also, does anyone have any info on the different practices wrt SCRIP/DRIP dividends if I were to hold non-accumulating shares?
@chris – a couple of points. ETFs are 'shares' and a good way of investing in index trackers on platforms which charge a % fee on funds. I have a Youinvest SIPP invested in VGOV and VWRL. You have to periodically reinvest divis but that's only £1.50 a shot.
Also, why don't any of the flat fee brokers appeal? You'll have to do your own sums of course, but if you expect to be getting above six figures any time soon then you should be considering flat fee. My spouse is with Alliance Trust Savings for his SIPP- not the cheapest of the flat fees but not bad. We also have ISAs with iWeb who are definitely the best value of the flat fees. I've never had any service issues with iWeb – I'm very much a fire and forget investor, I just do a few trades around the end and beginning of the tax year so it suits me well.
Can I have a little moan? When looking at the comparison table, I have to keep scrolling up to the top to read the column headings. I suppose I could write them down but it would be really good if the headings were repeated every so often so that they are readily available. On my laptop, there are about 2-3 platforms on each screen.
@Vanguardfan – thanks for response. I understand the difference between ETFs/shares and funds, the benefit of funds on Charles Stanley is that you don't pay dealing fees, but the downside is that the platform fee associated with them is not capped.
Re the flat fee brokers, ii looks to have poor customer reviews and I don't want to give my money to Alliance Trust nor any of the high street banks (Halifax, Lloyds). I'll have to investigate iweb and ShareDeal Active properly. I'm looking to hold for the long term too.
I assume from your moniker that if you were starting afresh you might also wait for the introduction of a Vanguard SIPP?!
1) ETFs vs Index Funds: I've read here and elsewhere that as I have more than £25k, an ETF might be a better choice than an index fund. How come? Am I missing something about costs here? I know that ETFs have a one-off flat fee to invest in most platforms (£5-10), but are they cheaper in some % way? Don't both ETFs and Index Funds have an annual OCF? Or are they not the same in this respect?
2) Interactive Brokers: I hear this broker company mentioned and recommended to me a lot by others who have sensible ideas about passive investing, but in this article it was relegated to 'share dealing broker'. Yet it appears possible to buy a very wide range of both Funds and ETFs on their website. Is there a reason you don't recommend/mention this broker more? Am I missing something here as well?
On many (but not all) platforms, funds have a % annual fee. eg, o.25% on £150k is £375 pa. On most (but not all) platforms, ETFs have a fixed annual fee, usually around £50, so £325 cheaper, in your case. There are other differences – there was an article on this a few years ago.
ETFs are not intrinsically cheaper than index funds at any given level. At the £150K level, a flat fee broker will be cheapest and they largely treat index funds and ETFs the same way price-wise. ETFs and index funds both have an OCF.
Interactive Broker – is in the sharedealing part of the table because that's their business, they are fundamentally a trading platform. I don't believe you can buy index funds through them (but please point me in the right direction if you've found differently) but ETFs are available including a menu of commission-free US domiciled ETFs. Note, US domiciled ETFs are a whole new kettle of worms – there have been reports they can expose non-US citizens to US estate taxes.
I understand the platform differences, however on the one I was going to use (iWeb) they appear to be treated the same so I was wondering whether there were any other differences.
Thank you for your insightful comments on other posts by the way, I've learnt a lot from going through the comments and benefiting from your research.
I forgot to thank you for keeping this site going – it's been an invaluable resource in my research!
I definitely agree that their target market is professional traders and the like, but in my view at least they have inadvertently created a good platform for a passive ETF investor with a larger portfolio. Even with a smaller portfolio, you would pay $120/year (which compares OK to say interactive investor's £90/year fee) and in return get all your dealing basically commission free. An added benefit is that, whereas iWeb would close my account if I moved abroad, IB wont, sparing logistical hassles.
I could well be very wrong in my analysis so please let me know if I am!
With regards to US-domiciled ETFs: it appears the estate tax would not be an issue if I keep the holdings under $5.4 million and remain a UK-domicile, according to http://www.kbgrp.com/articles/international-tax/united-states-estate-tax-and-residents-of-the-united-kingdom.html . I also left a long comment on another post of yours referencing @Ivanopinion's analysis of how a US-domiciled ETF may be more tax efficient than both an Ireland-domiciled equivalent or a UK-domiciled inedx fund, but I will leave that conversation for the post I left it on.
Thank you again for running this site!
@NewInvestor – Am I right in thinking Interactive Brokers don't offer Stocks and Shares ISAs?
IB offers SIPP indirectly, via third party SIPP administrators.
The only issue with regards to US estate tax is that even if you don't owe tax you (or your executor) still needs to file a tax return. That however is a small negative that is outweighted by the cost advantages of US domiciled ETFs (on all aspects, ie commissions, bid-offer spread, and ongoing fees).
Can you please link to your comment regarding the tax efficiency?
Also, if your W8-BEN form is up to date then you'll pay 15% withholding tax on any dividends on US shares held in a US brokerage, or 30% if it's not up to date. You might also need to file a 1040NR tax return to the IRS. You might be able to use UK foreign tax credits to reduce you tax liability, but it doesn't seem worth all the hassle to get marginally cheaper funds and trading costs compared to the best UK platforms, where you can take advantage of the ISA and SIPP.
Are you sure I would need to file a US tax return for US holdings if I am a UK tax resident, not a US person, and I have a properly filled W8-BEN form?
-ISA with Irish/UK funds where there is small difference in expenses compared to US equivalents.
If I do indeed have to file a 1040NR, this is probably enough of a deterrent to using US listed funds (for the hassle, as there will be no tax to pay for sure).
Still, I can't imagine everyone who trades the odd US stock files a 1040NR. Are they wrong not to?
For SPX trackers the savings are small, true. But for many other funds the difference is usually >10bps in expense ratio, plus higher transaction costs and bid-offer spreads. With Interactive Brokers FX conversion is a non-issue (costs $2 per trade for interbank rates and you can "attach" the FX to the trade so it's done in one step semi-automated) and US stocks trading costs are a fraction of Europeans with almost zero slippage, so even for a single transaction you are better off trading the US one.
I did some search regarding US taxes. It seems there's no tax to pay NOR any tax return to file.
So, as I said above, you still have to pay a 15% withholding tax on any dividends if your W8-BEN is up to date. You may be able to reclaim some of this by filing a tax form in the US, but that depends on your specific tax situation.
Oh I see, so there may be a benefit to filing the 1040NR. While I appreciate you are not offering tax advice, can you elaborate what this situation may be? Is it as simple as not having used the annual div tax allowance? (because otherwise the UK tax is more than 15% anyway).


Regarding the Green New Deal's call for the elimination of fossil fuels, Heartland points out that "when there is more carbon dioxide (CO2) in the atmosphere, plants generally grow faster, which means there's more food available to feed the world's growing population of people and animals." Aside from that, adds the Institute, "regardless of what we do in the United States, the rest of the world is going to continue increasing its fossil fuel use, more than offsetting any CO2 reductions we might make." In short, any carbon-cutting measures taken by the United States would be doomed to irrelevance.
The origins of the term "Green New Deal"can be traced back to Richard Murphy, a British tax scholar and political economy professor, who in 2007 collaborated with a number of newspaper editors, economists, and environmentalists to form a "Green New Deal Group" that proposed massive public expenditures to fund: (a) the development of a zero-carbon-emission transportation infrastructure wholly reliant on renewable energy sources rather than fossil fuels; (b) the wide-scale insulation of homes to make them more energy-efficient; and (c) the establishment of training programs to develop a national corps of workers to carry out these objectives. To fund this initiative, Murphy advocated a combination of tax hikes on wealthy people and corporations, "straightforward deficit spending," and the implementation of quantitative easing – a strategy whereby the government would establish a green infrastructure bank that would issue bonds which the government, in turn, could buy back. On July 21, 2008, Murphy's "Green New Deal Group" published a report detailing its specific recommendations.
But when the cap-and-trade legislation known as the American Clean Energy and Security Act died in the U.S. Senate in 2010, talk of a Green New Deal became suddenly scarce. In 2012, and again in 2016, Green Party presidential candidate Jill Stein revived the idea by making a Green New Deal a central part of her campaigns, and the Green New Deal became part of the Green Party's official platform.
Other notable supporters include every Democrat seeking the 2020 presidential nomination: Elizabeth Warren, Bernie Sanders, Cory Booker, Kamala Harris, Kirsten Gillibrand, and Julian Castro.
(TLB) published this article from Front Page Mag with our thanks for the coverage.


text:
Home / About Us / The Lowe & Fletcher Group
Lowe & Fletcher was founded in 1889 when John Lowe and Thomas Fletcher established a lock making business. They founded it in Willenhall – the home of the British lock making industry in the famed Black Country, industrial heartland of the British Empire.
Today Lowe & Fletcher, along with Euro-Locks, forms the Locking Systems Division of the Lowe & Fletcher Group. As a fifth generation family owned business we are proud of our heritage which enables us to take a long term view with conviction and confidence.
Whilst manufacturing locking systems remains at the core of our business, the Lowe & Fletcher Group has also diversified into Fire Safety Systems for buildings through its BLE and Coopers Fire businesses.
Download Brochure Download
Group Values
Our values are embedded in our family business ethos. They enable us to develop as a team, invent new things, and plan for the future with conviction and confidence. They can be summed up as follows:
We act with honesty, openness and a respect for others
We act with care and consistency
We take responsibility for our actions


text:
GMAT Prep & MBA Admissions Consulting
GMAT Prep Home
About the GMAT
GMAT Sections
GMAT Analytical Writing Assessment (AWA)
GMAT Integrated Reasoning (IR)
GMAT Quantitative Reasoning (QR)
GMAT Verbal Reasoning (VR)
GMAT Scoring
GMAT Test Day
GMAT Role in Application
GMAT Predictor of Success
GMAT FAQ
GMAT Prep Online
GMAT Free Downloads
GMAT Prep Books
GMAT Official Guides
GMAT Dossiers
GMAT Prep Courses
GMAT Course Options
GMAT Courses USA
GMAT Courses Canada
GMAT Courses Europe
GMAT Courses Asia Pacific
GMAT Courses India
GMAT Courses Australia
GMAT Courses Latin America
GMAT Courses Middle East
GMAT Courses Africa
GMAT Online Courses
GMAT Tutoring USA
GMAT Tutoring Canada
GMAT Tutoring Europe
GMAT Tutoring Asia Pacific
GMAT Tutoring India
GMAT Tutoring Australia
GMAT Tutoring Latin America
GMAT Tutoring Middle East
GMAT Tutoring Africa
GMAT Tutoring Online
Free GMAT Prep
Free GMAT Practice Questions
Free GMAT Practice Test
Free GMAT Sentence Correction Video Tutorial
GMAT Computer Test versus Paper Test
Computer and Paper Test Availability
As of 2016, the paper-based GMAT is no longer available. According to the GMAT Handbook published by the Graduate Management Admission Council (GMAC), "the exam is only given on computer, which ensures consistency and fairness." Other reasons cited for the discontinuation of the paper test include accessibility, tracking, and scoring. The computer version of the GMAT can be administered on almost any day of the year and at a larger number of locations, while the paper test necessitates additional proctors and presents other logistical issues that limit its availability. The computer test allows students to instantly track their progress while taking the exam and receive unofficial scores immediately afterwards, neither of which is possible with the paper test. "Fairness" is a reference to the computer-adaptive nature of the electronic GMAT, which obviously cannot be duplicated with a paper test. It should also be noted that paper tests are more difficult to transport and store, and can be more easily lost or destroyed. Computerized tests can present problems of their own (such as vulnerability to digital theft), but the current version of the GMAT is quite simply impossible to reproduce in hard copy, and the advantages of computer testing outweigh the concerns.
Distinctions between the Paper Test and the Computer Test
The paper GMAT is a conventional test in which all questions count the same toward the final score. The computerized GMAT uses a complex algorithm that calculates a different value for each question, which is determined by the likelihood of a correct answer for a student at a given level of ability. When taking the computer test, students must answer the question presented before proceeding to the next question, and they are not allowed to go back and change responses (computer adaptation necessitates this procedure). With the paper GMAT administration, test-takers were permitted to answer the questions within a section in any order they chose, and could also revise answers if they wished. The computer GMAT is unique for each test-taker, and no two students will receive exactly the same questions (even if they take the test at the same place on the same day). The paper GMAT varied only the order of the questions within a specific administration.
The Paper Test as a Practice Tool
Official GMAT paper tests are available from the online store on the GMAC website. The cost is $29.99 per set (each set contains three paper GMATs, and a total of three sets can be purchased). These paper tests date from the 1990s, but can be of some usefulness for GMAT practice. Many of the questions are still in circulation, but the lack of computer adaptation may insufficiently challenge higher-performing students (the tests include a set number of questions at each level of difficulty). The paper tests are worth considering because they add to a student's repository of available practice questions, which is always valuable. Each set of paper tests includes instructions for scoring, but this is of very limited value for today's GMAT (scoring procedures are currently much different than they were in the 1990s). Students preparing for the GMAT should also remember that these paper tests do not include integrated reasoning questions, which did not exist when these tests were published. Generally speaking, the paper tests are best used as supplemental practice rather than as a substitute for more current materials.
Computer Testing and GMAT Score Inflation
The computerized GMAT was first administered in 1997, and the GMAT was among the first assessments to move to computer-adaptive format. The use of the computer GMAT has been correlated to a general trend of score inflation. The GMAT was initially designed to produce an average score of 500, which declined over the first 30 years of the test's history (the average GMAT score in the mid-1980s was about 460). After several years of computer testing, mean GMAT scores had risen to about 535 by 2005, and as of 2016, the average GMAT score was almost 552. In 2001, a 680 total score would place a test-taker in the 90th percentile. By 2008, the same percentile ranking required a total score of 700. Student performance on the quantitative section of the GMAT in particular has improved considerably since the advent of computer-adaptive testing. In 2001, a scaled quantitative score of 47 represented the 80th percentile; in 2016, the same score was in the 65th percentile.
Score Inflation and Business School Acceptance
Higher overall GMAT performance has led to higher GMAT benchmarks, both at highly selective business schools and at less prominent institutions. The mean total scores of students accepted to NYU's Stern School of Business increased from 610 in 1990 to 686 in 2000. By 2016, the median and average GMAT scores at Stern were 710, with a middle 80% range of 650-760. Binghamton University School of Management's accepted students averaged 549 in 1998 and 594 in 2002. In 2016, the average at Binghamton was 620, with a middle 80% range of 580-670. GMAT score inflation has clearly elevated the GMAT standards at business schools.
GMAT Basics
GMAT Format
GMAT Changes
GMAT Administration
GMAT Registration
GMAT Computer vs. Paper Test
GMAT Strategies
GMAT History
GMAT versus GRE


text:
New Zealand's new superstar: Kyle Jamieson's coach on what makes him a fast-bowling menace
With 48 wickets in just eight Tests at an astonishing average of 14.17, New Zealand seamer Jamieson has, so far, made the transition from domestic cricket to the international arena look seamless.
Ayan Acharya
Meteoric rise: Kyle Jamieson acknowledges the crowd during the reserve day of the World Test Championship final. - GETTY IMAGES
New Zealand's Kyle Jamieson is so sensationally good at the moment that parallels with cricket's greatest players are inevitable. In his short career so far, Jamieson has started well, got better in the middle, and by the end of the World Test Championship (WTC) final against India, produced performances that have left one wide-eyed just watching it, full of ridiculously good deliveries.
Jamieson's swing bowler bucket list was greeted with a befitting set of circumstances in the WTC final last month. Southampton: Conditions ripe for swing? Check; Dukes ball? Check; Green outfield to retain shine? Check; Batsmen with lack of practice in the above conditions? Check; arguably one of the world's best slip-catching cordon? Check. The result was a Player of the Match award for a seven-wicket match haul including a five-for in the first innings.
ALSO READ - Jamieson towers over the rest after WTC heroics
With 48 wickets in just eight Tests at an astonishing average of 14.17, Jamieson has, for now, made the transition from domestic cricket to the international arena look seamless. The Auckland-born seamer rose to the national limelight during his time with Canterbury, where, in a Super Smash Twenty20 (T20) match against Auckland in January 2019, he took 6 for 7 for the then joint third-best innings haul by a bowler in all T20s.
He moved back to Auckland in 2019-20, where his performances in domestic cricket eventually caught the eye of the national selectors. Jamieson made his international debut in February 2020 against India and picked his first five-wicket haul in the following Test. He complements a New Zealand bowling attack which comprises left-arm pacer Trent Boult, right-arm seamer Tim Southee, and the aggressive left-arm quick Neil Wagner.
Fine-tuning the basics
Plenty has been said and written about Jamieson's transition from batsman to bowler. But Heinrich Malan, Jamieson's coach at Auckland and New Zealand A, says "we didn't reinvent the wheel around his bowling. We ensured he connected his action a little better to get the most out of his physical attributes (something behind the ball/bounce) and then discussed how we can make his stock ball (out-swinger to right-handers) more effective. Hence we worked on the in-swinger, which now has become a real weapon."
Virat Kohli was at the receiving end of Jamieson's craft in both innings of the WTC final. Jamieson got Kohli in the first innings when a series of outswingers was followed by a nip-backer for an lbw decision. In the second, after beating Kohli with his mastery of orthodox outswing and inswing, Jamieson dangled one outside the off-stump, which Kohli edged behind to wicketkeeper B. J. Watling.
Kyle Jamieson successfully appeals for a leg-before-wicket dismissal of Virat Kohli during the third day of the World Test Championship final. Jamieson outsmarted Kohli in both innings of the contest. - GETTY IMAGES
"The ability to generate extra bounce is key," says Malan. "To pull batters forward and then get the ball to bounce from that fuller length is what makes him dangerous and very effective. Add his ability to swing the ball both ways at a decent pace, and it's a bit of a perfect storm scenario where it all comes together."
From batsman to bowler
Jamieson started as a batsman. But upon his graduation to Under-19 cricket, the 6ft 8in cricketer was encouraged to take up bowling by Dayle Hadlee, the former New Zealand U-19 coach. Malan says while Jamieson was a late starter from a bowling perspective throughout his school career, he has always bowled since making his first-class debut [Canterbury vs Wellington at Christchurch - October 2014]. "He [Jamieson] also had some injury issues to overcome throughout the early part of his professional career, which is normal for a player who is over 2m tall. Especially when you throw the rigours of bowling 40-50 overs per week into that mix while your body is still trying to work out how it's going to cope with that sort of stress and loading."
ALSO READ - BJ Watling, the heart of New Zealand cricket
That after only eight appearances, Jamieson is an automatic pick in New Zealand's Test team is a testament to a bowler who has used his height, movement, and accuracy as the miracle magic potion. "His ability to swing the ball consistently (both ways) and control his length is what makes him threatening. Understanding the need to adapt and keep evolving depending on conditions and opposition is a constant awareness and finding ways to ensure those skills are polished is a key driver!"
Jamieson was handsomely rewarded for his exploits when in February this year, he became the highest-paid New Zealander at an Indian Premier League auction after Mike Hesson's Royal Challengers signed him up for ₹15 crore. The all-rounder made 59 runs and picked nine wickets in seven matches before the IPL was suspended after an increase in coronavirus cases among players.
Malan says workload management is the 'next piece' of Jamieson's development. "It's always going to be a challenge in the modern era with so much cricket on offer. He is continually getting a better understanding of what his mind and body can tolerate as he plays more cricket throughout the year. It is part of his next development as a consistent international cricketer.
"He has always been very open and pushing to find ways to get better... That's probably his best attribute, to be honest. Looking at different players around the world and what's made them successful, understanding what that looks like from his skills and attributes perspective, and then working tirelessly to explore if that could work for him or not.
"Another big attribute of his is the desire to get better. He comes to training every day with real purpose, energy, and intensity. This has become part of his preparation which has now become part of what and how he goes about his work consistently – whether it's training or playing."
Read more stories on Cricket.
Kyle Jamieson


text:
package query

import (
	"context"
	"encoding/json"
	"net/http"

	"github.com/matrix-org/dendrite/common"
	"github.com/matrix-org/dendrite/roomserver/api"
	"github.com/matrix-org/dendrite/roomserver/auth"
	"github.com/matrix-org/dendrite/roomserver/state"
	"github.com/matrix-org/dendrite/roomserver/types"
	"github.com/matrix-org/gomatrixserverlib"
	"github.com/matrix-org/util"
)

// RoomserverQueryAPIEventDB has a convenience API to fetch events directly by
// EventIDs.
type RoomserverQueryAPIEventDB interface {
	// Look up the Events for a list of event IDs. Does not error if event was
	// not found.
	// Returns an error if the retrieval went wrong.
	EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error)
}

// RoomserverQueryAPIDatabase has the storage APIs needed to implement the query API.
type RoomserverQueryAPIDatabase interface {
	state.RoomStateDatabase
	RoomserverQueryAPIEventDB
	// Look up the numeric ID for the room.
	// Returns 0 if the room doesn't exists.
	// Returns an error if there was a problem talking to the database.
	RoomNID(ctx context.Context, roomID string) (types.RoomNID, error)
	// Look up event references for the latest events in the room and the current state snapshot.
	// Returns the latest events, the current state and the maximum depth of the latest events plus 1.
	// Returns an error if there was a problem talking to the database.
	LatestEventIDs(
		ctx context.Context, roomNID types.RoomNID,
	) ([]gomatrixserverlib.EventReference, types.StateSnapshotNID, int64, error)
	// Look up the numeric IDs for a list of events.
	// Returns an error if there was a problem talking to the database.
	EventNIDs(ctx context.Context, eventIDs []string) (map[string]types.EventNID, error)
	// Lookup the event IDs for a batch of event numeric IDs.
	// Returns an error if the retrieval went wrong.
	EventIDs(ctx context.Context, eventNIDs []types.EventNID) (map[types.EventNID]string, error)
	// Lookup the membership of a given user in a given room.
	// Returns the numeric ID of the latest membership event sent from this user
	// in this room, along a boolean set to true if the user is still in this room,
	// false if not.
	// Returns an error if there was a problem talking to the database.
	GetMembership(
		ctx context.Context, roomNID types.RoomNID, requestSenderUserID string,
	) (membershipEventNID types.EventNID, stillInRoom bool, err error)
	// Lookup the membership event numeric IDs for all user that are or have
	// been members of a given room. Only lookup events of "join" membership if
	// joinOnly is set to true.
	// Returns an error if there was a problem talking to the database.
	GetMembershipEventNIDsForRoom(
		ctx context.Context, roomNID types.RoomNID, joinOnly bool,
	) ([]types.EventNID, error)
	// Look up the active invites targeting a user in a room and return the
	// numeric state key IDs for the user IDs who sent them.
	// Returns an error if there was a problem talking to the database.
	GetInvitesForUser(
		ctx context.Context,
		roomNID types.RoomNID,
		targetUserNID types.EventStateKeyNID,
	) (senderUserNIDs []types.EventStateKeyNID, err error)
	// Look up the string event state keys for a list of numeric event state keys
	// Returns an error if there was a problem talking to the database.
	EventStateKeys(
		context.Context, []types.EventStateKeyNID,
	) (map[types.EventStateKeyNID]string, error)
}

// RoomserverQueryAPI is an implementation of api.RoomserverQueryAPI
type RoomserverQueryAPI struct {
	DB RoomserverQueryAPIDatabase
}

// QueryLatestEventsAndState implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryLatestEventsAndState(
	ctx context.Context,
	request *api.QueryLatestEventsAndStateRequest,
	response *api.QueryLatestEventsAndStateResponse,
) error {
	response.QueryLatestEventsAndStateRequest = *request
	roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
	if err != nil {
		return err
	}
	if roomNID == 0 {
		return nil
	}
	response.RoomExists = true
	var currentStateSnapshotNID types.StateSnapshotNID
	response.LatestEvents, currentStateSnapshotNID, response.Depth, err =
		r.DB.LatestEventIDs(ctx, roomNID)
	if err != nil {
		return err
	}

	// Look up the currrent state for the requested tuples.
	stateEntries, err := state.LoadStateAtSnapshotForStringTuples(
		ctx, r.DB, currentStateSnapshotNID, request.StateToFetch,
	)
	if err != nil {
		return err
	}

	stateEvents, err := r.loadStateEvents(ctx, stateEntries)
	if err != nil {
		return err
	}

	response.StateEvents = stateEvents
	return nil
}

// QueryStateAfterEvents implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryStateAfterEvents(
	ctx context.Context,
	request *api.QueryStateAfterEventsRequest,
	response *api.QueryStateAfterEventsResponse,
) error {
	response.QueryStateAfterEventsRequest = *request
	roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
	if err != nil {
		return err
	}
	if roomNID == 0 {
		return nil
	}
	response.RoomExists = true

	prevStates, err := r.DB.StateAtEventIDs(ctx, request.PrevEventIDs)
	if err != nil {
		switch err.(type) {
		case types.MissingEventError:
			return nil
		default:
			return err
		}
	}
	response.PrevEventsExist = true

	// Look up the currrent state for the requested tuples.
	stateEntries, err := state.LoadStateAfterEventsForStringTuples(
		ctx, r.DB, prevStates, request.StateToFetch,
	)
	if err != nil {
		return err
	}

	stateEvents, err := r.loadStateEvents(ctx, stateEntries)
	if err != nil {
		return err
	}

	response.StateEvents = stateEvents
	return nil
}

// QueryEventsByID implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryEventsByID(
	ctx context.Context,
	request *api.QueryEventsByIDRequest,
	response *api.QueryEventsByIDResponse,
) error {
	response.QueryEventsByIDRequest = *request

	eventNIDMap, err := r.DB.EventNIDs(ctx, request.EventIDs)
	if err != nil {
		return err
	}

	var eventNIDs []types.EventNID
	for _, nid := range eventNIDMap {
		eventNIDs = append(eventNIDs, nid)
	}

	events, err := r.loadEvents(ctx, eventNIDs)
	if err != nil {
		return err
	}

	response.Events = events
	return nil
}

func (r *RoomserverQueryAPI) loadStateEvents(
	ctx context.Context, stateEntries []types.StateEntry,
) ([]gomatrixserverlib.Event, error) {
	eventNIDs := make([]types.EventNID, len(stateEntries))
	for i := range stateEntries {
		eventNIDs[i] = stateEntries[i].EventNID
	}
	return r.loadEvents(ctx, eventNIDs)
}

func (r *RoomserverQueryAPI) loadEvents(
	ctx context.Context, eventNIDs []types.EventNID,
) ([]gomatrixserverlib.Event, error) {
	stateEvents, err := r.DB.Events(ctx, eventNIDs)
	if err != nil {
		return nil, err
	}

	result := make([]gomatrixserverlib.Event, len(stateEvents))
	for i := range stateEvents {
		result[i] = stateEvents[i].Event
	}
	return result, nil
}

// QueryMembershipForUser implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryMembershipForUser(
	ctx context.Context,
	request *api.QueryMembershipForUserRequest,
	response *api.QueryMembershipForUserResponse,
) error {
	roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
	if err != nil {
		return err
	}

	membershipEventNID, stillInRoom, err := r.DB.GetMembership(ctx, roomNID, request.UserID)
	if err != nil {
		return err
	}

	if membershipEventNID == 0 {
		response.HasBeenInRoom = false
		return nil
	}

	response.IsInRoom = stillInRoom
	eventIDMap, err := r.DB.EventIDs(ctx, []types.EventNID{membershipEventNID})
	if err != nil {
		return err
	}

	response.EventID = eventIDMap[membershipEventNID]
	return nil
}

// QueryMembershipsForRoom implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryMembershipsForRoom(
	ctx context.Context,
	request *api.QueryMembershipsForRoomRequest,
	response *api.QueryMembershipsForRoomResponse,
) error {
	roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
	if err != nil {
		return err
	}

	membershipEventNID, stillInRoom, err := r.DB.GetMembership(ctx, roomNID, request.Sender)
	if err != nil {
		return err
	}

	if membershipEventNID == 0 {
		response.HasBeenInRoom = false
		response.JoinEvents = nil
		return nil
	}

	response.HasBeenInRoom = true
	response.JoinEvents = []gomatrixserverlib.ClientEvent{}

	var events []types.Event
	if stillInRoom {
		var eventNIDs []types.EventNID
		eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, roomNID, request.JoinedOnly)
		if err != nil {
			return err
		}

		events, err = r.DB.Events(ctx, eventNIDs)
	} else {
		events, err = r.getMembershipsBeforeEventNID(ctx, membershipEventNID, request.JoinedOnly)
	}

	if err != nil {
		return err
	}

	for _, event := range events {
		clientEvent := gomatrixserverlib.ToClientEvent(event.Event, gomatrixserverlib.FormatAll)
		response.JoinEvents = append(response.JoinEvents, clientEvent)
	}

	return nil
}

// getMembershipsBeforeEventNID takes the numeric ID of an event and fetches the state
// of the event's room as it was when this event was fired, then filters the state events to
// only keep the "m.room.member" events with a "join" membership. These events are returned.
// Returns an error if there was an issue fetching the events.
func (r *RoomserverQueryAPI) getMembershipsBeforeEventNID(
	ctx context.Context, eventNID types.EventNID, joinedOnly bool,
) ([]types.Event, error) {
	events := []types.Event{}
	// Lookup the event NID
	eIDs, err := r.DB.EventIDs(ctx, []types.EventNID{eventNID})
	if err != nil {
		return nil, err
	}
	eventIDs := []string{eIDs[eventNID]}

	prevState, err := r.DB.StateAtEventIDs(ctx, eventIDs)
	if err != nil {
		return nil, err
	}

	// Fetch the state as it was when this event was fired
	stateEntries, err := state.LoadCombinedStateAfterEvents(ctx, r.DB, prevState)
	if err != nil {
		return nil, err
	}

	var eventNIDs []types.EventNID
	for _, entry := range stateEntries {
		// Filter the events to retrieve to only keep the membership events
		if entry.EventTypeNID == types.MRoomMemberNID {
			eventNIDs = append(eventNIDs, entry.EventNID)
		}
	}

	// Get all of the events in this state
	stateEvents, err := r.DB.Events(ctx, eventNIDs)
	if err != nil {
		return nil, err
	}

	if !joinedOnly {
		return stateEvents, nil
	}

	// Filter the events to only keep the "join" membership events
	for _, event := range stateEvents {
		membership, err := event.Membership()
		if err != nil {
			return nil, err
		}

		if membership == "join" {
			events = append(events, event)
		}
	}

	return events, nil
}

// QueryInvitesForUser implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryInvitesForUser(
	ctx context.Context,
	request *api.QueryInvitesForUserRequest,
	response *api.QueryInvitesForUserResponse,
) error {
	roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
	if err != nil {
		return err
	}

	targetUserNIDs, err := r.DB.EventStateKeyNIDs(ctx, []string{request.TargetUserID})
	if err != nil {
		return err
	}
	targetUserNID := targetUserNIDs[request.TargetUserID]

	senderUserNIDs, err := r.DB.GetInvitesForUser(ctx, roomNID, targetUserNID)
	if err != nil {
		return err
	}

	senderUserIDs, err := r.DB.EventStateKeys(ctx, senderUserNIDs)
	if err != nil {
		return err
	}

	for _, senderUserID := range senderUserIDs {
		response.InviteSenderUserIDs = append(response.InviteSenderUserIDs, senderUserID)
	}

	return nil
}

// QueryServerAllowedToSeeEvent implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryServerAllowedToSeeEvent(
	ctx context.Context,
	request *api.QueryServerAllowedToSeeEventRequest,
	response *api.QueryServerAllowedToSeeEventResponse,
) (err error) {
	response.AllowedToSeeEvent, err = r.checkServerAllowedToSeeEvent(
		ctx, request.EventID, request.ServerName,
	)
	return
}

func (r *RoomserverQueryAPI) checkServerAllowedToSeeEvent(
	ctx context.Context, eventID string, serverName gomatrixserverlib.ServerName,
) (bool, error) {
	stateEntries, err := state.LoadStateAtEvent(ctx, r.DB, eventID)
	if err != nil {
		return false, err
	}

	// TODO: We probably want to make it so that we don't have to pull
	// out all the state if possible.
	stateAtEvent, err := r.loadStateEvents(ctx, stateEntries)
	if err != nil {
		return false, err
	}

	return auth.IsServerAllowed(serverName, stateAtEvent), nil
}

// QueryMissingEvents implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryMissingEvents(
	ctx context.Context,
	request *api.QueryMissingEventsRequest,
	response *api.QueryMissingEventsResponse,
) error {
	resultNIDs := make([]types.EventNID, 0, request.Limit)
	var front []string
	visited := make(map[string]bool, request.Limit) // request.Limit acts as a hint to size.
	for _, id := range request.EarliestEvents {
		visited[id] = true
	}

	for _, id := range request.LatestEvents {
		if !visited[id] {
			front = append(front, id)
		}
	}

BFSLoop:
	for len(front) > 0 {
		var next []string
		events, err := r.DB.EventsFromIDs(ctx, front)
		if err != nil {
			return err
		}

		for _, ev := range events {
			if len(resultNIDs) > request.Limit {
				break BFSLoop
			}
			resultNIDs = append(resultNIDs, ev.EventNID)
			for _, pre := range ev.PrevEventIDs() {
				if !visited[pre] {
					visited[pre] = true
					allowed, err := r.checkServerAllowedToSeeEvent(
						ctx, ev.EventID(), request.ServerName,
					)
					if err != nil {
						return err
					}

					if allowed {
						next = append(next, pre)
					}
				}
			}
		}
		front = next
	}

	var err error
	response.Events, err = r.loadEvents(ctx, resultNIDs)
	return err
}

// QueryStateAndAuthChain implements api.RoomserverQueryAPI
func (r *RoomserverQueryAPI) QueryStateAndAuthChain(
	ctx context.Context,
	request *api.QueryStateAndAuthChainRequest,
	response *api.QueryStateAndAuthChainResponse,
) error {
	response.QueryStateAndAuthChainRequest = *request
	roomNID, err := r.DB.RoomNID(ctx, request.RoomID)
	if err != nil {
		return err
	}
	if roomNID == 0 {
		return nil
	}
	response.RoomExists = true

	prevStates, err := r.DB.StateAtEventIDs(ctx, request.PrevEventIDs)
	if err != nil {
		switch err.(type) {
		case types.MissingEventError:
			return nil
		default:
			return err
		}
	}
	response.PrevEventsExist = true

	// Look up the currrent state for the requested tuples.
	stateEntries, err := state.LoadCombinedStateAfterEvents(
		ctx, r.DB, prevStates,
	)
	if err != nil {
		return err
	}

	stateEvents, err := r.loadStateEvents(ctx, stateEntries)
	if err != nil {
		return err
	}

	response.StateEvents = stateEvents
	response.AuthChainEvents, err = getAuthChain(ctx, r.DB, request.AuthEventIDs)
	return err
}

// getAuthChain fetches the auth chain for the given auth events.
// An auth chain is the list of all events that are referenced in the
// auth_events section, and all their auth_events, recursively.
// The returned set of events contain the given events.
// Will *not* error if we don't have all auth events.
func getAuthChain(
	ctx context.Context, dB RoomserverQueryAPIEventDB, authEventIDs []string,
) ([]gomatrixserverlib.Event, error) {
	var authEvents []gomatrixserverlib.Event

	// List of event ids to fetch. These will be added to the result and
	// their auth events will be fetched (if they haven't been previously)
	eventsToFetch := authEventIDs

	// Set of events we've already fetched.
	fetchedEventMap := make(map[string]bool)

	// Check if there's anything left to do
	for len(eventsToFetch) > 0 {
		// Convert eventIDs to events. First need to fetch NIDs
		events, err := dB.EventsFromIDs(ctx, eventsToFetch)
		if err != nil {
			return nil, err
		}

		// Work out a) which events we should add to the returned list of
		// events and b) which of the auth events we haven't seen yet and
		// add them to the list of events to fetch.
		eventsToFetch = eventsToFetch[:0]
		for _, event := range events {
			fetchedEventMap[event.EventID()] = true
			authEvents = append(authEvents, event.Event)

			// Now we need to fetch any auth events that we haven't
			// previously seen.
			for _, authEventID := range event.AuthEventIDs() {
				if !fetchedEventMap[authEventID] {
					fetchedEventMap[authEventID] = true
					eventsToFetch = append(eventsToFetch, authEventID)
				}
			}
		}
	}

	return authEvents, nil
}

// SetupHTTP adds the RoomserverQueryAPI handlers to the http.ServeMux.
// nolint: gocyclo
func (r *RoomserverQueryAPI) SetupHTTP(servMux *http.ServeMux) {
	servMux.Handle(
		api.RoomserverQueryLatestEventsAndStatePath,
		common.MakeInternalAPI("queryLatestEventsAndState", func(req *http.Request) util.JSONResponse {
			var request api.QueryLatestEventsAndStateRequest
			var response api.QueryLatestEventsAndStateResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryLatestEventsAndState(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryStateAfterEventsPath,
		common.MakeInternalAPI("queryStateAfterEvents", func(req *http.Request) util.JSONResponse {
			var request api.QueryStateAfterEventsRequest
			var response api.QueryStateAfterEventsResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryStateAfterEvents(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryEventsByIDPath,
		common.MakeInternalAPI("queryEventsByID", func(req *http.Request) util.JSONResponse {
			var request api.QueryEventsByIDRequest
			var response api.QueryEventsByIDResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryEventsByID(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryMembershipForUserPath,
		common.MakeInternalAPI("QueryMembershipForUser", func(req *http.Request) util.JSONResponse {
			var request api.QueryMembershipForUserRequest
			var response api.QueryMembershipForUserResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryMembershipForUser(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryMembershipsForRoomPath,
		common.MakeInternalAPI("queryMembershipsForRoom", func(req *http.Request) util.JSONResponse {
			var request api.QueryMembershipsForRoomRequest
			var response api.QueryMembershipsForRoomResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryMembershipsForRoom(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryInvitesForUserPath,
		common.MakeInternalAPI("queryInvitesForUser", func(req *http.Request) util.JSONResponse {
			var request api.QueryInvitesForUserRequest
			var response api.QueryInvitesForUserResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryInvitesForUser(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryServerAllowedToSeeEventPath,
		common.MakeInternalAPI("queryServerAllowedToSeeEvent", func(req *http.Request) util.JSONResponse {
			var request api.QueryServerAllowedToSeeEventRequest
			var response api.QueryServerAllowedToSeeEventResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryServerAllowedToSeeEvent(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryMissingEventsPath,
		common.MakeInternalAPI("queryMissingEvents", func(req *http.Request) util.JSONResponse {
			var request api.QueryMissingEventsRequest
			var response api.QueryMissingEventsResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryMissingEvents(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
	servMux.Handle(
		api.RoomserverQueryStateAndAuthChainPath,
		common.MakeInternalAPI("queryStateAndAuthChain", func(req *http.Request) util.JSONResponse {
			var request api.QueryStateAndAuthChainRequest
			var response api.QueryStateAndAuthChainResponse
			if err := json.NewDecoder(req.Body).Decode(&request); err != nil {
				return util.ErrorResponse(err)
			}
			if err := r.QueryStateAndAuthChain(req.Context(), &request, &response); err != nil {
				return util.ErrorResponse(err)
			}
			return util.JSONResponse{Code: http.StatusOK, JSON: &response}
		}),
	)
}

redpajama_set_name: RedPajamaGithub


Off the southwest coast of India lies a much overlooked island nation, slowly making its mark on the diving world. From reefs to wrecks to the historic sights in between, Sri Lanka is becoming a new must-see destination for divers and adventurers alike. Sri Lanka can truly be visited any time of year, but depending on the season you choose, some parts of the island will be dive destinations due to the two monsoon seasons the nation undergoes. Between October and April is the west/south coast season for diving and April to November is the east coast's time to shine.
The cultural capital of Sri Lanka and also a bustling port. Maybe ships pass through the waters around…and maybe ships have sunk in the process. Thus, Colombo's fame for wreck diving. There are 15 wrecks accessible to recreational divers. Most between 20-40m in depth. Some are quite far from shore and are best accessible by day boat or liveaboard, but some are right off shore and a 15-minute boat ride away. There aren't many reefs in the area, but the wrecks tend to attract an abundance of life. Both macro and the occasional whale shark can be seen, so you won't be bored no matter what your diving passion.
Hikkaduwa is maybe the most famous dive city in Sri Lanka. The locals will tell you that the reefs there are world-class. There are a few wrecks to choose from in "Hikka" as well as the reefs. Hikkaduwa is a popular tourist destination because of this, and there are many options of accommodation to choose from. It's much more of a beginner friendly environment than Colombo because of the shallow sites, protection from currents and greater visibility.
Galle is an old Portugese/Dutch fort town in the southwest of Sri Lanka. Off the coast lies another area full of shipwrecks. Ships ages range from the 1800s to modern day ships sunk in the 2000s. Diving is possible all along the southern coast extending into Matara, an educational hub of the country.
Trincomalee is where most of the dive shops in Hikkaduwa migrate during the West Coast monsoons. A protected harbour, it is actually diveable year round, but very few shops stay open before March or after October. In "Trinco", you can see sharks, dolphins, sperm whales, and even blue whales when in season. There are nice reefs and a marine protected area (Pigeon Island) very popular among tourists and locals alike.
The Kayankerni reefs are the best protected in Sri Lanka. During of the long-lasting civil war, fishermen could not get their boats out into the water to fish, and the reefs thrived under unintentional protection. In 2009, the war ended (thankfully) and there is now some dynamite fishing in the area, but overall the reefs are some of the healthiest I've ever seen. There is an abundance of reef fish, schooling in huge numbers and even some endemic species only seen in this particular area of the Bay of Bengal.
There are also two shipwrecks available for recreational divers. The British Sergeant – a WWII tanker bombed while retreating to Trincomalee harbour, and the Lady McCullum – a smaller supply ship which ran aground during a storm in the early 1920s. Both are teeming with life and history.
A bit further out toward Batticaloa, the HMS Hermes (pictured below) sits at 50m. She is the world's first aircraft carrier, sunk at the same time as the British Sergeant and two other ships. One of which was never found. The Hermes is a world class dive, but is only accessible to tech divers.
Sri Lanka is surprisingly easy to navigate on a wide spectrum of budgets. Trains and busses span the country and are extremely affordable. You can also hire a private driver for some or all of your trip. This could be useful if you want to take some time between dives and check out the National Parks for elephants, leopards, sloth bears or peacocks. Or you could go to see the ancient ruins that are sprinkled throughout the interior.


text:
Home Leadership
Dr. Betty H. Adams has served as the executive director of the Southern Virginia Higher Education (SVHEC) since 2009. In this capacity she oversees the SVHEC's strategic growth and ensures agency activities are aligned with its mission and values. She is a transformational leader with nearly three decades of experience developing, implementing, managing, and evaluating adult learner programs.
With both private and public sector executive level positions, Dr. Adams' has overseen comprehensive growth and academic achievement in private, state, and community college settings.She has led the development, implementation, and management of comprehensive planning and effectiveness systems at rural and urban community colleges and for the 58-institution North Carolina Community College System. Her conceptual model of institutional accountability, "The Essential Model," was used by the North Carolina statewide community college system office to achieve a comprehensive, integrated, outcomes-based, and user-friendly system of planning and effectiveness.
An experienced leader with a proven record, Dr. Adams has led the SVHEC in successfully developing and implementing four workforce training initiatives, achieving financial stability, and bringing clarity and focus to the agency's mission and brand.
Dr. Adams holds a Master of Business Administration degree from East Carolina University, and a Doctorate of Education degree from North Carolina State University.
The Board of Trustees of the Southern Virginia Higher Education Center is made up of business and community leaders who are devoted to Southern Virginia and to the belief that education is the catalyst for change. Board members include:
Mr. Peter Blake
Ms. Mattie Cowan
The Honorable Nancy Guy
Dr. Quentin R. Johnson
Mr. Doug Lee
Mr. John C. Lee
The Honorable Louise Lucas
Mr. Paul Nichols
Dr. Ken Perkins (Designee of President Reveley, Longwood University)
Dr. Jacqueline Gill Powell
Mr. Tom Raab (Designee of Glenn Dubois, VCCS Chancellor)
The Honorable Schuyler VanValkenburg
The Honorable Dennis Witt
Dr. Charlette Woolridge
Next Board of Trustees Meeting: March 24, 2021
Download our 2020-2022 Strategic Plan here.
Download our 2019 Annual Report here.
We provide convenient, affordable access to college degree programs and short-term, hands-on job training opportunities in South Boston, VA.
We believe there's opportunity for everyone in our community. Meet a few people who have seized this opportunity to change their life.