text:
Q: Failure in writing to EEPROM, through IC2, on PIC32MX PIC: PIC32MX564F128L
EEPROM: 24AA16
I've put together some code for the PIC, in C, to read & write to an external EEPROM, via I2C.
When I use these methods to write a single byte, then read it back again for verification, it works.
If I change the write location, it works, so I presume the addressing is working, and the byte I read back matches the write, so that appears to work too.
All good so far!
I then extended the code to use the same routine 100 times, writing different bytes in adjacent locations. I.E. Write values 0 to 99 in Locations x to x + 99.
I then proceeded to read back the 100 locations to verify the writes, and this is where it goes wrong.
It would appear, from various tests, that the write method performs all the writes in the same location, as the read method gets the last value (99) from the first location, and nothing (0xFF) from the other locations!
The scope shows that the clock is good, and the data line toggling, which I expected as the single write works.
Debug on the PIC shows that the addresses being used by the methods are sequential, so I'm a little stumped as to why all the writes are being performed in the same location! I can change this location, but it always just uses the first byte for all values.
Anyone know what could be wrong?
My code is here, and the entry point is testEeprom():
// ----------------------------------------------------------------------------
#include "eeprom.h"
//#define _PLIB_DISABLE_LEGACY
#include <plib.h>
//// ----------------------------------------------------------------------------
#define SYS_CLOCK                   (80000000L)
#define GetSystemClock()            (SYS_CLOCK)
#define GetPeripheralClock()        (SYS_CLOCK / 2)
#define GetInstructionClock()       (SYS_CLOCK)
#define I2C_CLOCK_FREQ              100000

#define EEPROM_I2C_BUS              I2C1
#define EEPROM_ADDRESS              0x50        // 0b1010000 Serial EEPROM address
#define EEPROM_STORAGE_LOCATION     0x0100
#define DATA_ARRAY_SIZE             100
// ----------------------------------------------------------------------------
UINT8               EEPROM_Data_Array[DATA_ARRAY_SIZE];
UINT8               EEPROM_Data_Array_RX[DATA_ARRAY_SIZE];
BOOL                EEPROM_Success;
I2C_7_BIT_ADDRESS   SlaveAddress;
// ----------------------------------------------------------------------------
void i2c_wait(unsigned int cnt)
{
    while (--cnt)
    {
        Nop();
        Nop();
    } // while
}
// ----------------------------------------------------------------------------
BOOL StartTransfer(BOOL restart)
{
    I2C_STATUS status;

    // Send the Start (or Restart) signal
    if (restart)
    {
        I2CRepeatStart(EEPROM_I2C_BUS);
    }
    else
    {
        // Wait for the bus to be idle, then start the transfer
        while (!I2CBusIsIdle(EEPROM_I2C_BUS));

        if (I2CStart(EEPROM_I2C_BUS) != I2C_SUCCESS)
        {
            debugTrace("I2C Error: Bus collision during transfer Start\r\n");
            return FALSE;
        }
    }

    // Wait for the signal to complete
    do
    {
        status = I2CGetStatus(EEPROM_I2C_BUS);
    }
    while (!(status & I2C_START));

    return TRUE;
}
// ----------------------------------------------------------------------------
BOOL TransmitOneByte(UINT8 data)
{
    // Wait for the transmitter to be ready
    while (!I2CTransmitterIsReady(EEPROM_I2C_BUS));

    // Transmit the byte
    if (I2CSendByte(EEPROM_I2C_BUS, data) == I2C_MASTER_BUS_COLLISION)
    {
        debugTrace("I2C Error: I2C Master Bus Collision\r\n");
        return FALSE;
    }

    // Wait for the transmission to finish
    while (!I2CTransmissionHasCompleted(EEPROM_I2C_BUS));

    return TRUE;
}
// ----------------------------------------------------------------------------
void StopTransfer(void)
{
    I2C_STATUS status;

    // Send the Stop signal
    I2CStop(EEPROM_I2C_BUS);

    // Wait for the signal to complete
    do
    {
        status = I2CGetStatus(EEPROM_I2C_BUS);
    }
    while (!(status & I2C_STOP));
}
// ----------------------------------------------------------------------------
void initIcd()
{
    UINT32 actualClock;

    EEPROM_Success = TRUE;
    // Set the I2C baudrate
    actualClock = I2CSetFrequency(EEPROM_I2C_BUS, GetPeripheralClock(), I2C_CLOCK_FREQ);
    if (abs(actualClock - I2C_CLOCK_FREQ) > I2C_CLOCK_FREQ / 10)
    {
        debugTrace("Error: I2C1 clock frequency (%u) error exceeds 10%%.\r\n", (unsigned) actualClock);
    }

    // Enable the I2C bus
    I2CEnable(EEPROM_I2C_BUS, TRUE);
}
// ----------------------------------------------------------------------------
// Send the data to EEPROM to program one location
// ----------------------------------------------------------------------------
void txIcd(unsigned int address, unsigned char value)
{
    BOOL Acknowledged;
    int Index;
    UINT8 i2cData[4];
    int DataSz;

    EEPROM_Success = TRUE;

    // Initialize the data buffer
    I2C_FORMAT_7_BIT_ADDRESS(SlaveAddress, EEPROM_ADDRESS, I2C_WRITE);
    i2cData[0] = SlaveAddress.byte;
    i2cData[1] = address >> 8; // EEPROM location to program (high address byte)
    i2cData[2] = address & 0xFF; // EEPROM location to program (low address byte)
    i2cData[3] = value; // EEPROM location to program (low address byte)
    DataSz = 4;

    // Start the transfer to write data to the EEPROM
    if (!StartTransfer(FALSE))
    {
        debugTrace("I2C Error: Can't Start Transfer TX (1)\r\n");
        return;
    }

    // Transmit all header
    Index = 0;
    while (EEPROM_Success && (Index < DataSz))
    {
        // Transmit a byte
        if (TransmitOneByte(i2cData[Index]))
        {
            // Advance to the next byte
            Index++;

            // Verify that the byte was acknowledged
            if (!I2CByteWasAcknowledged(EEPROM_I2C_BUS))
            {
                debugTrace("I2C Error: Sent byte was not acknowledged (1)\r\n");
                EEPROM_Success = FALSE;
            }
        }
        else
        {
            EEPROM_Success = FALSE;
        }
    }

    // End the transfer (hang here if an error occured)
    StopTransfer();
    if (!EEPROM_Success)
    {
        debugTrace("I2C Error: No Success on TX (1)\r\n");
        return;
    }

    // Wait for EEPROM to complete write process, by polling the ack status.
    Acknowledged = FALSE;
    do
    {
        // Start the transfer to address the EEPROM
        if (!StartTransfer(FALSE))
        {
            debugTrace("I2C Error: Can't Start Transfer TX (2)\r\n");
            return;
        }

        // Transmit just the EEPROM's address
        if (TransmitOneByte(SlaveAddress.byte))
        {
            // Check to see if the byte was acknowledged
            Acknowledged = I2CByteWasAcknowledged(EEPROM_I2C_BUS);
        }
        else
        {
            EEPROM_Success = FALSE;
        }

        // End the transfer (stop here if an error occured)
        StopTransfer();
        if (!EEPROM_Success)
        {
            debugTrace("I2C Error: No Success on TX (2)\r\n");
            return;
        }
    }
    while (Acknowledged != TRUE);
}
// ----------------------------------------------------------------------------
// Read the data back from the EEPROM.
// ----------------------------------------------------------------------------
unsigned char rxIcd(unsigned int address)
{
    UINT8 i2cbyte;
    UINT8 i2cData[3];
    int DataSz;
    int Index;

    EEPROM_Success = TRUE;

    // Initialize the data buffer
    I2C_FORMAT_7_BIT_ADDRESS(SlaveAddress, EEPROM_ADDRESS, I2C_WRITE);
    i2cData[0] = SlaveAddress.byte;
    i2cData[1] = address >> 8; // EEPROM location to program (high address byte)
    i2cData[2] = address & 0xFF; // EEPROM location to program (low address byte)
    DataSz = 3;

    // Start the transfer to write data to the EEPROM
    if (!StartTransfer(FALSE))
    {
        debugTrace("I2C Error: Can't Start Transfer TX (1)\r\n");
        return;
    }

    // Transmit all header
    Index = 0;
    while (EEPROM_Success && (Index < DataSz))
    {
        // Transmit a byte
        if (TransmitOneByte(i2cData[Index]))
        {
            // Advance to the next byte
            Index++;
        }
        else
        {
            EEPROM_Success = FALSE;
        }

        // Verify that the byte was acknowledged
        if (!I2CByteWasAcknowledged(EEPROM_I2C_BUS))
        {
            debugTrace("I2C Error: Sent byte was not acknowledged (1)\r\n");
            EEPROM_Success = FALSE;
        }
    }

    // Restart and send the EEPROM's internal address to switch to a read transfer
    if (EEPROM_Success)
    {
        // Send a Repeated Started condition
        if (!StartTransfer(TRUE))
        {
            debugTrace("I2C Error: Can't Start Transfer TX (4)\r\n");
            return;
        }

        // Transmit the address with the READ bit set
        I2C_FORMAT_7_BIT_ADDRESS(SlaveAddress, EEPROM_ADDRESS, I2C_READ);

        if (TransmitOneByte(SlaveAddress.byte))
        {
            // Verify that the byte was acknowledged
            if (!I2CByteWasAcknowledged(EEPROM_I2C_BUS))
            {
                debugTrace("I2C Error: Sent byte was not acknowledged (3)\r\n");
                EEPROM_Success = FALSE;
            }
        }
        else
        {
            EEPROM_Success = FALSE;
        }
    }

    // Read the data from the desired address
    if (EEPROM_Success)
    {
        if (I2CReceiverEnable(EEPROM_I2C_BUS, TRUE) == I2C_RECEIVE_OVERFLOW)
        {
            debugTrace("I2C Error: I2C Receive Overflow\r\n");
            EEPROM_Success = FALSE;
        }
        else
        {
            while (!I2CReceivedDataIsAvailable(EEPROM_I2C_BUS));

            i2cbyte = I2CGetByte(EEPROM_I2C_BUS);
        }
    }

    // End the transfer (stop here if an error occured)
    StopTransfer();
    if (!EEPROM_Success)
    {
        debugTrace("I2C Error: No Success on TX (3)\r\n");
        return;
    }

    return i2cbyte;
}
// ----------------------------------------------------------------------------
void testEeprom(void)
{
    unsigned int i;
    BOOL failed = FALSE;
    unsigned char value;

    // Create & Write 100 byte array
    for (i = 0; i < DATA_ARRAY_SIZE; i++)
    {
        EEPROM_Data_Array[i] = i;

        initIcd();
        txIcd(EEPROM_STORAGE_LOCATION + i, EEPROM_Data_Array[i]);
        StopTransfer();
        I2CEnable(EEPROM_I2C_BUS, FALSE);
    } // for i

    // Read back & varify data against array
    for (i = 0; i < DATA_ARRAY_SIZE; i++)
    {
        initIcd();
        value = rxIcd(EEPROM_STORAGE_LOCATION + i);
        if (EEPROM_Data_Array[i] != value)
        {
            failed = TRUE;
            break;
        }
        StopTransfer();
        I2CEnable(EEPROM_I2C_BUS, FALSE);
    } // for i

    if (failed == FALSE)
    {
        debugTrace("I2C SUCCESS\r\n");
    }
    else
    {
        debugTrace("I2C FAILED %d: %d != %d\r\n", i, value, EEPROM_Data_Array[i]);
    }

    while(1);
}
// ----------------------------------------------------------------------------

