Temple of Fine Arts
Home
Courses
(current)
Dance
Barathanatyam
Odissi
Contemporary
Music
Hindustani Vocal
Carnatic Vocal
Hindustani Violin
Carnatic Violin
Carnatic Keyboard
Western Keyboard
Western Guitar
Veena
Sitar
Flute
Services
Gallery
About
Contact


Fintech platform that helps traders to make a decision from signals. Integrated trading chart, chatting channel, payment gateway.
Check it outIt provides range of Health Med and Health Tech Solutions to global healthcare clients. Integrated Stripe
Check it out


FINAL DESTINATION
Review by John Beachem
* * * *
Directed by: James Wong Written by: Jeffrey Reddick (story), Glen Morgan
Is it possible to cheat death, or can it only be delayed a little longer? This is the primary question posed in "Final Destination", a remarkably interesting film which could easily have been nothing more than another teen-slasher movie. I'm not entirely sure just what I found so captivating about this film; it may have been the performances from the talented young cast, or the intelligent discussions about the nature of fate. I suppose it could have been nothing more than morbid curiosity about how each person was going to die. It may have been the consistently creepy atmosphere created by James Wong (The X-Files television series), which is further enhanced by a similarly creepy score from composer, Shirley Walker ("Mystery Men").
Alex Browning (Devon Sawa) is about to go on a class trip to France with four teachers and forty other students. After a shaky start on the day, filled with bizarre images and strange gut feelings, he finally boards the plane. While awaiting departure, Alex has a sudden vision of the plane exploding in mid-air and all of the passengers being killed. After screaming about the plane being destroyed, he is ejected from the plane along with five other students and one teacher. The aircraft wastes no time in fulfilling Alex's vision, and the seven survivors slowly move on with their lives, dealing with their unexpected luck in different ways. However, as the creepy mortician Bludworth (Tony Todd) points out, in death there are no accidents, no coincidences, and no escapes. As the survivors are slowly picked off, Alex must determine when death is going to try for him again.
James Wong's film is loaded with atmosphere; I suppose due to his work on The X-Files. The death scenes are mostly done in a very stylish manner with Walker's score playing hauntingly in the background, while we watch death creep up on the unsuspecting victims. Alex's visions are interestingly done as well. They never actually show him the deaths (except the plane crash vision), he must determine how the things he sees might cause a death.  One death scene occured so suddenly that the audience and I didn't even have a chance to jump in surprise. Everyone simply stared at the screen in shock, for several seconds, before exploding into cheers and applause for how well the surprise was accomplished.
"Final Destination" features quite a talented cast. Devon Sawa ("Idle Hands") is a very talented, young actor who I could see breaking into some great roles. Ali Larter ("House on Haunted Hill"), who plays the strangely named Clear Rivers, is excellent as the only person who believes Alex was responsible for saving her life. The remaining young actors (Chad Donella, Seann William Scott, Amanda Detmer) are uniformly good, each playing a very different character. Tony Todd ("Candyman", "The Rock") may appear in only one scene, but the man is so excellent at causing chills to run down your spine just listening to him, that any appearance at all is welcome. The only weak link is Daniel Roebuck ("US Marshalls") as FBI Agent Wiene. I don't actually think this is due to Roebuck himself, as he is not an untalented actor, but the character served no purpose.
Another thing I must compliment Wong about was the way in which he was able to keep the film from falling into any typical teen-slasher movie patterns. On nearly every occasion that the movie begins to show signs of becoming cliche ridden, Wong reins it in nicely. The only exceptions are a long, drawn out chase scene near the end and one somewhat predictable death scene. "Final Destination" runs an admirable 100 minutes, though a little trimming couldn't have hurt. I give it a full recommendation for some great acting, an intriguing premise, and some thought provoking dialogue. I also admit to having a weakness for atmospheric movies, and this one is steeped in it. I give "Final Destination" a well earned four out of five stars.
Comments? Feel free to e-mail them to<EMAIL_ADDRESS>For past reviews, movie news, and other fun stuff, visit: http://www.dependentfilms.net
* * * * * - One of the greatest movies ever made, see it now. * * * * - Great flick, try and catch this one. * * * - Okay movie, hits and misses. * * - Pretty bad, see it only if you have nothing better to do. * - One of the worst movies ever made. See it only if you enjoy pain.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


HABAKKUK
1
1 The oracle that Habakkuk the prophet saw.
Habakkuk's Complaint
2 O LORD, how long shall I cry for help,
and you will not hear?

Destruction and violence are before me;
strife and contention arise.
4 So the law is paralyzed,
and justice never goes forth.
For the wicked surround the righteous;
so justice goes forth perverted.
The LORD's Answer
5 “Look among the nations, and see;
wonder and be astounded.
For I am doing a work in your days
that you would not believe if told.
6 For behold, I am raising up the Chaldeans,
that bitter and hasty nation,
who march through the breadth of the earth,
to seize dwellings not their own.
7 They are dreaded and fearsome;
their justice and dignity go forth from themselves.
8 Their horses are swifter than leopards,
more fierce than the evening wolves;
their horsemen press proudly on.
Their horsemen come from afar;
they fly like an eagle swift to devour.
9 They all come for violence,
all their faces forward.
They gather captives like sand.
10 At kings they scoff,
and at rulers they laugh.

Habakkuk's Second Complaint
12 Are you not from everlasting,
O LORD my God, my Holy One?
We shall not die.


The key idea motivating DeclareDesign is that the core analytic features of research designs can be declared in a complete manner and saved as an object. A properly declared design can then easily be shared, modified, improved, and used. The design contains the information needed to implement key parts of data generation and to implement analysis. It also contains enough information to allow researchers or third parties to query it to see whether it can deliver on its promises. We describe this framework in greater detail in our paper.
A research design characterized in words or in code should include four components:
A model, M, of how the world works. The model specifies the moving parts — the variables — and how these are causally related to each other. In this sense the model provides the context of a study, but also a speculation about the world.
An inquiry, I, about the distribution of variables, perhaps given interventions on some variables. In many applications I might be thought of as the “estimand.” Some inquiries are statements about the values of variables, others about the causal relations between variables. In all cases however the inquiry should be answerable given the model.
A data strategy, D, generates data on variables. Note that implicitly the data strategy includes case selection, or sampling decisions, but it also represents interventions such as assignment of treatments or measurement strategies. A model M tells you what sort of data you might observe if you employ data strategy D.
An answer strategy, A, that uses data to generate an answer.
Here is an illustration using a very simple two arm trial.
# M -- Model: Speculation on variables and relations between them
population <- declare_population(N = 100, u = rnorm(N))
potential_outcomes <- declare_potential_outcomes(Y_Z_0 = u,
Y_Z_1 = u + 1)
# I -- Inquiry: A query defined in terms of potential outcomes
estimand <- declare_estimand(ATE = mean(Y_Z_1 - Y_Z_0))
# D -- Data Strategy: Researcher interventions on the world
assignment <- declare_assignment(m = 50)
# A -- Answer Strategy: Conclusions to be drawn from data
estimator <- declare_estimator(Y ~ Z, estimand = estimand)
# Design: Putting it all together
design <- declare_design(population,
potential_outcomes,
estimand,
assignment,
reveal_outcomes,
estimator,
description = "A very simple design")
Use the design object to simulate data, including treatment assignments:
data <- draw_data(design)
| ID | u | Y_Z_0 | Y_Z_1 | Z | Z_cond_prob | Y |
|---|---|---|---|---|---|---|
| 001 | 1.37 | 1.37 | 2.37 | 1 | 0.5 | 2.37 |
| 002 | -0.56 | -0.56 | 0.44 | 1 | 0.5 | 0.44 |
| 003 | 0.36 | 0.36 | 1.36 | 1 | 0.5 | 1.36 |
| 004 | 0.63 | 0.63 | 1.63 | 0 | 0.5 | 0.63 |
| 005 | 0.40 | 0.40 | 1.40 | 0 | 0.5 | 0.40 |
| 006 | -0.11 | -0.11 | 0.89 | 1 | 0.5 | 0.89 |
Use the design object to implement analysis:
estimates <- get_estimates(design)
| estimator_label | coefficient_name | est | se | p | ci_lower | ci_upper | estimand_label |
|---|---|---|---|---|---|---|---|
| my_estimator | Z | 0.94 | 0.19 | 0 | 0.57 | 1.3 | ATE |
The fully declared design contains the information needed to diagnose it.
diagnosis <- diagnose_design(design, sims = 10000, bootstrap_sims = 500)
| Bias | RMSE | Power | Coverage | Mean Estimand | Mean Estimate | SD Estimate | Type S-Rate | |
|---|---|---|---|---|---|---|---|---|
| Diagnosand | 0 | 0.2 | 1 | 0.95 | 1 | 1 | 0.2 | 0 |
| Boostrapped SE | 0 | 0.0 | 0 | 0.00 | 0 | 0 | 0.0 | 0 |
The diagnosis here confirms the fact that random assignment to treatment allows for unbiased estimates of treatment effects. More surprisingly perhaps, the diagnosis reveals that the statistical inferences are wrong: the 95% confidence intervals do not have 95% coverage, reflecting the fact that standard approaches (such as regression based approaches) for calculating standard errors for the sample average treatment effect are overly conservative.