redpajama_set_name: RedPajamaStackExchange


text:
Q: How can I have Karma tests in the same folder as other Angular components, and have them run last? Assume I have a project directory which looks something like this:
comments.component.js
comments.component.spec.js
comments.controller.js
comments.controller.spec.js
comments.service.js
comments.service.spec.js

The spec files are Karma tests.
The spec files are in the same folder as the Angular components
For organisational reasons I want to be able to put my tests right next to the code under test. I don't want to put it off in a separate spec folder.
With Gulp, composing a glob would be easy, something like this:
[ '*.js', '!*.spec.js', '*.spec.js' ]

However, this doesn't work in Karma. If I do this:
files: [
  './source/js/**/*.js',
  '!./source/js/**/*.spec.js',
  './source/js/**/*.spec.js'
]

This line: '!./source/js/**/*.spec.js' matches no files.
The Question
How can I compose a karma.conf.js file such that all my angular components are included first, and all my spec files are included next, without hiding all my spec files away in a separate folder?

A: Try this way if you want to avoid creating another folder:
files: [
  './source/js/**/*.service.js',
  './source/js/**/*.component.js',
  './source/js/**/*.controller.js',
  './source/js/**/*.spec.js'
]

A: Your karma file should only be:
files: [
  './source/js/**/*.js'
]

because you want to use all the JavaScript files inside your js folder

A: I just discovered something related to your question today. I had a look inside the official Angular-seed GitHub repo and their Karma configuration file looks like this one:
files : [
  'app/bower_components/angular/angular.js',
  'app/bower_components/angular-route/angular-route.js',
  'app/bower_components/angular-mocks/angular-mocks.js',
  'app/components/**/*.js',
  'app/view*/**/*.js'
],

So it seems you don't have to care about including the source code first and the tests files at the end of the "files" array.
Here is the link: https://github.com/angular/angular-seed/blob/master/karma.conf.js


No two businesses are alike - whether selling or buying, you have unique goals and demands for the business transaction. To even get close to achieving these goals and fulfilling these demands, you need to have credible answers to the scores of natural questions that come up during the planning phase. This is where the National Business Advisor Alliance (NBA) comes in.
When you go through us, you'll be gaining access to trustworthy information straight from experts in all aspects of international business transactions. Our Advisors can provide you with counselling in acquisitions, mergers, law, finance, taxes and whatever other issues appear.
You might have a clear end-game goal for your business transaction. Alternatively, you might not yet know exactly what you hope to expect from a planned transaction. In either case, NBA can provide you with case studies, where circumstances were similar to your current situation. This is but one of the ways we show you what you can expect from a business transaction.
NBA never rushes a client into a purchase or a sale. The essence of our services is the exact opposite: To give you the resources and time you need to fully understand and work through the transaction. We work on the principle of transparency: Never holding back any information or advice you might need to make a proper decision.
Through NBA, you will gain support to assist you through the mazes of contracts, business valuations, legal issues and taxes. Simultaneously, we work on a principle of modesty: We will never "overhype" a business or our own services.
Business doesn't discriminate; money doesn't discriminate; we don't discriminate. In fact, we work exclusively in the area of M&A and National Business Advisor transactions (hence the name). For this reason, we have an absolute need to surround ourselves (figuratively) with expert Associates throughout South Africa. And as one of the services we offer our clients, we lend this National Team of Experts to you, as well as our Global Team, when required. You will receive all the advice you need for closing your specific transaction. Whether you have questions on the local tax laws, business laws or investment opportunities we will assist you in getting in touch with the right person to answer your questions. Business is a language. Let us be your translator.
Direction: No matter how long you've been in business, your industry or your country, you cannot handle all of the tasks involved in buying or selling a business overseas on your own. You will need advice from a collection of experts from a variety of fields and nations. Finding all of these advisors on your own is difficult and costly. NBA solves this problem by bringing together these advisors under our umbrella & lending them to you for free; so you can find direction in your business transaction.


Zac Zaharias is speaking at the NPA meeting on Wednesday night (October 3).
Held at Tebbutt rooms of the Deerubbin Centre (Windsor Library), in NW Sydney.
7.30pm start. Gold coin donation. If you are late, press the button at the side of the doors and someone will come and let you in.
It's good to see Zac hasn't slowed down after climbing Everest.
A quick google search taught me that Spantik is a mountain in the Karakoram range.
Need ropes for about 300m of it, if you don't have a good freeze.
Seriously, if your looking for a 7000m peak to climb that's really safe and really easy, go climb Spantik.
Safe camps, Safe route. I personlly only got to about 6500ish due to a week long whote out, but seriously a week at 5500 in white out.
This is like giving a talk about climbing The Bard.
Go walk up the Chogolongma Glacier. Piss easy.
Unless he climbed the cliff, in which case wow, that's impressive, 1600m of verticle Granite. Which is amazing.