Tutorial : Post Effect Toggle
Objects: VPostEffectToggleTrack, VPostEffectToggleEvent
A Post Effect Toggle track must be added to a Camera Group and will allow you to enable or disable a Post Effect.
How to Use:
To toggle a Post Effect, you must first create a valid Camera Group.If you are unsure of how to create or validate a Group, click here.
Right-Click on the Group, go to "Add Track" and select "Add Post Effect Track".
Right-Click on the Track and select "Add Event".
Select the newly created Event. The Property List window will refresh and inspect the Event. Update the "Action" property to determine whether to turn the referenced object ON or OFF once the Event is triggered.


Berliner Andreas Falge was one of the first to cross the East German border into the West on the night of November 9, 1989
by Yannick PASQUET1 / 4Berliner Andreas Falge was one of the first to cross the East German border into the West on the night of November 9, 1989 (AFP Photo/John MACDOUGALL)
Berlin (AFP) - "Suddenly they opened the gate!" recalled Berliner Andreas Falge, one of the first to cross the East German border into the West on November 9, 1989.
Still in wonder 30 years after the epochal event, Falge told AFP: "Everyone started running! And so did I."
A smile on his face, the 61-year-old is back on Berlin's Bornholmer Strasse, once a sealed border point in the long-impenetrable Iron Curtain, recalling that "incredible night".
When the Berlin Wall cracked open here after 28 years, Falge was part of the roaring, jubilant crowd of East Berliners who were first to head west.
The masses were shouting "Open the gate! Open the gate!" said Falge, a technician at East Berlin's storied Babylon cinema at the time.
The roadblocks of the Cold War era have long since disappeared, and a discount supermarket and train station now dominate the nearby square, renamed November 9, 1989 Square.
"I came here, to the end of this bridge," said Falge, now with salt and pepper hair, revisiting the scene with AFP.
"There was a human tide moving and people said: 'Did you hear the news? Did you hear the news?'"
- 'Guards didn't know' -
The news was the announcement, made by a confused communist state official at a press conference, that East Germans would be allowed to travel to the west "immediately".
That bumbling performance was broadcast on West German TV, which many easterners watched clandestinely, and it kicked off a human avalanche.
Falge said he stared at the TV, then jumped up, pulled on his leather jacket and grabbed 100 West German Deutschmarks and a map of West Berlin.
"I had no idea if the border was already open or not," he said, "but screw it, let's go!"
Soon he stood with hundreds of others at the border crossing, facing nervous East German border guards who had also been utterly surprised by the dramatic turn of events.
"I was thinking, 'My God, if things turn sour! ... I was watching out in case one of them pulled a gun."
"You could see that the border guards didn't know what to do... Everyone was shouting 'Open the gate!'"
- 'Bright shining lights' -
All were stunned when the guards finally relented around 11:30 pm, allowing pedestrians and honking Trabant cars.
Being one of the first to cross, Falge was afraid he would not be able to come back in and so he followed regular procedures by going to the guards for his passport to be stamped.
Eventually, the flow of people became so large that they stopped checking papers altogether.
"I went there, right across the street, you know?" said Falge, pointing at the western Wedding district.
Soon he saw police officers whose uniforms were a "weird brown and spinach green. That's when I realised: I'm in the goddamn West!"
He walked into a neighbourhood pub shrouded in cigarette smoke.
"I opened the door and said to myself, 'Great, this is the West and its bright shining lights,'" he laughs.
In an era long before smartphones, the regulars were oblivious to the historic event playing out just a few hundred metres away.
- Sleepless night -
Although he'd never considered fleeing the GDR, cinema and music fan Falge had a few friends in West Berlin, and now was the time for a surprise visit.
He telephoned one of them, Wolfgang, who had in the past been able to visit him in the East.
"He tells me he's happy I'm calling him. I told him: 'stop talking and come and pick me up instead'."
After a silence, Wolfgang said: "Pick you up? But where are you?"
When Falge explained he was in Wedding, his friend couldn't believe it.
"Well, yes, they just opened the Wall," he said.
"And then I hear on the other end of the line: 'Holy crap'."
He ended up taking a taxi to Wolfgang's and on the way he remembered thinking the West did not look so different to his side of the city -- except for the "neon-lit shops" and their eye-watering prices.
A long and sleepless night in Wolfgang's apartment followed, where his friend's two roommates Claudia and Michael were stunned to find him "sitting on the couch, a Beck's beer in hand".
The next day, he went back to work in East Berlin, but the cinema was almost empty.
"So we closed the Babylon," he smiles. "And we went to celebrate the fall of the Wall."


A long time open-source programmer, Gabriele is an active member of the international PostgreSQL community. Gabriele has a degree in Statistics and is an expert on data warehousing and data mining, having worked on web traffic analysis in Australia and Italy. Gabriele is a consultant with 2ndQuadrant.
An overview of data warehousing with PostgreSQL, covering native enterprise-class characteristics and features, logical/physical design techniques, extensibility, some optimisation tips and current limitations.
Based on over 5+ years experience with terabyte-class issues, I explain how features such as table partitioning, tablespaces, views, schemas, stored procedures, windowing functions, etc. make PostgreSQL an ideal candidate for a database management system in a data warehouse environment.
Furthermore, PostgreSQL's compliance to standards as well as its capability of perfectly integrating into a business information system allow it to easily interface with the most common tools for ETL, data integration, data mining and business intelligence.


Evaluate TIPS patency and flow.
None.
Liver morphology:
Ascites: None Trace Mild Moderate Severe . unchanged new increased decreased
Main portal vein:
Left portal vein:
Hepatic artery:
Hepatic veins:
Main portal vein: cm/s
TIPS portal-vein end: cm/s
Mid-TIPS: cm/s
TIPS hepatic-vein end: cm/s
Spleen length: cm.
Splenic vein:
Patent TIPS. No evidence of stenosis.


--- layout: page title: "JavaScript Object Notation (JSON) Text Sequences" description: "This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type \"application/json-seq\". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A)." ---
| Document Name: | RFC 7464 |
|---|---|
| Document URI: |
urn:ietf:rfc:7464
|
| Online Version: |
https://datatracker.ietf.org/doc/html/rfc7464
|
| Organization: | Internet Engineering Task Force (IETF) |
| Series: | Request for Comments (RFC) |
| Abstract: | This document describes the JavaScript Object Notation (JSON) text sequence format and associated media type "application/json-seq". A JSON text sequence consists of any number of JSON texts, all encoded in UTF-8, each prefixed by an ASCII Record Separator (0x1E), and each ending with an ASCII Line Feed character (0x0A). |
application/json-seq
Return to ( Series | Organization | all Specifications )


THE AVENGERS (Warner Brothers) The ill-advised decision by Warner Brothers not to screen "The Avengers" for critics prior to its release has led to rampant speculation on exactly how bad the $80 million film must be. At the same time, the numerous clips from the movie in the HBO "First Look: The Avengers" special that's been airing for the past couple of weeks make the picture appear pretty intriguing, and the allure of Ralph Fiennes in a Saville Row wardrobe and Uma Thurman poured into a leather catsuit is pretty potent in and of itself. So what's the verdict? Well, suffice to say there have certainly been much worse films screened this week: "The Avengers" is certainly easier to sit through than "Air Bud 2: Golden Receiver." Early reports hinting that WB cut out crucial scenes in a last-ditch effort to make this wildly offbeat spectacle palatable to the masses appear to be true -- the film plays like some sort of feverish hallucination with no real logic or continuity. A mess "The Avengers" may be, but it's infinitely more interesting and imaginative than such numbing crowdpleasers as "Armageddon" and "Lethal Weapon 4." Don Macpherson's screenplay emphasizes style over story to such a point that you'll be hard-pressed at the end of the movie to recall exactly how it all began. Still there are some mighty amusing moments along the way, including a wonderful sequence set in a maze of marble halls and stairways, a chase scene involving a fleet of robotic killer bees, the gorgeously dark image of Fiennes and Thurman moving serenely across a river inside giant plastic bubbles, and your only chance this week to see Thurman attacked by a giant teddy bear. The chemistry between Fiennes (as the relentlessly dapper secret agent John Steed) and Thurman (as both Dr. Emma Peel and her malevolent, silent clone) never quite reaches the boiling point, although the pair seem to enjoy bouncing Macpherson's quirky dialogue off of each other and both stars look simply smashing throughout. As Sir August DeWynter, the villain of the piece, Sean Connery fares somewhat less well. Not only does he have very little to do -- his role appears to have been truncated somewhere along the line -- but he seems uncertain of exactly how to play the few scenes he's in. It looks like Connery was on his way to camp it up like a "Batman" baddie and director Jeremiah Chechik toned him down. Better to have allowed the actor to follow his instincts; if anyone should be given leeway to go over the top, it's someone portraying a madman plotting to blackmail the nations of the world with a weather-controlling device. Aside from its defiantly oddball sets, characters and situations, "The Avengers" sets itself apart from the summer-blockbuster herd by striving for an intentionally artificial look that calls to mind the cheapish TV show. For example, the special effects make no attempt to convince you that that's really a twister in the middle of the Thames River or that the sudden blizzard enveloping London actually came from the sky. Instead these visuals simply say, "Of course this is fakery, just like everything else you're looking at," and it's hard not to be charmed on a certain level. "The Avengers" is flawed on any number of levels and will almost certainly prove to be a box-office disaster, but if approached with an open mind and suspended disbelief it has its share of small delights. James Sanford
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


{% extends 'emails/base.html' %} {% block content %}
There are {{ clubs|length }} clubs that you have subscribed to with an application deadline in 3 days.
This is an automated message. If you would not like to receive these notifications, unsubscribe from the clubs that you no longer wish to hear updates from.
{% endblock %}


Let's Play!
Enter a number and click submit to see your results.
- Numbers divisible by 3 will show as "ping"
- Numbers divisible by 5 will show as "pong"
- Numbers divisible by 3 AND 5 will show as "ping-pong"
Enter a number and click submit to see your results.


Whilst studying with DEV on the 5 week foundations course, there are quite a few techniques I have learned that will help me get the most out of my study.
Journaling and reflecting on my experiences, will help me to learn the material by truly understanding it. Keeping in mind that my brain is changeable, and not running away when I feel it is too hard, I can’t do it, and it hurts. I need to remember that my brain hurting is the feeling of growth and learning.
Practice, practice, practice! Forming strong neuropathways between cells from plenty of practice and making connections between new material and pre-existing knowledge, will help our brains grow. I will be using the pomodoro technique to break all my timeboxes into chunks and ensure that my attention is optimized.
Setting myself goals and challenges each day and questioning the outcome, and adjusting my approach the following day accordingly. I will be studying in my office, which is a separate room in the house, that is tidy, free for distraction and comfortable. The library will be my back up study space, in the case that there are inevitable distractions on a particular day, or I just want a change of scenery.
I don’t otherwise have any other commitments during the day. The step kids are all old enough to look after themselves, and are very respectful and supportive of my new venture, so do not disturb me during study hours (other than the obvious queries etc). If I hit a problem, I will first attempt to figure it out myself (Google!!), if after a reasonable amount of time has past and I still am not getting it, I will then reach out to my peers, or a facilitator for help.
I’m not entirely sure how it will all go in Bootcamp, but I will ensure that when working in a group and with facilitators, to participate fully. When I say I will do something in a specific timeframe, or be somewhere at a specific time then I will do so, and if not possible then I will ensure that I communicate that clearly in order for us to re-plan. My expectations of the facilitators is to be there to check in to make sure all is ticking along ok. I see them as there to help if stuck with Tech issues, by perhaps asking questions about what the issue is, and what we may have tried already. Also as we go through moments of doubt or frustration, to be able to help us re-ground our selves and re-focus our thoughts.
Bootcamp is starting soon.... I will be taking the train every morning to get into Wellington, which will take 45-60 mins each way. This will be the perfect time to get my plans for the day in order, check and update my calender, and do my journalling. I'm not entirely sure what will be involved in Bootcamp but I have been told that there will be alot of work needing to be done outside of the campus, so almost an hour a day either end of being at the campus is a great start. I will follow my foundations scheduele while I am at home in the weekends, so roughly dedicating 8-10 hours a day to Dev, and sticking to my pomodoro technique as this is definatly working best for me.
This is going to change as I get into the flow of how bootcamp works, but this is a start plan based on what I know currently.
There has been a bit of change in my time managment. As I am commuting, I do find that this has been a little more disruptive then I expected. Utilizing this time has been a bit of a challenge.
In the evenings when I get home, I attempt to go through some of the content in the days challenges, and I am about to intergrate 10mins of touch typing lessons in there aswell. I have installed a video downloader onto my laptop, I download our lectures and any other video content that I think will be helpful, so I can then watch it on the train on the way in if the train isn't too cramped, and on the way home.
When I get in in the morning, I am usually one of the first in, and that gives me plenty of time to look over what we are going to be learning for the day and time to grab a cup of tea and do journalling.
On the weekends I go through any content that I am particularly shaky on, write a list, timebox each thing and pomodoro through it all, now that personal projects have come into it I try and spend a bit of time on that aswell if possible. One of the last things I do on a Sunday, is plan out the week coming. So in google calenders I space my day out and basically go through the student handbook and copy and paste in all the lessons and activities into each day, and any special events and changes I highlight.
With my personal project I am sticking to the planning stage for the time being. First off I don't want to get too much set up that I will have to or want to change after we have covered the react content.
 I decided it was time to make a conscious exercise plan around my study. I have started running and cycling every second day in the mornings just after my first coffee. In my breaks I have/will be doing a variety of workouts, for example I do some weights, or planking, or sit ups. I try and get outside for one of my longer breaks too, which helps with movement, change of scenery, and just simply sanity.
I have also started to deliberately practice mindfulness, and I meditate each evening before bed when I can. I keep my water bottle with me in the office, generally this is something that I have always attempted to get into the habit of for many years, but finally I feel like I’m remembering (it’s become habitual).
I generally eat well, however I have made up a list of foods that will help to increase my brain function, each food is in a category based on the specific nutrient provided (all beneficial to the brain in different ways). So when I make my meal I ensure that it contains at least one food item from each category. I also practice Intermittent fasting. This is where I do not eat at all for 14-16 hours a day. Reducing my intake to a 8-10 hour window. What this is thought to do is increase the rate of neurogenesis (creation of new brain cells), and boosts the production of BDNF. BDNF has been shown to play a role in neuroplasticity, which allows the brain to continue to change and adapt. It makes your brain more resilient to stress and more adaptable to change. I also try and learn about various other topics, through the means of ted talks and podcasts, just to keep the scenery fresh, but the mind still working. Plus I feel as though whatever the topic it is somehow connected to all others (it’s all relevant).


Penzaar
Products
About
Contact
Log In
Register
9+
Log In
No account? Sign up here.
Email Address
Password


Draw line on Canvas
Draw circle on Canvas
Draw text on Canvas
Hide animation
Show animation
Toggle animation


pingouin.compute_effsize¶
-
pingouin.
compute_effsize
(x, y, paired=False, eftype='cohen')¶ Calculate effect size between two set of observations.
- Parameters
- xnp.array or list
First set of observations.
- ynp.array or list
Second set of observations.
- pairedboolean
If True, uses Cohen d-avg formula to correct for repeated measurements (see Notes).
- eftypestring
Desired output effect size. Available methods are:
'none'
: no effect size'cohen'
: Unbiased Cohen d'hedges'
: Hedges g'r'
: correlation coefficient'eta-square'
: Eta-square'odds-ratio'
: Odds ratio'AUC'
: Area Under the Curve'CLES'
: Common Language Effect Size
- Returns
- effloat
Effect size
See also
convert_effsize
Conversion between effect sizes.
compute_effsize_from_t
Convert a T-statistic to an effect size.
Notes
Missing values are automatically removed from the data. If
x
andy
are paired, the entire row is removed.If
x
andy
are independent, the Cohen \(d\) is:\[d = \frac{\overline{X} - \overline{Y}} {\sqrt{\frac{(n_{1} - 1)\sigma_{1}^{2} + (n_{2} - 1) \sigma_{2}^{2}}{n1 + n2 - 2}}}\]If
x
andy
are paired, the Cohen \(d_{avg}\) is computed:\[d_{avg} = \frac{\overline{X} - \overline{Y}} {\sqrt{\frac{(\sigma_1^2 + \sigma_2^2)}{2}}}\]The Cohen’s d is a biased estimate of the population effect size, especially for small samples (n < 20). It is often preferable to use the corrected Hedges \(g\) instead:
\[g = d \times (1 - \frac{3}{4(n_1 + n_2) - 9})\]The common language effect size is the proportion of pairs where
x
is higher thany
(calculated with a brute-force approach where each observation ofx
is paired to each observation ofy
, seepingouin.wilcoxon()
for more details):\[\text{CL} = P(X > Y) + .5 \times P(X = Y)\]For other effect sizes, Pingouin will first calculate a Cohen \(d\) and then use the
pingouin.convert_effsize()
to convert to the desired effect size.References
Lakens, D., 2013. Calculating and reporting effect sizes to facilitate cumulative science: a practical primer for t-tests and ANOVAs. Front. Psychol. 4, 863. https://doi.org/10.3389/fpsyg.2013.00863
Cumming, Geoff. Understanding the new statistics: Effect sizes, confidence intervals, and meta-analysis. Routledge, 2013.
Examples
Cohen d from two independent samples.
>>> import numpy as np >>> import pingouin as pg >>> x = [1, 2, 3, 4] >>> y = [3, 4, 5, 6, 7] >>> pg.compute_effsize(x, y, paired=False, eftype='cohen') -1.707825127659933
The sign of the Cohen d will be opposite if we reverse the order of
x
andy
:>>> pg.compute_effsize(y, x, paired=False, eftype='cohen') 1.707825127659933
Hedges g from two paired samples.
>>> x = [1, 2, 3, 4, 5, 6, 7] >>> y = [1, 3, 5, 7, 9, 11, 13] >>> pg.compute_effsize(x, y, paired=True, eftype='hedges') -0.8222477210374874
Common Language Effect Size.
>>> pg.compute_effsize(x, y, eftype='cles') 0.2857142857142857
In other words, there are ~29% of pairs where
x
is higher thany
, which means that there are ~71% of pairs wherex
is lower thany
. This can be easily verified by changing the order ofx
andy
:>>> pg.compute_effsize(y, x, eftype='cles') 0.7142857142857143