text:
DNA Testing for Adoptees: Searching for Biological Roots
by Lisa Cooke | Jun 17, 2017 | 01 What's New, Adoption, DNA | 3 comments
DNA testing for adoptees (and others with unknown parentage) isn't a last resort–use it along with other strategies to discover biological roots. Genetic genealogists CeCe Moore and Diahan Southard share five tips for getting started.
Not long ago, I chatted with genetic genealogist CeCe Moore of The DNA Detectives about using DNA testing for adoptees. Here I summarize some tips she shared, along with some perspectives of my own and resources that can help your search for biological relatives.
Click here to listen to our chat:
DNA testing for adoptees: 5 tips
1. Start with available records. A lot of people of people are coming straight to DNA testing now without looking at any available records first. Adoptees should start by looking at state laws and seeing if they can get access to original birth certificates. Click here to read about access to adoption records (U.S.).
2. Take an autosomal DNA test. This test looks at both sides of a person's biological family, mom and dad. Most people start by testing at AncestryDNA because it has the largest database of potential matches (over 4 million now!). If you don't find a close match (at least a second cousin), you will want to transfer to both Family Tree DNA and MyHeritage for FREE to expand your search radius. Males with unknown paternity should also take a YDNA test (at least at the 37-marker level) from Family Tree DNA.
3. Do your own adoption search. Sure, you can hire someone to help. But you should be invested in your own search when possible. You'll likely get a much greater satisfaction out of it.
As with any kind of search you are doing for people who may still be living, proceed with care and try to keep your search as private as possible. Try first to contact the people who are most likely to know about you already, including your parents and grandparents. If you do discover a biological family buy ed medication member who may not know about you, please carefully consider the impact you may have on their lives by revealing information you have learned.
4. Become educated. Learn all the strategies you can for researching your biological roots. Read and read! Keep learning! The DNA Detectives Facebook group is about self-education, with members helping members work their own cases without a professional having to work each one. (You can also check out The DNA Detectives website.)
5. Keep your expectations flexible. CeCe Moore says, "The end result of an adoption search is positive most of the time. There are some stories where contact has been rejected by a birth relative, but they are in the minority. A positive outcome doesn't necessarily mean a connection ora loving relationship with a birth parent, but perhaps with a birth sibling or cousin."
Finally, I want to share this powerful statement from CeCe Moore on adoptee rights:
"I believe everyone has an equal right to learn about their heritage. There's a whole class of people denied the joyful experience of building their biological family trees. Everyone deserves that knowledge. That doesn't mean the birth family has to have a relationship. There's a difference between knowing your heritage and having a relationship with the birth family. The adoptee deserves the knowledge of their origins.
But you can't legislate a person to have a relationship with another person!"
Get the most from your DNA testing experience with my series of DNA quick guides, updated for 2018! Topics include:
Autosomal DNA for the Genealogist
Y Chromosome DNA for the Genealogist
Mitochondrial DNA for the Genealogist
AncestryDNA, 2nd Edition
Family Finder at Family Tree DNA
23andMe
MyHeritage DNA New for 2018!
Breaking Down Brick Walls with DNA New for 2018!
Organizing Your DNA Matches, 2nd Edition
Gedmatch: A Next Step For Your Autosomal DNA Test
BEST VALUE: Save 27% when you grab the whole bundle!
Why Abraham Lincoln is a Genealogy Gem: 150 Years Ago Today
by Lisa Cooke | Nov 27, 2013 | 01 What's New, History, Newspaper
We just celebrated the 150th anniversary of President Abraham Lincoln's now famous speech at the dedication of the Gettysburg Cemetery, a national
Battery B, East Cemetery Hill, Gettysburg, Pa, from Robert N. Dennis collection of stereoscopic views. Wikimedia Commons Image.
cemetery created at the site of one of the bloodiest battles of the Civil War.
Presidents give a lot of speeches–and most are never remembered. But the Gettysburg Address, as it came to be known, was immediately appreciated as something special. The press described it as "a perfect gem…unexpected in its verbal perfection and beauty."
150 years ago today The Caledonian newspaper reprinted the entire speech. (Don't stop there: you can read high-resolution digital versions of all five of Lincoln's handwritten copies of the address and learn all kinds of things about the Address at the Google Cultural Institute.
The Gettysburg Address is part of the genealogy of every American whose ancestors lived through the Civil War. Few were unaffected by the War, whether they lived in the North, South or further West. Certainly its tensions and outcomes shaped the nation's economy, social mores and more for decades to come.
Life-shaping battles and other events–and responses to them like the Gettysburg Address–appear in newspapers. That's why I love teaching genealogists about using newspapers, and why I wrote the book How to Find Your Family History in Newspapers. The "daily news" of the past tells us what people were doing and saying and why.
If you're wondering what the Google Cultural Institute (GCI) is, you're not alone. It's a less-heralded but really important part of what Google offers. The GCI is a Google effort launched in 2011 to "make important cultural material available and accessible to everyone and to digitally preserve it to educate and inspire future generations." (From GCI FAQ.) As of mid-2013, over 6 million photos, videos and documents are on the site, including all kinds of international cultural materials. If you haven't explored the many Google tools helpful to genealogists, I suggest you read my book The Genealogist's Google Toolbox. Either of these books will make a great holiday gift to yourself–and your research!
Page 120 of 232« First«...102030...118119120121122...130140150...»Last »

redpajama_set_name: RedPajamaCommonCrawl


text:
José María Paredes (Casa Grande, Trujillo, 1 de abril de 1996) es un futbolista peruano. Una fuerte lesión obligó al futbolista a una retirada prematura.

Trayectoria
José María Paredes viajó a España a los 11 años de edad junto a su familia por un mejor futuro. A los 12 años fue fichado por el Club Esportiu Europa donde jugó por 3 temporadas en la división de menores.

Debido a sus grandes actuaciones decidieron llevárselo, con tan solo 15 años, al club Unió Esportiva Sant Andreu para que jugara por el equipo filial.

UE Sant Andreu

En la temporada 2011/12, estuvo presente en todos los encuentros, completando 32 partidos como titular indiscutible y anotando 11 goles, con el objetivo de ser ascendido al primer equipo de  Sant Andreu, salieron campeones en la Temporada 2011/12. Ese mismo año fue convocado a la selección peruana en Barcelona, en donde ingresó junto a otros 17 jugadores de 100. La temporada 2013/14 fue su última temporada en este club, no jugó muchos encuentros por constantes lesiones.

C.E. Europa

El 23 de enero de 2015, se hace oficial su fichaje al  C.E. Europa. El central peruano volvía al fútbol luego de 185 días de lesión.

"C.D Carmelo"

El 21 de noviembre de 2016, se hace oficial su fichaje al  C.D. Carmelo el central peruano debutó en 2.ª Division Catalana

"C.D. Oyón"

El 14 de noviembre de 2017, estuvo a punto de fichar por el  CD Oyón

Selección nacional
El 26 de junio de 2014, José María Paredes fue convocado a la  Selección Peruana Sub-20 por el técnico Víctor Rivera. Lamentablemente no salió en la lista final para el Campeonato Sudamericano de Fútbol Sub-20

Clubes

Referencias

https://web.archive.org/web/20140318170202/http://www.casagrandealdia.com/2014/03/conoce-jose-maria-paredes-el.html

Enlaces externos

Trujillanos (Perú)
Futbolistas de Perú
Futbolistas de la Unió Esportiva Sant Andreu
Futbolistas del Club Deportivo Carmelo

redpajama_set_name: RedPajamaWikipedia


Should she cover her face and hair in front of her father?
Q: I am a woman who covers my whole body including hands and face. I recently came across some books about purdah that say that a woman should cover herself in front of even her brother and father, except they can see her face and hands only. Is this true that I can not show my hair in front of my father, or is this statement just reflecting the culture of the countries that the writers are coming from? Jazakallah khairun.


When business owners ask me for fresh content marketing ideas, the first solution I recommend is the case study. It's so robust; no other format offers as many diverse benefits to an Internet marketing strategy than the case study. And in a recent CMI/MarketingProfs study, B2B content marketers reported a 70% effectiveness rate for case studies in their campaigns.
So why doesn't your business website boast a deep list of case studies?
It could be because you're apprehensive to ask a customer for an interview that will add credibility to a story about an experience with your product or service.
"For your clients, the value is not so apparent," says MarketingProfs.com contributor Paul McKeon, "you are asking your clients for a big favor: a public endorsement." This holds many marketers back, wary of resistance and rejection.
Today, we ask you to consider case studies as a win-win for the client and your company. Read on for 5 powerful benefits of adding case studies to your content marketing arsenal, and check back next week for a refreshing new approach to case studies that will have customers eager to participate and share!
Case studies give consumers the confidence to trust a product or service by providing relatable human evidence of its value.
Unlike a testimonial, a case study puts the value in action, taking users on a specific journey through the usage of a specific product or service. It's word-of-mouth validation that marketers covet, and consumers rely on to make decisions.
A rich customer narrative, loaded with direct quotes and characterizing details, helps prospects relate to your product or service, and impresses them to imagine it benefiting their lives.
A case study provides prime material for multimedia, which expands its reach to a wider audience of visual and auditory learners, and boosts SEO across platforms. You can film a case study, add pictures or infographics to the written version, and publish a podcast of the script.
Customer stories are invaluable pieces of marketing collateral; case studies let you maximize their potential.
Additionally, the information from a case study can be used in multiple touchpoints and formats across marketing channels.
Case studies often necessitate keywords that help websites rank higher on Google, because at the core of any case study is a specific product or service a customer used to solve a problem.
Fresh content with keywords pertaining to your products or services often improves the website's visibility on searches where those words are used.
The narrative structure of a case study makes it easy to incorporate keywords that boost Google rankings for specific searches.
You can only conjure up so many "How-To" blog posts before your imagination goes sour.
Case studies cure content marketing creativity blues by spotlighting unique customer experiences. With your customers in control of the narrative, no two case studies will ever be the same.
Your products or services are promoted in compelling, original stories unlike any piece of content created by your competitors.
Destroy any apprehension you might have about approaching customers to share their experiences; case studies can be used as part of a mutually beneficial customer appreciation program that builds stronger business relationships (and potential brand advocates!).
Google's Hilton Hotels case study is a great example of customer advocacy in a case study.
With this approach, you don't ask for a favor from your customer- you offer a benefit. Your customers will be excited about you including them in your case studies for content marketing with a brief explanation of what you're doing.
In the example we've looked at throughout this article Google gets a case study for their hotel search ads product; at the same time, Hilton gets an excellent piece of PR from Google. Win-win.


text:
Апперко́т () — классический удар из традиционного бокса; наносится кулаком по внутренней траектории, при этом кулак повёрнут на себя; используется в ближнем бою. Название апперкот происходит от английского словосочетания, которое переводят как «рубануть снизу вверх». В СССР с 1940-х гг. иностранная терминология, включая английские названия ударов (хук, джеб, кросс, свинг), были практически полностью исключены из спортивного лексикона в рамках кампании по борьбе с «низкопоклонством перед Западом», исключение было сделано для апперкота, поскольку у переводивших не нашлось подходящего словесного эквивалента, чтобы просто и понятно описать этот нехитрый удар.

Апперкот обычно стремятся нанести по подбородку противника (иногда попадают по носу или в бровь), но иногда и по туловищу (особенно в солнечное сплетение) когда он близко к горизонтальному положению.

Хорошо поставленный апперкот приобретает силу от резкого доворота корпуса в сторону удара в сочетании с выпрямлением тела, отчего бьющая рука сама направляется к цели.

Апперкот теряет значительную часть энергии удара при увеличении расстояния между оппонентами, потому что рука меньше согнута в локте и не может эффективно передать силу восходящего движения тела нападающего.

Апперкот используется также и в других видах боевых искусств: рукопашный бой, кик-боксинг, муай-тай и др.

См. также
 Джеб
 Кросс (бокс)
 Оверхенд (бокс)
 Свинг (бокс)
 Хук (бокс)

Примечания

Ссылки
 Самая подробная статья про апперкот
 Описание апперкота.

 Техника нанесения удара снизу (апперкота) в боксе. Фото, видео и описание. Мосбокс - энциклопедия бокса.

Терминология бокса
Техника бокса


text:
Stephen Houston The Gifted Passage: Young Men in Classic Maya Art and Text New Haven: Yale University Press, 2018. 256 pp.; 56 color ills.; 49 b/w ills. Cloth $70.00 (9780300228960)
Matthew Looper
CrossRef DOI: 10.3202/caa.reviews.2019.20
With this book, one of the more prolific Maya archaeologists makes a significant art historical contribution, providing evidence of the impact of adolescent males in ancient Maya society as preeminent subjects and patrons of art and texts, particularly during the Classic period (300–850 CE). Indeed, according to the author, young males "energized and reinforced courtly societies" of the ancient Maya realm (6). Over six chapters, plus extensive and detailed endnotes, the work fully combines epigraphy, art history, and archaeological data into a comprehensive synthesis that provides a new perspective on gender among the ancient Maya, a topic that until now has largely examined female identities. Moreover, it focuses on an age segment that has largely been overlooked, as scholars devote most of their attention to mature men and women and, secondarily, to young children. As in author Stephen Houston's previous book, The Life Within: Classic Maya and the Matter of Permanence (New Haven: Yale, 2014), extensive anthropological (ethnographic) and literary comparisons throughout help to contextualize, support, and illustrate his insights regarding this neglected segment of the ancient Maya population.
The main arguments of some of the chapters will be familiar to scholars from the author's previous publications in academic journals and blog posts; however, by reworking them and combining these arguments in a single volume, they bring into sharper focus several salient themes relating to male identities in Maya art. The first chapter draws the reader's attention to the social construction of male identities, through a discussion of literary and pictorial images from various cultures and framed by anthropological and sociological theories. Critical issues brought up include the controversies regarding nature vs. nurture in the expression of gender, the distinction between age grades and age sets, the cultural aestheticization of youth, young men as a source of labor, youthful spaces such as schools, and psychological dimensions of youth, such as risk-taking behavior. All of these issues are addressed later on in the book, in the ancient Maya context. It sets the stage for the second chapter, which discusses the social construction of ancient Maya gender, including terminology for youth, especially xib, "male"; keleem, "strong male"; and ch'ok, "youth, sprout, young." He asserts that the term "ch'ok" has a "strongly masculine nature" (52), which has implications for the interpretation of the patrons of ceramic vessels discussed in the next chapter.
Chapter 3, the focal chapter of the book, argues for the importance of young males as the patrons of inscribed ceramic vessels starting in the mid-sixth century CE. This assertion is supported by the fact that a significant percentage of vessels (29 percent) refer to their owners using "ch'ok" or "keleem." Interpreting the vessels' dedicatory inscriptions as formulaic "toasts," sometimes witnessed by a scribe of lower status, the elaborately painted luxury vessels seem to "celebrate a particular age status" (68). By exclusion, too, they seem to exalt males, as only a handful of vessels were noted as having been owned by females. The author's assertion that, "[g]lyphs prove the rest of those with texts belonged to males," should perhaps be qualified to refer to vessels with a named owner. Additional complexities arise when considering a vessel excavated at Tikal, discussed in pages 69–70. Not only was this vase buried with a young woman, but it depicts two women and is supposed to have been owned by a woman who is also a ch'ok. Were any of the dozens of other vessels whose inscriptions simply mention that they were owned by ch'oks also owned by women? The chapter closes with a discussion of the evidence for the vessels having been given as gifts to mark important events. The evidence for this is difficult to discern, as most inscribed vessels are looted; however, Houston does make note of an important example of a vase inscribed as having been commissioned "for the first fast/penance," a critical celebration that is the focus of the next chapter.
Chapter 4 discusses the "first penance" rite in relation to male identity, through an analysis of the term at its core, ch'ahb, which is interpreted as a personal sacrificial rite that had reproductive connotations. Texts associate this event with nobles (mostly male but some female) between five and nine years of age. The rite involved various acts in addition to autosacrificial bloodletting, conducted under the supervision of older adults and often in the company of other males of various ages. The author also considers other rituals associated with young persons, including dental inlaying (ages 15–20), and entry into "young mens' houses" (a combination of dormitory, school, and ritual training facility) by males around puberty. Concerning the latter, Houston offers several possible examples at Maya sites, but usually with question marks. The images and texts of Naj Tunich cave provide evidence of caves as pilgrimage destinations for young men, where they experienced visions and possibly homosocial eroticism.
Chapter 5 explores the role of youthful identities within the political rhetoric of a specific monumental program: the Bonampak murals, dating to 791 CE. Taking the texts of the murals as the principal lead, Houston argues that the ruler Yajaw Chan Muwaan, who is a focal character in Room 2, is not the main character in the program as a whole. Instead, it highlights a trio of youthful males, who may be the heirs to the throne, presented in ranked order. In this reading, the Bonampak king and his Yaxchilan overlords may have used the mural images of young males performing elaborately choreographed rituals as a metaphor for the orderly succession of political power. Though based on incomplete information, this interpretation is compelling, and his suggestion that the mural building may have served as a young men's house is intriguing.
The final chapter of The Gifted Passage provides a brief and provocative analysis of the contrasting representation of old and young males in Maya art. Although historical individuals are considered, more attention is devoted to the role of supernatural elder males, who are typically depicted as sorcerous, potent beings at the same time as their bodies express the physical signs of aging. Near the end of the chapter, the author identifies certain female figures as courtesans, analogous to the Aztec "flower women." However, because the evidence is largely based on ethnographic analogy and textual identifications from a supernatural context, it will likely be controversial, or at least in need of follow-up studies.
In conclusion, The Gifted Passage makes a compelling case for a greater attention to the youthful male element of ancient Maya society, for it was they, together with older male relatives, who "formed the chief mechanism of governance and the core of expressive culture" (6). While their older male counterparts generally dominated the political rhetoric of publicly visible monuments, male youths were indeed an important presence in smaller scale monuments and especially in portable works. Although it is expected of an art historical study, it is surprising that more archaeological data is not brought to bear on the topics considered in this book. With the exception of the Bonampak murals, the analysis of which benefited from a detailed documentation project in which Houston participated, most of the objects discussed in The Gifted Passage are unprovenanced. Of course, the justification for this is that the bulk of portable objects with legible inscriptions relevant to the subject are without archaeological provenance, but I was indeed surprised to see only two vessels from recent Piedras Negras excavations, which Houston codirected, illustrated (figs. 30, 31). More importantly, what can human remains tell us about young males as individuals and as a group, especially with regard to social status, since most of the art objects discussed in this book seem to express high status (5)? In this book, skeletal material is only considered briefly, reflecting upon cranial shaping and dental modification (110, 112) and human sacrifice (113), in the latter case, citing data from a previous study.
I should also like to make note of how the physical appearance of book strengthens the reputation of Yale University Press in Mesoamerican art history publication. Like his previous book, The Life Within, also published by Yale (2014), The Gifted Passage is very nicely designed and well illustrated with numerous high-quality color photographs. This not only makes for a more pleasant read and brings notice to a work, but provides important information relevant to art historical discussions. The press is to be congratulated for consistently investing in the production of these and related volumes—in particular the beautifully illustrated Art and Myth of the Ancient Maya by Oswaldo Chinchilla Mazariegos, published in 2017. One may hope that they will provide an example to other presses that produce academic studies on related topics.
Professor of Art History, California State University, Chico


text:
Q: Differences between different creative coding libraries I've worked with Cinder previously under Windows, but have recently switched to Ubuntu. Since Cinder doesn't work on Linux (::sadface::) I've began looking for alternatives. With that in mind, could you please tell me what the differences between Processing, openFrameworks and Polycode are, and compare them to Cinder?
Specifically, I would like to know

*

*If there are differences in the functionality of the packages compared to Cinder (ie. one does something that Cinder doesn't and vice versa).

*I would also like to know how different the syntax of the package is from Cinder's.

I have already seen the following articles: here and here and have also visited the corresponding website for each of the libraries but could not find a clear and concise answer to my question.

A: The things that come to mind are that

*

*Processing is the only one which is not C++ (but Java) in that bunch

*I think openFrameworks is the one with the broadest platform support right now (Win, Mac, Linux, iOS, Android, with raspberryPi incoming currently)

*Polycode is the youngest (with no judgement if that's good or bad)

A: It's good to stick with the platforms with a big community and active development. For me, this currently is Processing and openFrameworks. I use Processing because of it's simplicity and openFrameworks for applications with high demands on performance.


Whenever you are faced with the choice to choose a particular brand of diet regimen pill, you have 2 major alternatives to think about -natural diet regimen pills or synthetic or artificial tablet. Currently, if you are questioning, what exactly is the distinction in between artificial and also natural pills when both the items are manmade, let me clarify it for you.
An all-natural diet pill is made of removes of different plants, parts of the plant or herbs in general. Essences taken in the form of juice or pulp are refined, powdered and also compressed right into a tablet kind before presenting to you. The processing component stated above plays a significant duty in determining the honesty of an all-natural product. A number of times it takes place that a natural remove loses a part of its natural attribute because of wrong processing techniques. Excessive of refining and also distillation can meddle with the working of an all-natural compound. The artificial agents or stimulants made use of for such handling could affect the result of the remove. A synthetic diet tablet is made from a non-natural resource either partly or completely. They are composed of chemicals that have medicinal residential properties and also they are processed in a normal pharmaceutical manner in drug manufacturing laboratories. The chemicals made use of for producing such drugs could be stemmed from plants or animals. Or they could be prepared in research laboratories right from the beginning. An artificial pill could include natural essences yet still they cannot be put under the classification of "all natural diet plan pills" More info https://ontrackengenium.com/.
100% natural diet pills remain in need because they are recognized for their side-effect cost-free working. It is a recognized idea that nature prepares its recipes in a best blend finest fit for humans and non-humans. As well as it is claimed that despite the development achieved by modern-day scientific research, male cannot reproduce the creative talents of nature. This is the reason why apples and also bananas could not be produced in laboratories or factories. They are unique and they are produced only naturally. Alternative medicines are made from such natural products and also natural herbs that are made from excellent magic combinations, powerful enough to fix our issues without creating newer ones. Synthetic diet pills consist of miracle drugs that are made from manmade products. Even though they work their combination could very well lack in perfection and balance. They could ease the targeted issue yet they might create damage to specific non-targeted areas within our body as well. This is the reason that artificial tablets are infamous for their "side effects".


As the founder, chairman and CEO of one of the top talent agencies in entertainment, Troy Carter knows music. Carter helped launch the career of Grammy Award-winning artist Lady Gaga and served as her manager for nearly seven years. He went on to manage John Legend and Meghan Trainor, among others. Today he is gaining attention as the founder of SMASHD/labs, a Los Angeles-based accelerator looking to help startups in the fields of entertainment, media, technology, and culture.
As an accelerator in a rapidly-evolving field, Troy gets a firsthand look at companies that are changing the world of entertainment. He's very familiar with music distribution platforms, which connect social media and music, making them a popular choice for startup founders everywhere. At the accelerator's recent demo day, Troy spoke to me about the future of music distribution platforms and how the industry will be affected by them.
Streaming music has experienced phenomenal growth in recent years. Spotify is expected to have 100 million users by the end of the year and Pandora already has 250 million on its platform. As Apple enters the already-burgeoning marketplace, Troy expects that we'll see a global migration to streaming (Adele notwithstanding). At the same time, Live Nation recently announced that it had its biggest quarter ever, indicating people are more interested in seeing live shows. Carter believes this is an indication that music has become more of a real-world experience for listeners.
As live streaming platforms grow, so will the technologies that power them. On SoundCloud alone, 12 hours of music are reportedly uploaded every minute. For someone to manually sort through all of that music would be impossible. Carter believes community-based tools are essential to help users sort through all of the content.
"There's no way in the world, if there are a million songs on any of these platforms, that I'm going to be able to know what I should be listening to at any given time," Troy says.
One of the companies Carter works with is addressing that problem. SMASHD/labs has actually been working with five startups in the last few months. Among the group is Trakfire, a platform that allows users to discover and curate music from their favorite artists. The service has built a platform to allow users to up vote songs they like, which helps ensure quality content makes its way to the top. It is hoped that a Reddit or ProductHunt-type community might build around the platform.
Another Carter company addressing similar issues is the file sharing app WeTransfer, which allows artists to quickly send very large music files to each other.
With SMASHD/labs, Troy uses his connections in the industry to help young founders accelerate business development. Entrepreneurs develop their strategies in a supportive environment, which helps them put together their marketing, customer acquisitions, and product development plans.
As SMASHD/labs helps startups grow into successful companies, its founder is excited about technology's role in the future of music. The music industry as a whole stands to gain from new innovations in the space, which make it easy for fans to discover music they will love.


Five essential pouches that you cannot leave home without for a perfect backpacking holiday!
This exhaustive list will get you covered for your entire backpacking trip with your baby.
You have reached the right page! I had the same question when I was a newbie to wearing my baby. Read on!


CBS3 leads the Philadelphia stations with 55 nominations for the 2007 Mid-Atlantic Emmy Awards, which honor excellence for television markets in Pennsylvania, New Jersey, and Delaware.
CBS3 news anchor Larry Mendte leads all individuals with 21 nominations.
Mendte and wife Dawn Stensland of Fox29 will be competing in the newscast category.
Others with multiple nominations include Bruce Gordon (5), Kerri Lee Halkett (4), Dave Huddleston (3), John Atwater (3), Jeff Cole (2), Dawn Stensland (2), Robin Taylor (2), and Dave Schratwieser (2) of Fox29; James Osman (6), Pat Ciarrocchi (4), Alycia Lane (4), Kathy Orr (2), and Beasley Reece (2) of CBS3; Mike Strug (5) and Jade McCarthy (4), and Linda Swain (2) of NBC10; and Mary Caraccioli (3) and Gregg Murphy (2) of CN8.
Others with single nominations include Justin Pizzi, LuAnn Cahn, Aditi Roy, Doug Shimell, Vince DeMentri, Steve Highsmith, Terry Ruggles, and Harry Hairston of NBC10; Susan Barnett, Carol Erickson, Ukee Washington, Steve Bucci, and Sean Murphy of CBS3; Justin Lock, Sarah Zapp, Brian Gurry, Mary Amoroso, Jackie Mason, Lynn Doyle, Larry Kane, Art Fennell, and Barry Nolan of CN8; Neil Hartman, Marc Zumoff, Michael Barkann, John Boruk, Lance Crawford, and Derrick Gunn of Comcast SportsNet; and Bill Vargus and Michelle Williams of Fox29.
Also, former Channel 10 weatherman Herb Clarke will be presented with the Board of Governors' Award for career achievement. Clarke reported weather and news for WCAU-TV from 1958 to 1998.


text:
Computer literacy eludes Jharkhand MLAs
February 1st, 2010 - 12:59 pm ICT by IANS Tweet
By Nityanand Shukla
Ranchi, Feb 1 (IANS) A move to make Jharkhand legislators computer-literate by providing them a free laptop each does not seem to have yielded the desired results despite more than Rs.80 lakh in public funds spent on it in the last nine years.
According to assembly sources, the Jharkhand assembly has spent more than Rs.80 lakh since 2001 to purchase laptops and organise a crash course for the legislators. The results were not encouraging as a majority of the legislators say they hardly get time to use laptops.
In 2001, then assembly speaker Inder Singh Namdhari had come out with an innovative idea to provide legislators laptops so that they could keep track of government schemes, development work and utilisation of the Local Area Funds.
A total of 55 laptops, each costing Rs.81,500, were purchased by the assembly at more than Rs.44 lakh. The state had 27 ministers who were provided laptops by their respective ministries. Crash training courses were also organised for the legislators.
However, by the 2005 polls, only 41 of the legislators returned the laptops. Quite a few of them had gifted them to their relatives and other close associates. The laptops which were returned were sold among officials and legislators for about Rs.15,000 each.
In 2005, again 70 laptops, each costing Rs.50,000 each, were purchased at an outlay of Rs.35 lakh. By the 2009 assembly elections, 61 legislators returned them. Now the speaker has to decide what to do with the 61 laptops deposited in the assembly secretariat, as well as about the ones not returned.
"There is a provision to deduct money from the pension of ex-legislators who failed to return the facilities extended by the assembly," sources in the assembly, who spoke on strict condition of anonymity, told IANS.
The present Speaker, C.P. Singh, does not seem keen to continue the move.
"I do not believe in following the tradition. It is not necessary that I should follow what was done by previous speakers. We have not decided anything over the issue. We will discuss the issue with the legislators. We spend money to buy new laptops and if they are not used, they become useless as latest technology is coming into the market every three to six months," Singh told IANS.
"Laptops should be used by the legislators and ministers," said Water Resources Minister Chandra Prakash Chaudhary, but admitted he does not get much time to use it himself.
"When I am in office, I try to spend time with my laptop. I do not get time at my house or when in the constituency," he said.
Namdhari, who introduced the system, defended his initiative. "It was partially successful. What can one do if a legislator does not try to learn technology and gifts the laptop to relatives," he asked.
Huge salary hike, laptops, i-Pads, phones for Andhra legislators - Mar 29, 2011
UP gifts Rs.20 lakh to MLAs for cars, opposition protests - Jul 03, 2012
Jharkhand set to hike legislators' salary - Mar 24, 2011
Two top Jharkhand leaders don't want security cover - Jan 16, 2010
Hike legislators' salary: Jharkhand speaker - Jun 26, 2011
Ex-Meghalaya speaker ready to face probe - Mar 29, 2011
Legislator tears own shirt in Jharkhand assembly - Sep 03, 2012
New Punjab assembly a 'crorepati' club - Mar 11, 2012
Eight killed as Maoists attack MP's convoy in Jharkhand - Dec 04, 2011
Haryana lawmakers to have websites - Jun 25, 2011
Jharkhand hikes salaries of ministers, legislators - Sep 03, 2011
Goods worth crores missing from ex-speaker's official residence - Mar 19, 2011
Left has miles to go to regain lost ground (One year of Mamata Banerjee) - May 17, 2012
'Peddlers' team in customs hassle - May 31, 2012
Steps taken to tackle spread of fever in Kerala: Chandy - Jun 21, 2012
Tags: anonymity, assembly elections, assembly speaker, close associates, computer literacy, crash course, desired results, free laptop, government schemes, inder singh, lakh, laptops, legislators, mlas, namdhari, nine years, outlay, rs 50, shukla, strict condition


text:
Home News and Resources Economy UK top in the EU
UK top in the EU
UK top in Europe and third globally for foreign investment Figures from the Organisation for Economic Cooperation and Development (OECD) show the UK remains the top destination in Europe for foreign investment despite a fall in new funds coming into the country. New investment fell from $100bn to $64bn, but the UK still had a £1,400bn stock of funds - more than Germany, Spain and Poland combined and only surpassed by the US and China. International Trade Secretary Liam Fox said: "The latest OECD figures show the UK remains one of the world's most attractive destinations for foreign investment. International investors continue to recognise the fundamental strengths of our economy – everything from our predictable legal system to our world-leading financial services."


text:
\section{Introduction}

Brain-computer interfaces (BCI) have become a rising domain in neurotechnologies, allowing decoding brain activity,
with multiple applications~\cite{Nam2018book} using electroencephalography (EEG).
Out-of-the-lab applications in EEG-based BCI face a difficult challenge:
on top of the hard problem of decoding brain signals in real-time,
most of the existing literature provides results that are difficult or even impossible to reproduce with online applications.
A large portion of the BCI literature tackles processing or classification problem relying on offline analysis and dataset-specific preprocessing,
or uses machine learning methods not suitable for real-world applications (long calibration process and model training phase).
Indeed, the BCI community is continuously pushing toward increased reproducibility, robustness and acceptability of BCI,
but the above-mentioned pitfalls are well documented~\cite{Huggins2014,Brunner2015,congedo2017riemannian,Rashid2020}.

In this study, we focus on a well-known class of BCI,
that is based on the detection of event-related potentials (ERP) induced by an oddball effect.
Common applications are P300-spellers~\cite{Farwell1988,Rivet2009,barachant2014plug} or P300-games,
such as Brain Invaders~\cite{barachant2014plug} or Raccoons vs Demons~\cite{Goncharenko2020Raccoons}.
P300 is an ERP elicited when the BCI flashes the target character (also called symbol or item).
The BCI's task in these ERP-based paradigms is to detect the presence or absence of a P300
to retrieve the flashed character~\cite{Farwell1988}.

The low signal-to-noise ratio (SNR) of P300 waves in EEG signals makes it difficult to classify them on a single trial.
Therefore, the first attempts to detect P300 waves consisted in averaging multiple trials (about 15 repetitions for each flashing character).
While these attempts were able to successfully discriminate between target and non-target flashing~\cite{Farwell1988},
the resulting BCI was slow and the information transfer rate (ITR) \cite{Yuan2013} was low.
To reduce the number of repetitions, further attempts applied advanced spatial filters to increase the amplitude related to P300 waves,
like xDAWN which maximizes the signal to signal+noise ratio~\cite{Rivet2009}.
To further reduce the required number of repetitions, ERP detection was achieved with classifiers such as LDA or SVM trained on signals enhanced with spatial filters~\cite{Lotte2018}.

However, spatial filters are subject- and session-dependent~\cite{Tomioka2007,Reuderink2008,Grosse2009},
preventing cross-session and cross-subject transfer capabilities~\cite{barachant2014plug}.
This implies that a subject should perform a careful calibration phase before being able to use the BCI;
this calibration is required for each session even for someone using a BCI on a regular basis.
Recently, Riemannian approaches applied to BCI have allowed the design of new classifiers,
such as the minimum-distance-to-mean (MDM)~\cite{barachant2014plug},
having high performances with shorter calibrations~\cite{barachant2014plug,congedo2017riemannian}.
Whereas optimized spatial filters estimate enhanced signals,
Riemannian BCI work in the space of covariance matrices to process and classify the signal.
While covariance captures the amplitude variations well, as induced by motor imagery tasks~\cite{Barachant2012},
it does not apply straightaway for ERP.
It is possible to extend the covariance matrix with a P300 prototype~\cite{barachant2014plug}
to obtain a discriminative representation that is appropriate for ERP classification.
When applying those prototype-based covariance matrices,
Riemannian BCI increased the robustness of P300-based BCI~\cite{barachant2014plug,korczowski2015single,congedo2017riemannian}.
It should be noted that these works focus on a signal level, \textit{i.e.} ERP detection,
and not at a BCI system level, for character prediction.

In P300 BCI, the aim is to predict character from ERP classification.
The most common approach is to increase the confidence of flashed characters if a P300 is detected.
Since each character is seldom flashed, as expected in an oddball paradigm,
and multiple repetitions are necessary to attain a reliable confidence in classification,
the transformation from ERP detection to character prediction is a bottleneck that hinders the BCI speed.

\begin{figure}[t]
	\centering
	\pgfimage[width=0.95\linewidth]{figarticle_histP300}
	\caption{Histogram of a P300 wave in channel PO8 across trials of a subject, estimated with \cite{pyriemann}.}
	\label{fig:p300_wave}
\end{figure}

To overcome this limitation, we introduce a novel
B\underline{a}ye\underline{s}ian \underline{a}ccumulation of Riemannian \underline{p}robabilities (ASAP).
This is an end-to-end pipeline for P300 BCI classification, following these successive steps:
(1) feature extraction, estimating prototype-based covariance matrices from EEG epochs,
(2) ERP-level classification, performed with a probabilistic Riemannian MDM,
(3) character-level classification, carried out with a Bayesian inference cumulating confidence after each trial.
The ASAP{} pipeline provides an anytime computation framework,
always yielding the best results in the sense of the maximum likelihood.
One major contribution of our approach is to use both target and non-target flashes to softly update the character classification,
while existing pipelines concentrate only on target flashes.
By avoiding this loss of information, each flash contributes to updating the confidence estimation of the characters,
leading to a faster P300 BCI.

In this article, Section~\ref{sec:sota} reviews the state-of-the-art P300 BCI~\cite{barachant2014plug} and its current limitations;
Section~\ref{sec:end2end} shows the derivation of the new end-to-end pipeline.
The new pipeline is applied on real P300-speller data, as described in Section~\ref{sec:appl_p300};
and comparative results with the state-of-the-art are given in Section~\ref{sec:res}, followed by a Discussion and Conclusion.

\section{Description of P300 BCI}
\label{sec:bci}

BCI rely either on the decoding of different mental tasks or on the reaction to an external stimulation.
The former are called independent BCI and the latter dependent BCI~\cite{WOL02}.
In dependent BCI, ERP are good candidates to design synchronous BCI systems.
While error-related potentials~\cite{chavarriaga_learning_2010}, N170 (movement or face detection) or N400 (face recognition) have been investigated, the most common ERP-based BCI rely on the P300 wave~\cite{Farwell1988}.
The P300 wave is an automatic response to an oddball stimulus, \textit{i.e.}, a stimulus which is both awaited and infrequent.
The P300 wave is the result of a combination of components~\cite{luck2014introduction},
the most prominent being a peak occurring 300 ms after the stimulus, as shown in Figure~\ref{fig:p300_wave}.

The most common applications of P300-based BCI are spellers~\cite{Farwell1988,Rivet2009,barachant2014plug}
and games~\cite{barachant2014plug,Goncharenko2020Raccoons}.
Such systems display characters (also called symbols or items) that are flashed with a fixed interstimulus interval (ISI).
To keep all characters within the visual field of the subject, they are displayed on a grid.
Different flashing strategies have been proposed, using either row-column flashing or pseudo-random flashing.
\hl{The flashing characters are usually presented briefly in inverted colors as shown on Figure~\ref{fig:p300_speller},
but it is possible to use different stimulus~\cite{jin2012changing}.}

A trial is an EEG epoch of fixed length (often 1 s) starting at the time of the flash.
When all the characters have been flashed once, the associated group of trials is called a repetition.
P300-based BCI discriminate $K=2$ ERP classes:
target trial (denoted by $k=\text{T}$) where the chosen character has been flashed, evoking a P300 wave;
and non-target trial (denoted $k=\text{NT}$) where the chosen character has not been flashed, resulting in an absence of a P300 wave.
It is a difficult task to detect a P300 at a trial level (called single-trial detection),
this is why the character classification is done after several repetitions to accumulate evidence and increase the accuracy.
After several repetitions, the classifier makes a prediction to select a character and is ready to start over for another character prediction.

For a more complete description of P300-based BCI, the reader can refer to~\cite{Rivet2009}.

\begin{figure}[t]
	\centering
	\pgfimage[width=0.8\linewidth]{screenshotp300_2}
	\caption{\hl{Virtual keyboard of a P300-speller using pseudo-random character flashes.}}
	\label{fig:p300_speller}
\end{figure}

\section{State of the art for P300 BCI classification}
\label{sec:sota}

This section describes the state of the art in P300-based BCI,
combining single-trial ERP classification achieved with Riemannian MDM~\cite{barachant2014plug}
and counting occurrences of detected characters to make a prediction~\cite{Farwell1988}.
This approach yields good accuracy with short calibration time~\cite{Lotte2018}.

\subsection{Riemannian MDM for ERP classification}
\label{ssec:sota_erp_classif}

Let denote by $X \in \mathbb{R}^{C \times N}$ a trial of EEG signals, recorded on $C$ channels (or electrodes) and on $N$ temporal samples.
This EEG signal has been previously band-pass filtered between 1 and 20 Hz.
Riemannian approaches are not applied on the signal itself, but on covariance matrices estimated from this signal.
Since the discriminant information is given by the temporal waveform of P300 rather than its spatial covariance,
an extended trial $\dot{X} \in \mathbb{R}^{2C \times N}$ is built as~\cite{barachant2014plug}:
\begin{equation}
	\label{eq:ext_epoch}
	\dot{X} = \begin{bmatrix} P \\ X \end{bmatrix} \ ,
\end{equation}
where $P \in \mathbb{R}^{C \times N}$ denotes the prototype response, estimated as the grand average of target response.
Then, the covariance matrix $\Sigma \in \mathbb{R}^{2C \times 2C}$ can be estimated as:
\begin{equation}
	\label{eq:cov}
	\Sigma = \frac{1}{N-1} \dot{X} \dot{X}^T \ .
\end{equation}
Covariance matrices are symmetric positive definite (SPD), \textit{i.e.},
they have strictly positive eigenvalues and are confined in a subspace of the Euclidean space \cite{congedo2017riemannian}.
Endowed with an appropriate distance, it is possible to define a dedicated geometry to consider those matrices,
called a Riemannian manifold $\Ma$~\cite{Congedo2013HDR,Yger2017}.
An appropriate distance could be the affine-invariant,
defined between matrices $\Sigma_1$ and $\Sigma_2$ as~\cite{moakher2005differential}:
\begin{equation}
	d(\Sigma_1,\Sigma_2) = \left( \sum_{c=1}^{2C} \log^{2} e_{c} \right)^{\frac{1}{2}} \ , \nonumber
\end{equation}
where $e_c$, $c = 1, \dots, 2C$, are the eigenvalues of $\Sigma_1^{-1} \Sigma_2$.

The Riemannian minimum-distance-to-mean (MDM) is a deterministic classifier introduced in \cite{Barachant2012}.
It is a generative classifier, requiring simply to estimate one mean $\bar{\Sigma}_k$ for each class $k = 1, \dots, K$
during the training step:
\begin{equation}
	\label{eq:mdm_train}
	\bar{\Sigma}_k = \arg \min_{\Sigma \in \Ma} \sum_{i \in \mathcal{I}(k)} d^2(\Sigma_i,\Sigma) \ , \nonumber
\end{equation}
where $\mathcal{I}(k)$ is the set of indices of training matrices belonging to class $k$.
This geometric mean has no closed-form solution and therefore has to be computed iteratively \cite{fletcher2004principal}.
Thus, for a single-trial classification, the trial covariance $\Sigma$ is assigned to the class with the closest mean:
\begin{equation}
	\label{eq:mdm_class}
	\hat{k} = \arg \min_{k=1 \ldots K} \ d(\Sigma, \bar{\Sigma}_k) \ .
\end{equation}

\subsection{Maximization of occurrences for character classification}
\label{ssec:sota_character_classif}

The historical character classification is a simple decision rule based on the maximization of occurrences of detected characters,
\textit{i.e.} characters flashed when a P300 has been detected in the trial.
The character classification is performed after $t$ trials \cite{Farwell1988}:
\begin{equation}
	\label{eq:multi_p300}
	\hat{l}_t = \arg \max_{l=1 \ldots L} \ \sum_{\tau=1}^{t} \delta_{\hat{k}_{l,\tau}}^\ensuremath{\text{T}} \ ,

 \end{equation}
where $\delta_{a}^b$ is the Kronecker delta which equals 1 when $a = b$, and $0$ otherwise;
and where $\hat{k}_{l,\tau}$ denotes the output class/label of a single-trial ERP classification when character $l$ has been flashed during trial $\tau$.
In the case of a Riemannian MDM, ERP classification is given by Eq.~\eqref{eq:mdm_class}.

Note that the classification score in the right side of Eq.~\eqref{eq:multi_p300}
can be easily transformed into a character probability in $[0,1]$,
dividing the sum by the number of trials.

\subsection{Limitations}
\label{ssec:sota_lim}

\begin{figure}[t]
	\begin{center}
		\resizebox{11cm}{!}{\input{Fig_Classif_DeterministicVsProbabilistic.pdf_t}}
	\end{center}
	\caption{Illustration of the classification of four trials in the space of SPD matrices,
	for two classes $\ensuremath{\text{NT}}$ and $\ensuremath{\text{T}}$ with their centers $\bar{\Sigma}_\ensuremath{\text{NT}}$ and $\bar{\Sigma}_\ensuremath{\text{T}}$,
	their equidistance represented by the dotted line.
	In this example, the target character has been flashed at trial $4$, and not flashed before.
	%
	At ERP classification,
	deterministic MDM sees no difference between trials $\Sigma_3$ and $\Sigma_4$ (same class),
	whereas probabilistic MDM does (same class but different probabilities);
	deterministic MDM sees a huge difference between trials $\Sigma_3$ and $\Sigma_1$ (different classes),
	whereas probabilistic MDM understands their similarity (different classes but close probabilities).
	%
	At character classification, the argmax-argmin classification updates its sum only during flashed trial $4$,
	whereas Bayesian accumulation updates its confidence after each trial.
	}
	\label{fig:determ_vs_proba}
\end{figure}

On the one hand, combining Eq.~\eqref{eq:mdm_class} and~\eqref{eq:multi_p300} gives an argmax-argmin character classification.
This approach is not optimal, as it loses information:
Riemannian distance to ERP-class centers yields a crucial information to quantify the confidence into the ERP classification.
This information is lost in the deterministic classification shown in Eq.~\eqref{eq:mdm_class}.
The confidence in ERP class could be transformed in a continuous probability,
allowing to softly consolidate character classification confidence along trials.
This is not possible in the argmax-argmin approach, where single-trial ERP classification error strongly impacts the character classification.
The need for a probabilistic MDM rather than a deterministic one is illustrated on Figure~\ref{fig:determ_vs_proba}.

On the other hand, for usual character classifier, the confidence in a character is increased
only when the character is flashed and a P300 is detected in the trial.
In the case of a Riemannian MDM used for ERP classification~\cite{barachant2014plug},
this occurs when the trial covariance matrix is close to the mean of the target class.
Indeed, it seems possible to increase the confidence for the target character when
the character is not flashed and the trial covariance matrix is close to the mean of non-target class.
This information is currently not captured by Eq.~\eqref{eq:multi_p300},
resulting in a loss of discriminative power since non-target flashes are more frequent than target ones.

\section{End-to-end P300 BCI classification}
\label{sec:end2end}

This section expounds the derivation of an end-to-end P300 BCI pipeline,
building on Bayesian accumulation to perform character classification.
The details of this derivation are indicated below,
providing all underlying assumptions required to obtain the final expression.

\subsection{Bayesian accumulation of character probabilities}
\label{ssec:end2end_bayesian}

In an online setup, after accumulating $\tau=1, \ldots, t$ trials of the same target character,
the cumulative posterior probability of character $l$ can be written as:
\begin{align}
	\label{eq:ct_proba}
	p(l & | X_1, \ldots, X_t) = \nonumber
	\\
	& \frac{ p(X_t | l, X_1, \ldots, X_{t-1}) \ p(l | X_1, \ldots, X_{t-1}) }{ p(X_t | X_1, \ldots, X_{t-1}) } \ ,
\end{align}
combining Bayes' rule with the chain rule of probability.
Since this expression is intractable, we make an approximation assuming that $X_t$ is independent from $X_1, \ldots, X_{t-1}$.
While this is true for $X_1$, it is only partially true for $X_{t-1}$, as it depends on the overlap between epochs $X_{t-1}$ and $X_t$).
Eq.~\eqref{eq:ct_proba} is simplified into:
\begin{equation}
	\label{eq:ct_prob_2}
	p(l | X_1, \ldots, X_t) = \frac{ p(X_t | l) \ p(l | X_1, \ldots, X_{t-1}) }{ p(X_t) } \ ,
\end{equation}
and, if $p(l | X_1, \ldots, X_t)$ is renamed $p_t(l)$, it becomes:
\begin{equation}
	\label{eq:ct_prob_3}
	p_t(l) = \frac{ p(X_t | l) \ p_{t-1}(l) }{ p(X_t) } \ ,
\end{equation}
where $p_{t-1}(l)$ can be seen as the prior from previous trials.
It is dynamically updated, as the previous posterior becomes the following prior.
Using the law of total probability, the denominator is expanded as:
\begin{equation}
	\label{eq:ct_prob_4}
	p_t(l) = \frac{ p(X_t | l) \ p_{t-1}(l) }{ \sum_{\lambda=1}^{L} p(X_t|\lambda) \ p_{t-1}(\lambda) } \ .
\end{equation}
Since $p_{t-1}(l)$ is a fraction depending of $p_{t-2}(l)$, and $p_{t-2}(l)$ a fraction depending of $p_{t-3}(l)$, etc.,
this formula can be expanded in a finite continued fraction until $p_{0}(l)$,
which can be finally simplified into:
\begin{equation}
	\label{eq:ct_char_proba}
	p_t(l) =
	\frac{ \prod_{\tau=1}^{t} \ p(X_\tau | l) \ p_0(l) }{ \sum_{\lambda=1}^{L} \prod_{\tau=1}^{t} \ p(X_\tau | \lambda) \ p_0(\lambda) } \ .
\end{equation}
where $p_0(l)$ is the initial prior on character $l$.

\subsection{Bayesian accumulation of ERP probabilities}

Reverting the marginalization of the ERP class $k$ out of the likelihood, we have:
\begin{align}
	p(X_\tau | l) &= \sum_{k=1}^{K} \ p(X_\tau , k | l) \nonumber
	\\
	&= \sum_{k=1}^{K} p(X_\tau | k, l) \ p(k | l) \nonumber
	\\
	\label{eq:ct_char_lik}
	&= \sum_{k=1}^{K} p(X_\tau | k) \ p(k | l) \ ,
\end{align}
because epoch $X_\tau$ depends only on ERP class $k$, not on character $l$.
Considering a P300 BCI with $K=2$ ERP classes, $k=\text{T}$ for target and $k=\text{NT}$ for non-target,
Eq.~\eqref{eq:ct_char_lik} becomes:
\begin{equation}
	\label{eq:ct_p300_lik}
	p(X_\tau | l) = p(X_\tau | \ensuremath{\text{T}}) \ p(\ensuremath{\text{T}} | l) + p(X_\tau | \ensuremath{\text{NT}}) \ p(\ensuremath{\text{NT}} | l) \ ,
\end{equation}
where $p(\ensuremath{\text{T}} | l) = 1$ (\textit{resp.} $0$) and $p(\ensuremath{\text{NT}} | l) = 0$ (\textit{resp.} $1$)
when the character $l$ has been flashed (\textit{resp.} not flashed) at trial $\tau$.
This deterministic binarization justifies the equivalence between ``target character flashed'' and ``presence of ERP in trial''.

Finally, Eq.~\eqref{eq:ct_char_proba} becomes:
\begin{align}
	\label{eq:ct_char_proba2}
	& p_t(l) =
	\\
	& \frac{ \prod_{\tau=1}^{t} \ \left( p(X_\tau | \ensuremath{\text{T}}) \ p(\ensuremath{\text{T}} | l) + p(X_\tau | \ensuremath{\text{NT}}) \ p(\ensuremath{\text{NT}} | l) \right) \ p_0(l) }{ \sum_{\lambda=1}^{L} \prod_{\tau=1}^{t} \ \left( p(X_\tau | \ensuremath{\text{T}}) \ p(\ensuremath{\text{T}} | \lambda) + p(X_\tau | \ensuremath{\text{NT}}) \ p(\ensuremath{\text{NT}} | \lambda) \right) \ p_0(\lambda) } \ . \nonumber
\end{align}
This formula allows a seamless classification for P300 BCI from EEG epochs to characters,
without requiring an explicit ERP-level classification.
It is valid for any type of probabilistic and generative ERP classifier returning $p(X_\tau | k)$,
and thus could be used tomorrow with deep neural networks \cite{Roy2019}.

\begin{table*}[t]
  \centering
  \begin{tabular}{|l|c|c|c|c|c|}
    \hline
    Name & \# Channels & \# Subjects & \# Characters per subject & \# Trials per character (T / NT) & Reference
		\rule[-7pt]{0pt}{20pt} \\ \hline \hline
    BNCI 2014-008 & 8 & 8 & 35 & 20 / 100 & \cite{riccio2013attention}
		\rule[-7pt]{0pt}{20pt} \\ \hline
    BNCI 2014-009 & 16 & 10 & 18 & 16 / 80 & \cite{aloise_covert_2012}
		\rule[-7pt]{0pt}{20pt} \\ \hline
  \end{tabular}
  \caption{Details of datasets used for evaluation of P300-speller.}
  \label{tab:datasets}
\end{table*}

\subsection{Bayesian accumulation of Riemannian probabilities}
\label{ssec:end2end_riemannian}

Since Riemannian classifiers obtain best results for ERP classification~\cite{barachant2014plug,Lotte2018},
we derive a probabilistic version of Riemannian MDM, called pMDM.
Assuming that epoch $X$ follows a multivariate normal model $\mathcal{N}(0,\Sigma)$,
with zero mean (EEG signals are centered after a band-pass filtering) and with a covariance matrix $\Sigma \in \Ma$,
we define $p(X | k) = p(\Sigma | k)$.

To represent covariance matrices belonging to a Riemannian space, the Riemannian Gaussian distribution can be used to model each class.
Its probability density function is defined as~\cite{Said2017}:
\begin{equation}
	\label{eq:riem_gauss}
	p(\Sigma | k) = p(\Sigma | \bar{\Sigma}_k,\sigma_k) = \frac{1}{\zeta(\sigma_k)} \exp \left(- \frac{d^2(\Sigma,\bar{\Sigma}_k)}{2 \sigma^2_k} \right) \ ,
\end{equation}
where $\bar{\Sigma}_k \in \Ma$ is the center of the Riemannian Gaussian distribution of class $k$,
$\sigma_k>0$ encodes the dispersion of the distribution, and $\zeta(\sigma_k)$ is a normalization factor.
Under the assumption that all classes have identical dispersion $\sigma_k$, the Riemannian instantiation of Eq.~\eqref{eq:ct_char_proba2} is:
\begin{equation}
	\label{eq:ct_p300_proba_2}
	p_t(l) =
	\frac{ \prod_{\tau=1}^{t} \ e^{- d^2(\Sigma_\tau, \tilde{\Sigma}_{l,\tau})} \ p_0(l) }{ \sum_{\lambda=1}^{L} \prod_{\tau=1}^{t} \ e^{- d^2(\Sigma_\tau, \tilde{\Sigma}_{\lambda,\tau})} \ p_0(\lambda) } \ ,
\end{equation}
where $\tilde{\Sigma}_{l,\tau} = \bar{\Sigma}_{\ensuremath{\text{T}}}$ if character $l$ has been flashed during trial $\tau$, and
$\tilde{\Sigma}_{l,\tau} = \bar{\Sigma}_{\ensuremath{\text{NT}}}$ otherwise.

After trial $t$, the character classification is obtained thanks to the maximum \textit{a posteriori} (MAP),
\textit{i.e.} maximizing the posterior probability $p(l | X_1, \ldots, X_t)$.
The MAP classification rule is:
\begin{align}
	\label{eq:ct_p300_map}
	\hat{l}_t & = \arg \max_{l=1 \ldots L} \ p_t(l) \nonumber
	\\
	& = \arg \max_{l=1 \ldots L} \ \prod_{\tau=1}^{t} \ e^{- d^2(\Sigma_\tau, \tilde{\Sigma}_{l,\tau})} \ p_0(l) \ ,
\end{align}
because the denominator is independent from $l$.
Priors $p_0(l)$ can easily be used to embed letter and word prediction in BCI \cite{Kaufmann2012}.
Under the assumption of equally likely classes, \textit{i.e.} equal priors $p_0(l)$, it becomes a maximum likelihood (ML) classification rule:
\begin{equation}
	\label{eq:ct_p300_ml}
	\hat{l}_t = \arg \min_{l=1 \ldots L} \ \sum_{\tau=1}^{t} \ d^2(\Sigma_\tau, \tilde{\Sigma}_{l,\tau}) \ .
\end{equation}

Contrary to the argmax-argmin approach, this end-to-end derivation leads to a single argmin approach for the ML rule,
which is a seamless processing of information from EEG epochs to BCI characters.
It prevents loss of information because all characters softly update their confidence on both target and non-target flashes,
contributing to increasing the confidence of the target character.

\begin{figure*}[t!]
	\begin{center}
		\pgfimage[width=0.95\linewidth]{figarticle_proba_individual_trial_13_subj2}
	\end{center}
	\caption{Character probabilities $p_t(l)$ as a function of flash $t$, for only one character classification,
	for the target character in red and the non-target characters in blue.
	Left: ASAP{}, softly updated after each flash. Right: MDM+OM{}, hardly updated only on target flashes.
	}
	\label{fig:proba}
\end{figure*}

\begin{figure*}[tbh]
	\begin{center}
		\pgfimage[width=0.95\linewidth]{figarticle_proba_repetition_all_trials_alldataset}
	\end{center}
	\caption{Character probabilities as a function of repetition,
	for MDM+OM{} and ASAP{}, averaged across all character classifications of each dataset.
	}
	\label{fig:proba_average}
\end{figure*}

\subsection{Contributions summary}

This B\underline{a}ye\underline{s}ian \underline{a}ccumulation of Riemannian \underline{p}robabilities is called ASAP.
This online algorithm must be re-initialized at the beginning of each new character classification,
and it can be stopped with any dynamic stopping strategy \cite{Schreuder2013,Kindermans2014}.

ASAP{} is an end-to-end P300 BCI, with a classification scheme occurring at character-level,
which is the actual end of ERP-based BCI.
Most of the existing approaches are assessed at ERP-level,
\textit{e.g.} as detailed in~\cite{barachant2014plug,korczowski2015single,congedo2017riemannian}.
While these are useful for signal processing and classification,
they do not encompass the character classification which was regarded as an engineering issue.
We demonstrate in this article that a principled and theoretical approach is possible,
and that combining Riemannian geometry and Bayesian inference allow us to devise a character classification pipeline,
integrating ERP probabilization (instead of binarization) in the process.

Note that taking into account non-target flashes has already been considered for P300 classification
with a Bayesian framework~\cite{Dauce2014}, but for a discriminative classifier.
This kind of classifier provides $p(k|X_t)$ instead of $p(X_t|k)$ for generative ones~\cite{Ng2002},
and requires a large training set to avoid overfitting, \emph{e.g.} 264,000 trials are used in~\cite{Dauce2014}),
which prevents reproducibility, scalability and out-of-the-lab deployment.

\begin{figure*}[tbh]
	\begin{center}
		\pgfimage[width=0.95\linewidth]{figarticle_acc_repetition_all_subj}
	\end{center}
	\caption{\hl{Character classification accuracy as a function of repetition, for ASAP{}, MDM+OM{}, xDAWN+OM{} and RegLDA+OM{},
	averaged across all character classifications of both datasets.}
	}
	\label{fig:accuracy}
\end{figure*}

\section{Application to P300-speller}
\label{sec:appl_p300}

The introduced pipeline can be applied to all ERP-based BCI.
As validation, it is applied here on the P300-speller task described in Section~\ref{ssec:sota_character_classif}.
While most works evaluate their performances at ERP-level \cite{barachant2014plug,korczowski2015single,congedo2017riemannian},
we evaluate them at character-level, which is the actual end of the BCI pipeline.

\subsection{Data}

EEG data come from 2 datasets containing 18 subjects and gathering 50,880 trials.
The important information of the datasets is provided in Table~\ref{tab:datasets}.

\subsubsection{BNCI 2014-008 dataset}

This EEG dataset is publicly available~\cite{riccio2013attention} and gathers the recordings of 8 patients
with amyotrophic lateral sclerosis visually focusing on a $6 \time 6$-letter matrix.
The data are recorded with a $C=8$ channels amplifier (g.MOBILAB, g.tec, Austria)
using active electrodes (g.Ladybird, g.tec, Austria)
that are located at Fz, Cz, Pz, Oz, P3, P4, PO7 and PO8.
Reference is the right ear lobe and the ground is taken from the left mastoid.
The signal is acquired at 256 Hz.
The speller randomly highlights the lines and columns from the letter matrix for 125 ms
followed by 125 ms of ISI, resulting in a stimulus onset asynchrony of 250 ms.

\subsubsection{BNCI 2014-009 dataset}

This EEG dataset is publicly available~\cite{aloise_covert_2012} and gathers the recordings of 10 healthy subjects
visually focusing on a $6 \time 6$-letter matrix.
The data are recorded with a $C=16$ electrodes that are located at
Fz, FCz, Cz, CPz, Pz, Oz, F3, F4, C3, C4, CP3, CP4, P3, P4, PO7, and PO8.
Each electrode is referenced to the linked earlobes and the ground is taken from the right mastoid.
The EEG was acquired at 256 Hz.

\subsection{Methods}

\hl{Raw EEG signals are band-pass filtered between 1 to 20 Hz.
Trials are extracted as EEG epochs of fixed length (1 s) starting at the time of flashes.}

\hl{Four single-trial character-level classifiers for P300 BCI are compared in this article:}
\begin{itemize}
\item \hl{ASAP with equal priors, \textit{i.e.} the ML version in Eq.~\eqref{eq:ct_p300_ml},
which is the novel Bayesian accumulation (BA) of probabilistic Riemannian MDM, a kind of pMDM+BA pipeline;}
\item \hl{MDM+OM{}: Riemannian MDM \cite{barachant2014plug}, see Eq.~\eqref{eq:mdm_class},
followed by occurrences maximizing (OM), see Eq.~\eqref{eq:multi_p300},
which is the state of the art described in Section~\ref{sec:sota};}
\item \hl{xDAWN+OM{}: downsampling at 128 Hz, followed by xDAWN \cite{Rivet2009}, regularized LDA on vectorized data, and OM;}
\item \hl{RegLDA+OM{}: downsampling at 128 Hz, followed by regularized LDA on vectorized data \cite{Krusienski2006,Blankertz2011}, and OM.}
\end{itemize}

\subsection{Evaluation}

The current experiment is a within-session classification of P300-speller characters,
comparing evolution of performances (probabilities, accuracy and BCI ITR \cite{Yuan2013})
along time (flash and repetition).
For each session of each subject,
the training set contains the trials associated to the first 6 characters
(to calibrate the $K=2$ class centers $\bar{\Sigma}_{\ensuremath{\text{T}}}$ and $\bar{\Sigma}_{\ensuremath{\text{NT}}}$ for MDM+OM{} and ASAP{}),
and the test set contains remaining trials.

The code of the experiment relies on the rich ecosystem of open source libraries available for
BCI datasets, EEG signal processing and machine learning, that is
Timeflux~\cite{timeflux_2019}, MOABB~\cite{Jayaram2018}, MNE~\cite{gramfort_mne_2014},
scikit-learn~\cite{scikit-learn} and pyRiemann~\cite{pyriemann}.

\hl{For research reproducibility, code of offline experiments is available at \url{https://github.com/sylvchev/asap-p300-bci}.
Open-source implementation of ASAP{} is available as an online Timeflux \cite{timeflux_2019} application:
\url{https://github.com/timeflux/demos/tree/main/speller/P300}.
This free and open framework allows to evaluate the proposed implementation in a real online setup.}

\section{Results}
\label{sec:res}

Figure~\ref{fig:proba} displays the character probabilities $p_t(l)$ as a function of flash $t$,
for only one character classification.
The target character is in red and non-target characters are in blue.
On the right side, we observe that, for MDM+OM{}, only probabilities of flashed characters are updated,
and that probabilities of non-target characters increase with time.
In this example, the classification will be incorrect because target character does not have the highest probability.
On the left part, we can see that all probabilities of ASAP{} are updated after each flash:
it softly consolidates confidence across target flashes, but also non-target ones, which are much more frequent.
We also see that probabilities of non-target characters decrease over time
and actually contribute to increasing confidence in the target character.
Dependence between character probabilities comes the denominator of Eq.~\eqref{eq:ct_p300_proba_2}.

Character probabilities are averaged across all character classifications of each dataset.
Figure~\ref{fig:proba_average} shows the character probabilities as a function of repetition,
with the average and its confidence interval at 95 \%.
For MDM+OM{}, the averaging has smoothed the steps visible on the right part of Figure~\ref{fig:proba}.
This figure confirms that ASAP{} increases probabilities of target characters faster than MDM+OM{},
and that ASAP{} decreases probabilities of non-target characters contrary to MDM+OM{}.
Combining these two properties provides a faster and larger divergence between probabilities of target and non-target characters.

Figure~\ref{fig:accuracy} displays the accuracy of character classification performed after each repetition,
averaged across all character classifications of each dataset.
We can see that trends observed in probabilities have a strong impact on classification accuracy.
Divergences between probabilities allow for a better discrimination between target and non-target characters.
The first dataset (left side) is more challenging than the second one (right side) where subjects had previous experience with P300-based BCI,
\hl{but ASAP{} is always better and faster than MDM+OM{}, xDAWN+OM{} and RegLDA+OM{}.
For a fixed number of repetitions, ASAP{} gives a better classification than all other methods;
and for a fixed level of confidence ASAP{} allows for a faster classification than all other methods.}

Figure~\ref{fig:itr} displays the BCI ITR in bits/min computed after each repetition,
averaged across all character classifications of each dataset.
For each dataset, methods reach their optimal peak of BCI ITR for the same number of repetitions.
\hl{We can see that differences previously observed in accuracy have an obvious impact on BCI ITR:
ASAP{} is always higher than MDM+OM{}, xDAWN+OM{} and RegLDA+OM{}, giving better performance of communication.}

\hl{One the one hand, the RegLDA+OM{} and xDAWN+OM{} methods use the same classifier, a regularized LDA.
It is applied on downsampled trials for RegLDA+OM{}, and on downsampled and spatially filtered trials for xDAWN+OM{}.
Results show that xDAWN spatial filter, applying a supervised dimension reduction, enhances most of the time classification performances.}
On the other hand, MDM+OM{} and ASAP{} methods use
the same features (covariance matrices $\Sigma$),
the same training models (covariance centers $\bar{\Sigma}_{\ensuremath{\text{T}}}$ and $\bar{\Sigma}_{\ensuremath{\text{NT}}}$),
and the same dissimilarity measure between features (Riemannian distance).
Thus, all observed differences come only from the way to exploit information,
from the distance between covariance matrices to character classes.
While MDM+OM{} suffers of all limitations described in Section~\ref{ssec:sota_lim}, like the argmax-argmin character classification,
ASAP{} consolidates character confidences using probabilities which are softly accumulated after each trial,
that is illustrated on the left side of Figure~\ref{fig:proba}.

\hl{To conclude these experiments performed on real data,
we have shown that ASAP{} outperforms MDM+OM{}, xDAWN+OM{} and RegLDA+OM{}, providing a better and faster P300 BCI.}
It reduces the number of repetitions necessary for the correct classification of characters.
\hl{Numerical values of figures can be found in Appendix.}

\begin{figure*}[t]
	\begin{center}
		\pgfimage[width=0.95\linewidth]{figarticle_itr_repetition_allsubj}
	\end{center}
	\caption{\hl{BCI ITR (in bits/min) as a function of repetition, for ASAP{}, MDM+OM{}, xDAWN+OM{} and RegLDA+OM{},
	averaged across all character classifications of each dataset.}
	}
	\label{fig:itr}
\end{figure*}

\section{Discussion}
\label{sec:dis}

By updating confidence on non-target flashes too,
this approach aims to exploit all information available in EEG trials.
There are several advantages, as it reduces the time required to spell a letter,
it preserves the concentration of the subject by avoiding the tiredness of seeing multiple flashes,
and it avoids wasting data, as the storage of EEG can be optimized.
In experiments, we have compared evolution of performances along time.
We have not used dynamic stopping ~\cite{Schreuder2013,Kindermans2014},
because compared methods are independent of it.
Adding this step will be done in a future work.

\hl{Note that Eq.~\eqref{eq:ct_char_proba} has been derived for any type of online classification.
So it could be applied to other BCI paradigms, especially asynchronous BCI making the assumption
of temporal persistence in the class across several epochs,
like asynchronous SSVEP \cite{Kalunga2016}, motor imagery \cite{Barachant2013} or neurofeedback \cite{Arns2017}.
More generally, the Bayesian scheme derived in Section~\ref{ssec:end2end_bayesian} makes no assumption
on the type of input data $X$ and is independent from the two-level classification specific to P300 BCI.
Consequently, it remains valid for any type of sequential data.
Derived in this article for multivariate biological time series, it could be applied to other data
such as audio stream \cite{Sen2019},
video stream \cite{Wang2002},
\textit{etc}.

Underlying assumptions of the derivation of Section~\ref{sec:end2end} have been explicitly listed, in order to be reconsidered in future works.
Notably, the deterministic binarization performed after Eq.~\eqref{eq:ct_p300_lik} does not take into account that
a lack of concentration of the subject can prevent ERP to be elicited, damaging BCI performances.
A new generation of algorithms should be able to break this simple deterministic link between flash and ERP,
and to model uncertainty thanks to continuous probabilities for $p(\ensuremath{\text{T}} | l)$ and $p(\ensuremath{\text{NT}} | l)$,
which could be defined monitoring concentration level in real-time.}

\section{Conclusion}

Using a Bayesian accumulation of Riemannian probabilities, this article introduces an end-to-end P300 BCI,
providing a seamless processing of information from EEG epochs to BCI characters.
The derivation of this end-to-end pipeline details all underlying assumptions required to obtain the final formula,
for further potential generalizations.
Validated on real EEG data, this new P300 BCI is better and faster than the state-of-the-art,
reducing the number of repetitions necessary for the correct classification of characters.

Future works are to combine this new approach with the following features:
online adaptation of centers of class~\cite{barachant2014plug};
cross-subject transfer learning of centers of class~\cite{Kalunga2018,Zanini2018,Rodrigues2019};
dynamic stopping for early classification~\cite{Schreuder2013,Kindermans2014};
and letter or word prediction, embedded in BCI thanks to character-dependent priors $p_0(l)$, to boost BCI performances~\cite{Kaufmann2012}.

\section{Disclosure of interest}

The authors report there are no competing interests to declare.
This work was not supported by any grant nor funding and QB/RBL/PC have conducted this research during their spare time.

\appendices

redpajama_set_name: RedPajamaArXiv


Today, 30504 yen on Amazon Japan.
Willing to sell my Korra nendo (packaged like new and in perfect condition, only displayed once) for $75 USD + shipping.
DM if you are interested!
is anyone selling the korra nendoroid? please message me or dm me on twitter @whereisuki im willing to buy her asap!
Looking to buy new in box. PM if you're interested.
Willing to sell her (new and sealed) for 85 USD + Registered Mail/EMS Shipping. Paypal only. PM me if you interested.
Looking to purchase. Prefer a sealed one but opened is alright. Message me with details.
RustyWinnebago (8 kuukautta sitten) #38571511Hello MFC, I have a few pieces to sell including this one. She is brand new and authentic; asking 50 usd plus cost of shipping.


text:
Q: How to manage overlapping bar and drawer in React Native Navigation I have five screens in a material bottom tab navigator. On one of the screens, I want to use a drawer for some settings. In the other screens there are currently no drawers planned, however if they come, they will have different content from this current one.
I want the drawer to be displayed above the bottom navigation bar. However I don't want to solve it by wrapping the whole material bottom tab navigator in a drawer navigator, as this would not make much sense and also provide the same drawer in all of the screens.
Is there another way of making the drawer appear on top of the bottom navigation bar? Ideally, the solution would not include react-navigation for the drawer at all, as I don't use it for navigation.

A: The answer appears to be to use a Modal, which can server as a popup. https://reactnative.dev/docs/modal for the documentation.


text:
Kentucky Supreme Court rules that the state's Marsy's Law (2018) constitutional amendment is invalid
By Ryan Byrne
In Ballot measures
On June 12, 2019, the Kentucky Supreme Court ruled that the description presented to voters for Marsy's Law, which was on the ballot in 2018, violated the state constitution. Legislators wrote the description, which said: "Are you in favor of providing constitutional rights to victims of crime, including the right to be treated fairly, with dignity and respect, and the right to be informed and to have a voice in the judicial process?" On November 6, 62.8 percent of electors voted for the constitutional amendment. The state Supreme Court's ruling means that Marsy's Law, a type of constitutional amendment addressing the rights of crime victims, cannot be added to the Kentucky Constitution.
Chief Justice John D. Minton, Jr. wrote the court's unanimous opinion. He said that "Section 256 of the Kentucky Constitution requires the General Assembly to submit the full text of a proposed constitutional amendment to the electorate for a vote." The full text of Marsy's Law was 555 words long—517 words longer than the description that legislators wrote for the ballot.
The state Supreme Court's ruling affirms a lower court's ruling from October 2018, which prohibited the state from certifying election results for Marsy's Law. Awaiting an order from the state Supreme Court, the outcome of Marsy's Law was uncertain for 218 days.
Marsy's Law for Kentucky, which registered as a political issues committee to support Marsy's Law, responded to the ruling, stating, "We look forward to working with the General Assembly again to put Marsy's Law back on the ballot for Kentucky voters in 2020 in a form that will pass legal muster as defined by the court." Sen. Whitney Westerfield (R-3), chairperson of the Senate Judiciary Committee, also said that he would like the legislature to present the amendment to voters again in 2020. He also criticized the court's ruling, saying, "It is troubling that in order to reach this conclusion the Supreme Court reversed years of established precedent and inserted an entirely new requirement for amending our state constitution."
The Kentucky Association of Criminal Defense Lawyers (KACFL) filed the lawsuit to invalidate Marsy's Law on August 13, 2018. David Ward, who was the KACFL's president in 2018, said, "Voters have a right to know what they are voting on and the legislature failed to tell them."
Marsy's Law describes a set of constitutional protections for crime victims that have been adopted in 11 states, excluding Kentucky. In Montana, which approved Marsy's Law in 2016, a court struck down the constitutional amendment as violating the state's separate-vote requirement for initiated amendments. Henry Nicholas, co-founder of Broadcom Corporation, started the organization that backs Marsy's Law. In Kentucky, Nicholas provided over $5 million to support the campaign.
Marsy's Law will appear on the ballot in Wisconsin in 2020. The Pennsylvania State Legislature is also considering placing Marsy's Law on the ballot in 2019. As of June 2019, voters have never rejected a Marsy's Law ballot measure.
https://ballotpedia.org/Marsy%27s_Law_crime_victim_rights
https://ballotpedia.org/Kentucky_Supreme_Court
https://ballotpedia.org/List_of_ballot_measure_lawsuits_in_2018
Ryan Byrne
Ryan Byrne is a staff writer at Ballotpedia and can be reached at ryan.byrne@ballotpedia.org