Graph Fundamentals — Part 1: RDF
This is a 5 part warts-and-all introduction to graph technologies. It covers RDF, Property Graphs, Graph Schemas, Linked Data, and concludes with an article called Why Graph Will Win. It should give you a solid introduction to the world of graph and associated challenges, while also offering a firm view that graph is the correct way to approach these complex problems. Enjoy!
Graph databases are on the rise, but amid all the hype it can be hard to understand the differences under the hood. This is the first article in a four part series describing the fundamental technologies that graph databases use under the hood. Unlike most articles that you will come across, this is neither marketing nor is it a tutorial — it’s a warts and all description of their strengths and weaknesses — stuff I have learned over 20 years of pain and suffering, in the hope that I can help somebody else out there to avoid having to learn these lessons the hard way.
There are two major variants of graph databases in the wild — RDF graphs (aka triple-stores) and Labelled Property Graphs. In this, the first article in the series, I’ll describe RDF (Resource Description Framework), its strengths and weaknesses and where it came from. In subsequent articles, I’ll describe labelled property graphs and some of the the standards and technologies that have been built on top of them.
RDF is a child of the web, formulated back in the 1990s, by Tim Bray at Netscape as a meta-data schema for describing things. The basic idea is simple, RDF files consist of a set of logical assertions of the form subject, predicate, object — known as a triple:
subject -> predicate -> object
Each triple expresses a specific fact about a subject:
mary -> likes -> john
mary -> is -> human
john -> likes -> jane
jane -> likes -> chocolate
When joined together a set of triples forms a graph consisting of nodes and edges — it really is as simple as that.
Triples can be combined to represent a knowledge graph which computers can interpret and reason about. When joined together, they form a natural graph, where the predicates (the middle part of the triple) are interpreted as edges and the subjects and objects are the nodes.
So far so good. In fact, triples are the ideal atom of information — 3 degrees of freedom in our basic atomic expressions is sufficient for a self-describing system, 3 has the highest information density of any integer. We can build up a set of triples that describes anything describable. Binary relations, on the other hand, which are the basis of tables and traditional databases, can never be self-describing: they will always need some logic external to the system to interpret them — 2 degrees of freedom is insufficient.
The triple as logical assertion is also a tremendously good idea — one consequence is that we don’t have to care about duplicate triples — if we tell the computer that Mary likes John a million times, it is the same as telling it once — a true fact is no more nor less true if we say it 1000 times or 1 time.
But RDF defined a lot more than just the basic idea of subject-predicate-object logical assertion triples. It also defined a naming convention where both the subject and predicate of each triple had to be expressed as a URL. The object of each triple could either be expressed as a URL or as a literal such as a number “6” or string “hat”. So our triples need to be of the form:
http://my.url/john -> http://my.url/likes -> http://my.url/jane
The basic idea being that if we load the URL of any subject, predicate or object, we will find the definition of the node or edge in question at that URL. So, if we load http://my.url/likes into our browser, we find the definition of the likes predicate. This design decision has both costs and benefits.
The cost is immediate — URLs are much longer than the variable names used in programming language and they are hard to remember. This slows down programming as we can’t just use simple strings as usual, we have to refer to thing by their full URL. RDF tried to mitigate this cost by introducing the idea of namespace prefixes. That is to say, we can define: prefix ex = http://my.url/ and then we can refer to john as ex:john rather than the full URL http://my.url/john.
From a programming point of view, these namespace prefixes certainly make it much easier to use RDF, but there is still considerable cost over traditional simple variable names — we have to remember which prefixes are available, which entities and predicates belong to which namespace, and type several extra characters for every variable.
Programming is an art form in which productivity is dependent on reducing the number of things that we have to remember at each step, because we are concentrating on a big picture problem and need to focus all our concentration there rather than on the details of the lines of code. Speed of typing is also of paramount importance because we are almost always in a hurry and the faster we go, the less chance there is that we will forget something important along the way. From that point of view, using URLs as variable names, even with prefixes, is a massive cost to programming speed.
The benefits, on the other hand, are seen in the medium and long term. There is an old computer science joke:
there are only 2 hard things in computer science: naming things, cache coherence and off-by-one errors.
This is a good joke because it is true — naming things and cache coherence really are the hardest things to get right — while off-by-one errors are just extremely common errors that novices make in loop control.
RDF helps significantly to address both of the hard problems — by forcing coders to think about how they name things and by using an identifier that is uniformly and universally addressable, the problem of namespace clashes (people using the same name to talk about different thing) is greatly reduced. What’s more, by linking an entity to its definition, it also greatly helps the cache coherence problem — everything has an authoritative address at which the latest definition is available.
From an overall systems perspective, the extra programmer pain is tremendously worth it — if we know how something is named, we can always look it up and see what it is. By contrast, when we are dealing with traditional databases, the names used have no meaning outside the context of the local database — tables, rows and columns all have simple variable names which mean nothing except within the particular database in which they live, and there is no way of looking up the meaning of these tables and columns because it is opaque — embedded in external program code.
So, up to this point, it’s all positive — the use of logical subject-predicate-object triples as URL -> URL -> URL is actually a very good starting point for building data-structures. They allow us to describe anything we want in a way that is universally and uniformly named, addressable, retrievable and self-describing. The extra pain in having to use URLs instead of simple variable names is, in the long run, very much worth it.
RDF, however, is much more than just the basic triple form. It also defines a set of reusable predicates. The most important one of these is rdf:type — which allows us to define our entities as having a particular type:
ex:mary -> rdf:type -> ex:human
This triple defines john as being of type ‘human’. This provides us with the basis for constructing a formal logic in which we can reason about the properties of things based on their types — if we know john is a human and not, for example, a rock, we can probably infer things about him without knowing them directly.
Formal logics are very powerful indeed because they can be interpreted by computers to provide us with a number of useful services — logical consistency, constraint checking, theorem proving, and so on. And they help tremendously in the battle against complexity — the computer can tell us when we are wrong.
The Problem With RDF
Unfortunately, however, that is where the good stuff ends. Almost every other design decision that went into the RDF specification was disastrously wrong.
The first point is rather minor — RDF supports ‘blank nodes’, that is to say nodes that are not identified by a URL but instead by a local identifier (given a pseudo prefix like “_:name”). This is supposed to represent the situation where we want to say “some entity whose name I do not know” — to capture for example assertions such as “there is a man in the car”. As we don’t know the identity of the man, we use a blank node rather than a URL to represent him.
This was simply a mistake — it confuses the identity of the real world thing with the identity of the data structure that represents it. It introduces an element into the data structure that is not universally addressable and thus cannot be linked to outside its definition for no good reason. Just because we don’t know the identify of the thing, does not and should not mean we cannot address the structure describing the unknown thing.
What’s worse, RDF tools generally interpret blank nodes in such a way that their identifiers can be changed at will, meaning that it is hard to mitigate the problem in practice. Still, tool stupidity notwithstanding, such a poor design choice can be mitigated at the cost of some effort — for example by using a convention whereby blank nodes within a document can be addressed as a sub-path of the URL of the document that contains them. This at least allows them to be accessed through the same mechanism as all other nodes are.
The second major design flaw relates to the semantics that were published to govern the interpretation of triples and their types. To cut a long and technical story short, what they defined was — in a technical sense — nonsense. Logic, in a formal sense, is like probability: seemingly simple to the uninitiated but in fact horrendously difficult and full of counter-intuitive results and many traps for the naïve.
It is very easy to construct a logical system that is incoherent or inconsistent — where the rules tell us that a given fact is both true and false. The most famous example is known as Russell’s paradox — the set of all sets that do not contain themselves — a paradoxical definition since this set must both contain itself and not contain itself. The basic rule of a logic is that if it is legal to express such paradoxes, then the logic is inconsistent — we can’t rely on assertions defined in the logic.
RDF included explicit support for making statements about statements — what they called higher order statements — without putting in place any rules that prevented the construction of inconsistent knowledge bases. To put it simply, these semantics were completely wrong (or impredicative). In fact, RDF also included a broad suite of containers, distributive predicates and various other elements — in each case they were similarly wrong.
In 1999, RDF 1.0 was made a standard by the web’s governing body, the W3C, and was enthusiastically promoted as the core of the future semantic web, despite the fact that it effectively described a nonsense system. How did this happen?
“ The web is the domain of engineers, not logicians. With the rise of the commercial software industry in the 1970s and 1980s, computer science based on formal logic was largely abandoned. Instead we got software engineering, based on turning programmers into money in as short a space of time as possible.”
To tell the truth, this wasn’t surprising — the web is the domain of engineers, not logicians. With the rise of the commercial software industry in the 1980s, computer science based on formal logic was largely abandoned. Instead we got software engineering, based on turning programmers into money in as short a space of time as possible.
Almost nobody in the IT industry understands anything about formal computational logic nowadays save a few eccentric researchers labouring away in their labs on obscure topics completely ignored by industry. As a result, when it comes to things such as schema languages, constraint logics and so on, the industry’s most distinguished bodies repeatedly publish international standards that are just nonsense.
In any case, the logical inconsistency of the RDF standard was only a minor factor in its failure to gain widespread adoption. A much worse mistake concerned the serialisation format that was chosen to express RDF textually: RDF/XML. Back in 1999, XML was relatively new and fashionable, so it was a natural choice, but the way in which RDF had to be shoehorned into XML created a horrifically confusing and ugly monster. In modern RDF circles, a format known as turtle is used to serialise triples as text. It is reasonably simple to interpret and concise to construct:
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix ex: <http://my.url/>.
ex:mary a ex:human;
ex:likes ex:john.
In RDF/XML this is constructed as follows:
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://my.url/">
<rdf:Description rdf:about=”ex:mary”>
<rdf:type rdf:resource="ex:human"/>
<ex:likes rdf:resource=”ex:john”/>
</rdf:Desciption>
</rdf:RDF>
Back in 1999 when the RDF and RDF/XML standards were published, the social web was just taking off and a simple technology called RSS (really simple syndication) was at its core. RSS 0.91 was a very simple and popular meta-data format which allowed bloggers to easily share their updates with third party sites, enabling people to see when their favourite site had published updates, so that they didn’t have to check manually.
Probably the greatest mistake ever made by the W3C was imposing RDF/XML as the new standard for RSS — RSS 1.0. There was a very quick revolution of bloggers who found the new standard vastly increased the complexity of sharing updates, without giving anything extra in return. Bloggers generally stuck to the old non-RDF 0.91 version — the ideological wars that this created effectively turned the world of web-developers against RDF — a blow that RDF and the W3C have never really recovered from.
Conclusion: There Is Hope
Despite the terrible mistakes made in the definition of the RDF specification, at its very core, RDF remains by far and away the most advanced and sophisticated mechanism available for describing things in a computer interpretable way. And the standard did not remain static — the W3C issued a series of new standards that refined and extended the original RDF and built several other standards on top of it.
The second part of this series on graph fundamentals covers Labelled Property Graphs, the second major variant of graph databases today, while the third part covers graph schema languages with particular focus on OWL, the most ambitious attempt yet to provide us with a language for talking about data.
Computer Scientist, Cliodynamicist and all round Data Obsessive - CEO of Data Chemist Ltd


Student at Pamantasan ng Lungsod ng Maynila
Bachelor of Science in Computer Studies major in Computer Science
Email<EMAIL_ADDRESS>Contact #:<PHONE_NUMBER>2


Agility Redefined: PUMA & Thierry Henry Unveil The Future Flash Football Boot
by SL SocialSportswear company PUMA has re-engineered its innovative line of FUTURE football boots with the FUTURE Flash. Combining dynamic movement and flexible comfort, the FUTURE Flash allows for maximum mobility for the modern player.
Crafted with input from PUMA ambassador Thierry Henry, the FUTURE Flash is designed for matches that move faster than ever. Defenders are more intelligent, athletic and resolute, requiring forwards to adapt quickly or fall behind. The result is a new breed of players who make better use of space, attack from new angles and break apart the competition. PUMA's FUTURE Flash is created with their needs in mind.
Taking cues from the on-field brilliance of Antoine Griezmann, Luis Suarez, Marco Reus and Dzsenifer Marozsan, the FUTURE Flash reacts to the movement of the foot. It contains an adaptable NETFIT support in a fully knitted upper for added fit and stability.
Key strike zones of the boot are moulded with an enhanced GripControl Pro layer, improving ball control in the key impact zones. Rounding out the design is the super lightweight RAPIDAGILITY outsole that combines conical and bladed studs to aid traction in all conditions, supporting explosive multidirectional movement.
Scroll through the gallery above to see PUMA's FUTURE Flash!
Ready for the new FUTURE? Catch the FUTURE Flash, available from 2 December, at PUMA Stores, Totalsports, Sportsmans Warehouse and selected retailers for R3 299.
What do you think of PUMA's FUTURE Flash boots?


Nivens
Home
Rabbits
New Rabbit
Home
Click one of the buttons above to view your rabbits or add a new one.
Rabbits
ID:
Name:
Sex:
Birth Date:
Parents:
&
Notes:
New Rabbit
ID:
Name:
Sex:
Birth Date:
Parent Doe:
Parent Buck:
Notes:


Importing data into MNE¶
This guide describes how to import data into MNE. It includes instructions for importing from files generated by common MEG/EEG recording equipment, as well as importing raw data from NumPy arrays.
Contents
Cheatsheet¶
The cheatsheet below summarizes the supported file formats.
Datatype |
File format |
Extension |
MNE-Python function |
|---|---|---|---|
MEG |
Elekta Neuromag |
.fif |
|
MEG |
4-D Neuroimaging / BTI |
dir |
|
MEG |
CTF |
dir |
|
MEG |
KIT |
sqd |
|
EEG |
Brainvision |
.vhdr |
|
EEG |
Neuroscan CNT |
.cnt |
|
EEG |
European data format |
.edf |
|
EEG |
Biosemi data format |
.bdf |
|
EEG |
General data format |
.gdf |
|
EEG |
EGI simple binary |
.egi |
|
EEG |
EGI MFF format |
.mff |
|
EEG |
EEGLAB |
.set |
|
EEG |
eXimia |
.nxe |
|
Electrode locations |
elc, txt, csd, sfp, htps |
Misc |
|
Electrode locations |
EEGLAB loc, locs, eloc |
Misc |
|
MEG and EEG |
FieldTrip raw/epochs/avg |
.mat |
|
MEG and EEG |
arbitrary data (from memory) |
xxxx |
|
Importing data from MEG devices¶
This section describes the data reading and conversion utilities included with MNE.
Note
All IO functions in MNE-Python performing reading/conversion of MEG and
EEG data can be found in mne.io
and start with read_raw_. All
supported data formats can be read in MNE-Python directly without first
saving it to fif.
Note
Irrespective of the units used in your manufacturer’s format, MNE-Python will always use the units listed below and perform conversions during the IO procedure if necessary.
V: eeg, eog, seeg, emg, ecg, bio, ecog
T: mag
T/m: grad
M: hbo, hbr
Am: dipole
AU: misc
Note
MNE-Python performs all computations in memory using the double-precision 64-bit floating point format. This means that the data is cast into the float64 format as soon as it is read into memory. The reason for this is that operations such as filtering, preprocessing, etc. are more accurate when using double precision. However, for backward compatibility, MNE writes fif files in a 32-bit format by default. This is advantageous when saving data to disk as it consumes less space.
However, if you save intermediate results to disk, you should be aware that this may lead to loss in precision. The reason is that writing to disk is 32-bit by default, and type-casting to 64-bit does not recover the lost precision. If you would like to retain the 64-bit accuracy, there are two possibilities:
Chain the operations in memory and do not save intermediate results
Save intermediate results, but change the
dtype
used for saving. However, this may render the files unreadable in other software packages.
Elekta NeuroMag (.fif)¶
Neuromag Raw FIF files can be loaded using mne.io.read_raw_fif()
.
Note
If the data were recorded with MaxShield on and have not been processed
with MaxFilter, they may need to be loaded with
mne.io.read_raw_fif(..., allow_maxshield=True)
.
Importing 4-D Neuroimaging / BTI data¶
MNE-Python provides mne.io.read_raw_bti()
to read and convert 4D / BTI data.
This reader function will by default replace the original channel names,
typically composed of the letter A and the channel number with Neuromag.
To import the data, the following input files are mandatory:
A data file (typically c,rfDC) containing the recorded MEG time series.
A hs_file containing the digitizer data.
A config file containing acquisition information and metadata.
By default mne.io.read_raw_bti()
assumes that these three files are located
in the same folder.
Note
While reading the reference or compensation channels,
the compensation weights are currently not processed.
As a result, the mne.io.Raw
object and the corresponding fif
file does not include information about the compensation channels
and the weights to be applied to realize software gradient
compensation. To augment the Magnes fif files with the necessary
information, the command line tools include the utilities
mne_create_comp_data and mne_add_to_meas_info.
Including the compensation channel data is recommended but not
mandatory. If the data are saved in the Magnes system are already
compensated, there will be a small error in the forward calculations,
whose significance has not been evaluated carefully at this time.
Creating software gradient compensation data¶
The utility mne_create_comp_data was written to create software gradient compensation weight data for 4D Magnes fif files. This utility takes a text file containing the compensation data as input and writes the corresponding fif file as output. This file can be merged into the fif file containing 4D Magnes data with the utility mne_add_to_meas_info. See mne_create_comp_data for command-line options.
Importing CTF data¶
The function mne.io.read_raw_ctf()
can be used to read CTF data.
Importing CTF Polhemus data¶
The CTF MEG systems store the Polhemus digitization data in text files. The utility mne_ctf_dig2fiff was created to convert these data files into the fif and hpts formats.
Applying software gradient compensation¶
Since the software gradient compensation employed in CTF systems is a reversible operation, it is possible to change the compensation status of CTF data in the data files as desired. This section contains information about the technical details of the compensation procedure and a description of mne_compensate_data , which is a utility to change the software gradient compensation state in evoked-response data files.
The fif files containing CTF data converted using the utility mne_ctf2fiff contain several compensation matrices which are employed to suppress external disturbances with help of the reference channel data. The reference sensors are located further away from the brain than the helmet sensors and are thus measuring mainly the external disturbances rather than magnetic fields originating in the brain. Most often, a compensation matrix corresponding to a scheme nicknamed Third-order gradient compensation is employed.
Let us assume that the data contain \(n_1\) MEG sensor channels, \(n_2\) reference sensor channels, and \(n_3\) other channels. The data from all channels can be concatenated into a single vector
where \(x_1\), \(x_2\), and \(x_3\) are the data vectors corresponding to the MEG sensor channels, reference sensor channels, and other channels, respectively. The data before and after compensation, denoted here by \(x_{(0)}\) and \(x_{(k)}\), respectively, are related by
where the composite compensation matrix is
In the above, \(C_{(k)}\) is a \(n_1\) by \(n_2\) compensation data matrix corresponding to compensation “grade” \(k\). It is easy to see that
To convert from compensation grade \(k\) to \(p\) one can simply multiply the inverse of one compensate compensation matrix by another and apply the product to the data:
This operation is performed by mne.io.Raw.apply_gradient_compensation()
.
Importing KIT MEG system data¶
MNE-Python includes the mne.io.read_raw_kit()
and
mne.read_epochs_kit()
to read and convert KIT MEG data.
This reader function will by default replace the original channel names,
which typically with index starting with zero, with ones with an index starting with one.
To import continuous data, only the input .sqd or .con file is needed. For epochs, an Nx3 matrix containing the event number/corresponding trigger value in the third column is needed.
The following input files are optional:
A KIT marker file (mrk file) or an array-like containing the locations of the HPI coils in the MEG device coordinate system. These data are used together with the elp file to establish the coordinate transformation between the head and device coordinate systems.
A Polhemus points file (elp file) or an array-like containing the locations of the fiducials and the head-position indicator (HPI) coils. These data are usually given in the Polhemus head coordinate system.
A Polhemus head shape data file (hsp file) or an array-like containing locations of additional points from the head surface. These points must be given in the same coordinate system as that used for the elp file.
Note
The output fif file will use the Neuromag head coordinate system convention, see The head and device coordinate systems. A coordinate transformation between the Polhemus head coordinates and the Neuromag head coordinates is included.
By default, KIT-157 systems assume the first 157 channels are the MEG channels, the next 3 channels are the reference compensation channels, and channels 160 onwards are designated as miscellaneous input channels (MISC 001, MISC 002, etc.). By default, KIT-208 systems assume the first 208 channels are the MEG channels, the next 16 channels are the reference compensation channels, and channels 224 onwards are designated as miscellaneous input channels (MISC 001, MISC 002, etc.).
In addition, it is possible to synthesize the digital trigger channel (STI 014) from available analog trigger channel data by specifying the following parameters:
A list of trigger channels (stim) or default triggers with order: ‘<’ | ‘>’ Channel-value correspondence when converting KIT trigger channels to a Neuromag-style stim channel. By default, we assume the first eight miscellaneous channels are trigger channels. For ‘<’, the largest values are assigned to the first channel (little endian; default). For ‘>’, the largest values are assigned to the last channel (big endian). Can also be specified as a list of trigger channel indexes.
The trigger channel slope (slope) : ‘+’ | ‘-‘ How to interpret values on KIT trigger channels when synthesizing a Neuromag-style stim channel. With ‘+’, a positive slope (low-to-high) is interpreted as an event. With ‘-‘, a negative slope (high-to-low) is interpreted as an event.
A stimulus threshold (stimthresh) : float The threshold level for accepting voltage changes in KIT trigger channels as a trigger event.
The synthesized trigger channel data value at sample \(k\) will be:
where \(t_p(k)\) are the thresholded from the input channel data d_p(k):
The threshold value \(t\) can
be adjusted with the stimthresh
parameter, see below.
Importing data from EEG devices¶
MNE includes various functions and utilities for reading EEG data and electrode locations.
BrainVision (.vhdr, .vmrk, .eeg)¶
The BrainVision file format consists of three separate files:
A text header file (
.vhdr
) containing meta dataA text marker file (
.vmrk
) containing information about events in the dataA binary data file (
.eeg
) containing the voltage values of the EEG
Both text files are based on the Microsoft Windows INI format consisting of:
sections marked as
[square brackets]
comments marked as
; comment
key-value pairs marked as
key=value
A documentation for core BrainVision file format is provided by Brain Products. You can view the specification here
BrainVision EEG files can be read in using mne.io.read_raw_brainvision()
with the .vhdr header file as an input.
Warning
Renaming BrainVision files can be problematic due to their multifile structure. See this example for an instruction.
European data format (.edf)¶
EDF and EDF+ files can be read using mne.io.read_raw_edf()
.
EDF (European Data Format) and EDF+ are 16-bit formats.
The EDF+ files may contain an annotation channel which can be used to store
trigger information. These annotations are available in raw.annotations
.
Saving EDF files is not supported natively yet. This gist can be used to save any mne.io.Raw into EDF/EDF+/BDF/BDF+.
BioSemi data format (.bdf)¶
The BDF format is a 24-bit
variant of the EDF format used by EEG systems manufactured by BioSemi. It can
be imported with mne.io.read_raw_bdf()
.
BioSemi amplifiers do not perform “common mode noise rejection” automatically. The signals in the EEG file are the voltages between each electrode and CMS active electrode, which still contain some CM noise (50 Hz, ADC reference noise, etc., see the BioSemi FAQ for further detail). Thus, it is advisable to choose a reference (e.g., a single channel like Cz, average of linked mastoids, average of all electrodes, etc.) on import of BioSemi data to avoid losing signal information. The data can be re-referenced later after cleaning if desired.
Warning
The data samples in a BDF file are represented in a 3-byte (24-bit) format. Since 3-byte raw data buffers are not presently supported in the fif format these data will be changed to 4-byte integers in the conversion.
General data format (.gdf)¶
GDF files can be read in using mne.io.read_raw_gdf()
.
GDF (General Data Format) is a flexible format for biomedical signals that overcomes some of the limitations of the EDF format. The original specification (GDF v1) includes a binary header and uses an event table. An updated specification (GDF v2) was released in 2011 and adds fields for additional subject-specific information (gender, age, etc.) and allows storing several physical units and other properties. Both specifications are supported in MNE.
Neuroscan CNT data format (.cnt)¶
CNT files can be read in using mne.io.read_raw_cnt()
.
The channel locations can be read from a montage or the file header. If read
from the header, the data channels (channels that are not assigned to EOG, ECG,
EMG or misc) are fit to a sphere and assigned a z-value accordingly. If a
non-data channel does not fit to the sphere, it is assigned a z-value of 0.
See The head and device coordinate systems
Warning
Reading channel locations from the file header may be dangerous, as the x_coord and y_coord in ELECTLOC section of the header do not necessarily translate to absolute locations. Furthermore, EEG-electrode locations that do not fit to a sphere will distort the layout when computing the z-values. If you are not sure about the channel locations in the header, use of a montage is encouraged.
EGI simple binary (.egi)¶
EGI simple binary files can be read in using mne.io.read_raw_egi()
.
The EGI raw files are simple binary files with a header and can be exported
from using the EGI Netstation acquisition software.
EEGLAB set files (.set)¶
EEGLAB .set files can be read in using mne.io.read_raw_eeglab()
and mne.read_epochs_eeglab()
.
Importing EEG data saved in the Tufts University format¶
The command line utility mne_tufts2fiff was created in collaboration with Phillip Holcomb and Annette Schmid from Tufts University to import their EEG data to the MNE software.
The Tufts EEG data is included in three files:
The raw data file containing the acquired EEG data. The name of this file ends with the suffix
.raw
.The calibration raw data file. This file contains known calibration signals and is required to bring the data to physical units. The name of this file ends with the suffix
c.raw
.The electrode location information file. The name of this file ends with the suffix
.elp
.
See the options for the command-line utility mne_tufts2fiff.
eXimia EEG data¶
EEG data from the Nexstim eXimia system can be read in using the
mne.io.read_raw_eximia()
function.
Setting EEG references¶
The preferred method for applying an EEG reference in MNE is
mne.set_eeg_reference()
, or equivalent instance methods like
raw.set_eeg_reference()
. By default,
an average reference is used.
There are also other functions that can be useful for other referencing
operations. See mne.set_bipolar_reference()
and
mne.add_reference_channels()
for more information.
Reading electrode locations and head shapes for EEG recordings¶
Some EEG formats (EGI, EDF/EDF+, BDF) neither contain electrode location
information nor head shape digitization information. Therefore, this information
has to be provided separately. For that purpose all readers have a montage
parameter to read locations from standard electrode templates or a Polhemus
digitizer file. This can also be done post-hoc using the
mne.io.Raw.set_montage()
method of the Raw object in memory.
When using the locations of the fiducial points the digitization data are converted to the MEG head coordinate system employed in the MNE software, see The head and device coordinate systems.
Creating MNE data structures from arbitrary data (from memory)¶
Arbitrary (e.g., simulated or manually read in) raw data can be constructed
from memory by making use of mne.io.RawArray
, mne.EpochsArray
or mne.EvokedArray
in combination with mne.create_info()
.
This functionality is illustrated in Creating MNE objects from data arrays. Using 3rd party libraries such as NEO (https://github.com/NeuralEnsemble/python-neo) in combination with these functions abundant electrophysiological file formats can be easily loaded into MNE.
Importing MEG/EEG data from FieldTrip¶
MNE-Python includes mne.io.read_raw_fieldtrip()
, mne.read_epochs_fieldtrip()
and mne.read_evoked_fieldtrip()
to read data coming from FieldTrip.
The data is imported directly from a .mat
file.
The info
parameter can be explicitly set to None
. The import functions will still work but:
All channel locations will be in head coordinates.
Channel orientations cannot be guaranteed to be accurate.
All channel types will be set to generic types.
This is probably fine for anything that does not need that information, but if you intent to do things like interpolation of missing channels, source analysis or look at the RMS pairs of planar gradiometers, you most likely run into problems.
It is highly recommended to provide the info
parameter as well. The info
dictionary can be extracted by loading the original raw data file with the corresponding MNE-Python functions:
original_data = mne.io.read_raw_fiff('original_data.fif', preload=False)
original_info = original_data.info
data_from_ft = mne.read_evoked_fieldtrip('evoked_data.mat', original_info)
The imported data can have less channels than the original data. Only the information for the present ones is extracted from the info
dictionary.
As of version 0.17, importing FieldTrip data has been tested on a variety of systems with the following results:
System |
Read Raw Data |
Read Epoched Data |
Read Evoked Data |
|---|---|---|---|
BTI |
Works |
Untested |
Untested |
CNT |
Data imported as microvolts. Otherwise fine. |
Data imported as microvolts. Otherwise fine. |
Data imported as microvolts. Otherwise fine. |
CTF |
Works |
Works |
Works |
EGI |
Mostly Ok.Data imported as microvolts. FieldTrip does not apply calibration. |
Mostly Ok.Data imported as microvolts. FieldTrip does not apply calibration. |
Mostly Ok.Data imported as microvolts. FieldTrip does not apply calibration. |
KIT |
Does not work. Channel names are different in MNE-Python and FieldTrip |
Does not work. Channel names are different in MNE-Python and FieldTrip |
Does not work. Channel names are different in MNE-Python and FieldTrip |
Neuromag |
Works |
Works |
Works |
eximia |
Work |
Untested |
Untested |


See the repository README for explanations and page source code for an example on how to use the FractionalDelay.


expect.shift([newSubject])
Inside an assertion that takes another assertion as the last parameter via
the <assertion>
type, you can use expect.shift
to invoke that assertion,
optionally replacing the subject with an alternative one.
If you omit the newSubject
parameter to expect.shift
, the current subject
will be preserved. This is mainly useful for assertions that have side effects,
for example mocking out parts of the environment.
It is important that the return value of expect.shift
is returned (or yielded
as the fulfillment value of a promise) from your assertion. That way everything
will work out when delegating to an asynchronous assertion, ie. one that returns
a promise. The promise will then be propagated correctly.
Promise-based flows
If your assertion does not take an <assertion>
as a parameter, or if it
optionally takes one via <assertion?>
and is invoked without,
expect.shift
will propagate its argument as the fulfillment value of the
promise returned from your assertion:
Multiple invocations
You can call expect.shift()
multiple times in your assertion if you want
to delegate to the other assertion several times, optionally with different
subjects. Remember that each invocation could result in a promise -- make
sure to gather up the return values and use expect.promise.all
or a similar
construct to resolve them all, for example:
Again, this has the nice property that the shifted values will be provided as the fulfillment value of the promise if invoked without an assertion:


"Double Take"
When successful New York City investment banker Daryl Chase (Orlando Jones) is framed for laundering Mexican drug money, he is forced to go on the lam to find the one man who can clear his name. When he switches identities with a petty thief, Freddy Tiffany (Eddie Griffin), he figures he's home free, until he learns that his new alias is in even bigger trouble in "Double Take."
In the tradition of "Silver Streak," "The In-Laws" and "Trading Places," "Double Take" is a likable entry in the buddy, road-trip, beat-the-bad-guy, save-the-girl action flick with two equally likable perfs by the leads. The flick doesn't cover any new territory, but tries to be imaginative in the telling Daryl's tale and his adventures, but is mainly a launch pad for it's stars.
Orlando Jones, you'll remember, was the player who broke out in song in last year's good-natured footballer, "The Replacements." It was a one-note performance, but one that made you notice him. As Daryl Chase, Jones starts out as the straight straightman for a big-time banking firm headed by Charles Allsworth (Edward Herrmann). Their key client, a Mexican "businessman" named Minty Gutierrez (Shawn Elliott), has just deposited a whopping $106 million in their bank and Daryl smells a rat. He is pondering what to do as he is leaving the office when he is mugged, only to be saved by a fast-talking, street-smart rogue named Freddy Tiffany.
Intrigue builds around Daryl when he and his girlfriend Chloe (Garcelle Beauvais) are attacked in their apartment and rescued by Agent McCready (Gary Grubbs) and his men from the CIA. The spook tells Daryl that he must get to Mexico to clear his name and help stop the drug cartel operating there. As the scared banker heads south, he repeatedly crosses paths with the tenacious Freddy, who helps him along his way. The story drives along until its inevitable big shootout finale, which is predicated by the Freddy's declaration, "It's payback time."
"Double Take" is mostly a cliché of the other films mentioned, but it is a good showcase for Griffin and Jones. Eddie Griffin is best known as a comedian and he provides a good deal of stand-up schtick along the way. The good news is that, though his performance consists of a series of skits, dances and fast-talking jive, it is funny! The diminutive Griffin has a screen presence that is going to generate a lot of work for the actor.
Jones gets the opportunity to put variety into his perf as he goes from a staid, conservative banker to a street-smart, hip-hopper who fast-talks his way out of trouble. There are times when the actor mimics his costar to perfection, showing his range and ability. Like Griffin, Jones should stay employed for some time to come.
The supporting cast, though large in number, is definitely left in the background. With the spotlight on the stars, no one else has the chance to thesp, especially with the fast pace of the under 90 minute flick. Edward Herrmann is there to lend his name to the credits and collect a check, only.
The original screenplay, by director George Gallo, combines bits and pieces from other movies of the same ilk. There are definite bad guys, like the drug lord, but there is also a plethora of ambiguous loyalties as the story uses movie sleight of hand to keep you guessing who are the bad guys and who are the good guys. In this case, the CIA, once again, is used as an evil scapegoat as corruption personified. The constant switching of whom is good and bad gets a bit tedious as the film draws to its conclusion. The film ends with the obligatory sitting-around-the-pool-on-a-Caribbean-island scene, but it is used to tie up the last of the story threads.
Production is straightforward with good photography, varied settings and, for Jones and Griffin, some funky costuming.
"Double Take" is a popcorn comedy/actioner that actually supplies both elements. The lead characters are fun and funny and there is ample gunplay for the shoot-em-up fans. I give it a C+.
For more Reeling reviews visit www.reelingreviews.com
<EMAIL_ADDRESS><EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


I'm A Celebrity winner Jacqueline Jossa puts her wedding ring back ON and quaffs champagne after insisting she's 'absolutely fine' amid Dan Osborne cheating claims
by Connie Rusk- Jacqueline Jossa put her wedding ring on to film I'm A Celebrity... Coming Out show on Monday
- The actress, 27, was crowned winner on Sunday but her victory was overshadowed by accusations about her husband Dan Osborne's fidelity
- While she was in the jungle, it was claimed Myles Stephenson took Jacqueline to one side to claim his ex, Gabby Allen DID have a fling with her husband
- Chloe Ayling also claimed to have had a threesome with Dan and fellow CBB star Natalie Nunn in 2018
- Dan vehemently denied the claims and said the girls have 'no morals'
- Jacqueline told her fans she was 'absolutely fine' after turning down all television and newspaper interviews
- The couple tied the knot on June 24, 2017, and they are parents to Ella, four, and Mia, 18 months
- Jacqueline 'has Dan's back' and believes he's 'an amazing person,' according to The Sun
Jacqueline Jossa put her wedding ring back on in a defiant display on Monday after her husband Dan Osborne's alleged cheating scandal.
The actress, 27, wore the diamond sparkler to celebrate her jungle win with her I'm A Celebrity co-stars after telling her Instagram followers she is 'absolutely fine'.
Jacqueline proved she would not let the rumours overshadow her win as she arrived to the bash, held at the Palazzo Versace hotel, with a glass of champagne in hand.
Ahead of the celebrations, the soap star took to Instagram to end speculation on her well-being after she dramatically cancelled all interviews- a first in the show's 17-year history.
Fans had worried about how Jacqueline would react to Chloe Ayling's claims she and Dan had engaged in a threesome together last year with fellow Celebrity Big Brother star Natalie Nunn.
But Jacqueline broke her silence on Instagram. She said: 'Hello everybody. Thank you so much for voting for me.
'I cannot quite believe it's happening. I just want to let you all know, I am absolutely fine and it has been the best experience of my whole entire life and my babies are here.'
And Jacqueline certainly brushed off the drama as she filmed for the I'm A Celebrity... Coming Out show, set to air next Thursday, with her fellow campmates.
The former EastEnders actress wore her floral crown and beamed as finalist Andrew Whyment toasted her win and Kate Garraway offered a congratulatory hug.
Jacqueline showed no signs of the pressure she might be feeling from the public over she will handle the latest batch of cheating allegations.
Jacqueline became the first winner in the show's history to cancel live TV and newspaper interviews after Chloe Ayling claimed she had a threesome with her husband in 2018- little more than 12-months after the couple exchanged vows.
There were also reports Myles Stephenson, 28, told Jacqueline his ex-girlfriend Gabby Allen, 25, did have a fling with her husband while they were in the jungle.
Dan has denied both accusations and hit out at Chloe saying she has no morals.
Traditionally a key feature on breakfast TV, Lorraine Kelly admitted she would not be interviewing this year's winner while giving viewers a run-down of her daily show on Monday morning.
A spokesperson for I'm A Celebrity told MailOnline: 'Jacqueline wants to spend as much time as possible with her family in OZ before they have to travel back to the UK. Plus she's filming Coming Out.'
Separate sources have since claimed Jacqueline is keen to avoid all publicity - some of which comes with a lucrative fee - opting instead to devote her remaining time in Australia to husband Dan and their two children, Ella, four, and 18-month old Mia.
'She has to film for the coming out show which airs later this week, so cancelled all other TV offers like GMB and Lorraine to spend more time with the family,' an insider told The Mirror.
Jacqueline signed-up to I'm A Celebrity for viewers to see a different side of her, insisting she 'wasn't a doormat'.
The actress' marriage two-year marriage has been chequered with allegations of Dan cheating on her.
In March, Dan denied claims he had kissed Love Island's Alexandra Cane behind Jacqueline's back and a month after that, he also denied a fling with his PR pal Steph Ledigo.
And in 2015, he spoke of his regret over staying at his ex Megan's house (the mother of his son, Teddy) as this led to cheating rumours.
Despite a string of allegations against her partner, Jacqueline 'has Dan's back' and believes he's 'an amazing person,' according to a source who spoke to The Sun.
'She genuinely believes Dan and will always have his back. She accepts who she's with and where she's at, her marriage vows meant something to her and she thinks he's an amazing person,' they told the publication.
The same close friend told The Sun that Jacqueline doesn't entertain the rumours, saying that she's grown a 'thick skin' about it.
They added: 'You have to remember that all of Jacqueline’s relationship with Dan has been surrounded by negativity since the very beginning – Dan's ex Megan was pregnant when they got together and there was constant attention and speculation.'
This year's cast of I'm A Celebrity were in a celebratory mood as they all indulged in some champagne to acknowledge Jacqueline being crowned Queen of the Jungle.
Coronation Street star Andy, 38, finished as runner-up while radio presenter Roman Kemp, 26, came in third place.
The stars indulged in a glass of bubbly before they all shared a series of snaps posing with Jacqueline's winning staff to mark the end of the show.
During the wrap party James Haskell's wife Chloe Madeley celebrated by jokingly stealing the crown for herself.
The rugby star, 34, shared a snap of his other half, 32, as she proudly donned the EastEnders actress' flower crown after being crowned Queen of the Jungle.
James also shared a snap with his good friend Caitlyn Jenner who he called his 'jungle wife'.
Chloe looked stunning in the snap as she donned a silk white dress with James writing: 'We have a thief in the house' alongside the snap.
James and Caitlyn, 70, bonded during their time in the jungle, starting on day one when the rugby player chose the former Olympic athlete to partner up with for the first challenge.
While there were more than a few squabbles in the jungle over the last few weeks, the celebrities had clearly put it all behind them as they enjoyed their remaining time in Australia together before returning home.
James shared a snap of himself posing proudly alongside Jacqueline after her win, calling her 'inspirational' and a deserving winner.
He wrote: 'I could not think of a more deserving winner!! @jacjossa smashed this on so many levels. She was inspirational and dealt with every challenge like a hero. She looked after me in camp like a sister.
'I loved getting to know her and see her grow. Her story is inspiring and she has shown herself to be mega on every level. My wife @madeleychloe is a huge fan and wanted her to win from day one, as did I.'
James' wife Chloe also posed with Jacqueline's staff while Dan jokingly squeezed the rugby star's muscles while they all hung out backstage.
Kate Garraway, 52, beamed as she celebrated the finale and posed for a snap with pal Andrew Maxwell, 45, where she donned a hat bearing his catchphrase 'My Love'.
Caitlyn Jenner also shared a snap of herself celebrating Jacqueline's win and praised the actress for how far she had come throughout her time in the jungle.
The former Olympic athlete, 70, wrote: 'Congratulations to my sweet friend @jacjossa witnessing your growth on this show was amazing! Congrats Jungle Jack!'
Caitlyn was joined by her partner Sophia Hutchins, 23, who said she was 'so proud' of the sports star for how she fared inside the jungle and posted a cosy snap of the pair to her Instagram.


If you want to be a cool guy.
Descriptions of communicating objects and classes that are customized to solve a general design problem.
–Gamma, et. al
Commonly reasons:
public class Model {
private String name;
public void setName(String name) {
// business logic
this.name = name;
}
// for view access
public String getName() {
return name;
}
}
<%-- receive data --%>

Hello, ${model.name}

<form action="controller" method="post">
My name is
<input type="text" id="name" name="name" value="${model.name}" />
<button>Submit</button>
</form>
@WebServlet(value = "/controller")
public class Controller extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// accepting request
String name = req.getParameter("name");
// validate request
if (name.isEmpty()) {
name = "Guest";
}
// use Model to do business logic
Model model = new Model();
model.setName(name);
// binding model to view
req.setAttribute("model", model);
// forward to view
req.getRequestDispatcher("/v/view.jsp").forward(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// accepting request
// use Model to do business logic
Model model = new Model();
model.setName("Guest");
// binding model to view
req.setAttribute("model", model);
// forward to view
req.getRequestDispatcher("/v/view.jsp").forward(req, resp);
}
}
public class Model {
private String name;
public void setName(String name) {
// business logic
this.name = name;
}
// for presenter access
public String getName() {
return name;
}
}
public class View extends CustomComponent {
private Label display = new Label("Hello, Guest");
private TextField name = new TextField("My name is ");
private Button button = new Button("Submit");
private Presenter presenter;
public View() {
// initial layout and presenter
initialLayout();
presenter = new Presenter(this);
}
protected void initialLayout() {
CustomLayout layout = new CustomLayout("view");
layout.addComponent(display, "display");
layout.addComponent(name, "name");
button.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// when button click then dispatch to presenter
presenter.changeDisplay();
}
});
layout.addComponent(button, "submit");
setCompositionRoot(layout);
}
// view provide getters & setters
public TextField getInput() {
return name;
}
public void setDisplay(String value) {
display.setValue(value);
}
}
public class Presenter {
private View view;
private Model model;
public Presenter(View view) {
this.view = view;
this.model = new Model();
}
public void changeDisplay() {
String name = view.getInput().getValue();
// do some logic, eg: validate
if (name.isEmpty()) {
name = "Guest";
}
// call model
model.setName(name);
// control view
view.setDisplay("Hello, " + model.getName());
}
}
public class Model {
private String name;
public void setName(String name) {
// business logic
this.name = name;
}
public String getName() {
return name;
}
}
<zk>
<window title="MVVM Example" border="normal" width="100%"
apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('tw.jcconf.example.mvvm.vm.ViewModel')">
<hbox>
Hello,
</hbox>
<hbox>
<textbox value="@bind(vm.name)" />
<button onClick="@command('changeName')" label="Submit" />
</hbox>
</window>
</zk>
public class ViewModel {
private String name;
private Model model;
public ViewModel() {
model = new Model();
model.setName(name = "Guest");
}
// event handler
@Command
@NotifyChange("model")
public void changeName() throws Exception {
model.setName(name);
}
// ViewModel provider getter & setter
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public Model getModel() {
return model;
}
}
An architectural style that abstracts the architectural elements within a distributed hypermedia system.
–Wikipedia
- Use HTTP methods explicitly.
- Be stateless.
- Expose directory structure-like URIs.
- Transfer XML, JavaScript Object Notation (JSON), or both.
| User Action | HTTP Method |
| Create | POST/PUT |
| Read (Retrieve) | GET |
| Update (Modify) | PUT/PATCH |
| Delete (Destroy) | DELETE |
| User Action | SQL |
| Create | INSERT |
| Read (Retrieve) | SELECT |
| Update (Modify) | UPDATE |
| Delete (Destroy) | DELETE |
Define the URL for your resources
Choose the right HTTP method
Choose content-type which you want to return
POST http://domain/books
{
"isbn": "123456789",
"title": "Modern Design Pattern",
"author": "Steven Wang",
"publisher": "JCConf TW",
"year": "2014"
}
HTTP/1.1 200 | 401
{
"id": "9876543"
}
GET http://domain/books/123456789
or
GET http://domain/books?isbn=123456789
HTTP/1.1 200 | 404
[{
"id": "9876543",
"isbn": "123456789",
"title": "Modern Design Pattern",
"author": "Steven Wang",
"publisher": "JCConf TW",
"year": "2014"
}]
PUT http://domain/books/9876543
or
PUT http://domain/books
{
["id": "9876543",]
"isbn": "123456789",,
"title": "Modern Design Pattern",
"author": "Steven Wang",
"publisher": "JCConf TW",
"year": "2014"
}
HTTP/1.1 200 | 401 |404
DELETE http://domain/books/9876543
or
DELETE http://domain/books?isbn=9876543
HTTP/1.1 200 | 401 |404
@RestController
@RequestMapping("/books")
public class BooksResource {
@Autowired
BookService service;
@RequestMapping(consumes = "application/json", produces = "application/json", method = RequestMethod.GET)
@ResponseBody
public List<Book> getAll() {
return service.getAll();
}
@RequestMapping(value = "/{isbn}", consumes = "application/json", produces = "application/json", method = RequestMethod.GET)
@ResponseBody
public Book getByIsbn(@PathVariable("isbn") String isbn) {
return service.getBookByIsbn(isbn);
}
@RequestMapping(consumes = "application/json", produces = "application/json", method = RequestMethod.POST)
@ResponseBody
public Book save(@RequestBody Book book) {
return service.save(book);
}
@RequestMapping(consumes = "application/json", produces = "application/json", method = RequestMethod.PUT)
@ResponseBody
public Book update(@RequestBody Book book) {
return service.update(book);
}
@RequestMapping(value = "/{id}", consumes = "application/json", produces = "application/json", method = RequestMethod.DELETE)
public void delete(@PathVariable("id") Long id) {
service.delete(id);
}
}
CQRS is simply the creation of two objects where there was previously only one. The separation occurs based upon whether the methods are a command or a query (the same definition that is used by Meyer in Command and Query Separation, a command is any method that mutates state and a query is any method that returns a value).
–Wikipedia
Say what?
Command/Query Responsibility Segregation (CQRS) is the idea that you can use a different model to update information than the model you use to read information.
So, when should you avoid CQRS?
The answer is most of the time...
–Udi Dahan