"The Widow of St. Pierre"
One night, on the remote French-owned island of St. Pierre, a senseless murder takes place during a drunken quarrel. The repentant killer, Neel Auguste (Emir Kusturica), is sentenced to death - but there is no guillotine on the island needed to carry out the execution. During the months that follow, the island's intelligent military commandant (Daniel Auteuil) treats his prisoner with dignity. The captain's wife, Madame Lo (Juliette Binoche), questions the justice of the death penalty and is convinced that Neel will be redeemed by his good deeds in "The Widow of St. Pierre."
Master French filmmaker Patrice Leconte tackles the based-on-a-true-story period tale about a murderer who, through the kind attentions of the beautiful wife of the island's commandant, is not only fully rehabilitated, he becomes a local hero. There is mystery, though, in this tale of redemption as Madame Lo takes on an obsessive zeal as she first convinces her husband, the Captain, to allow Neel to build her a greenhouse in cold, windswept St. Pierre. As the prisoner gets over the drinking that was at the bottom of his crime, he becomes a stolid member of the community. But, the threat from Madame Guillotine never leaves as the island's administrators plead with the French government to provide the deadly machine.
"The Widow of St. Pierre" is a narrative story, taking a definite anti-death penalty stance, with complex character studies provided by the principals. The lead subjects are symbolic, but, with a great cast giving solid performances, these symbols are three-dimensional and complete, if almost unbelievably noble, people.
The story, by Claude Faraldo, begins in a brutal fashion with the drunken murder of a local man by Neel and a crony. The friend gets life in prison and Auguste gets an appointment with death. But, there is no requisite guillotine on the island and long distance negotiations begin with the leaders of the strife torn French Republic. Since the process will likely take months, the island military commander allows his ward the freedom of St. Pierre at Madame Lo's behest. The Captain's wife shows an inordinate, though chaste, concern for the health and well being of Neel and curiosity is piqued by the mystery.
As the months drag on without word from the home government, life grows complacent on the island and Neel becomes part of the fabric of life on St. Pierre, even marrying a local widow. He also becomes invaluable to the community at large and, at one point, saves a young woman from certain death during a house moving. The man's obvious rehabilitation should save him, but time is his enemy and even the fouled up French government eventually sends a guillotine. The problem then becomes finding an executioner, a job that no islander will take. But, the elders resolve the final stumbling block when a hapless immigrant is coerced into taking the deadly job.
Patrice Lucent has been making films in France for decades. Unfortunately for us in the US, only a few of this master's work has shown on these shores. Most exemplary (and my favorite Leconte film to date) is his black-and-white masterpiece, "Girl on the Bridge." That work was an extraordinary, stylish work that showcased its stars, Daniel Auteuil and Vanessa Paradis. The film was an intense character study that had a love story beneath the surface. With "The Widow of St. Pierre," Leconte moves into a period piece depicting the harsh life on the remote French colony while making a strong statement against the death penalty. With the likes of Auteuil and Binoche in the leads, he also can't help having rich characterizations, too. Then, too, there's the striking looks and strong, quiet character provided by director Emir Kusturica as Neel Auguste.
Leconte uses his tried and trusted behind-the-camera crew to put, once again, a striking image on the screen. His long-time cinematographer Eduardo Serra captures the cold desolation of St. Pierre while giving it a stark, photo-quality beauty. This complements both set design, by Ivan Maussion, and the fine costumes, by Christian Gasc, that firmly place the viewer right on that cold, cruel island in the mid 1800's.
"The Widow of St. Pierre" is another example of quality filmmaking by a master. Leconte is an expert at his craft and, with his fine cast and crew, continues to please. I give it a B+.
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


This version should be used by any system that can properly emulate the SA-1 with 256kb of BWRAM.
This version is slightly modified from the main version to include several randomizer features:
This is a snapshot of the pre-SA-1 practice hack. It will no longer be updated and only serves as a fallback for incompatible systems.
The practice hack comes loaded with a full suite of HUD changes, features, and wedges to facilitate RTA practice and glitch hunting. The most commonly used features include:
Configuration settings will persist across practice hack versions if newly downloaded hacks are given the same file name as previous versions on whatever system you use.
The practice hack menu can be accessed by having the R and Start buttons held down together on the same frame. This menu and other shortcuts can be activated during most gameplay modes, but will be prohibited during some modules (such as the file select menu). When disallowed, shortcut bindings will play a beep and resume normal action.
| Button | When | Action |
|---|---|---|
| R+Start | Game play | Open practice menu |
| Start | In practice menu | Close practice menu |
| Select | In practice menu | Return to main index |
| A | Submenu option | Open submenu |
| Toggle option | Toggle item | |
| List option | Next selection | |
| Command option | Activate command | |
| X | Most options | Clear / Disable |
| Numfields | Set to minimum | |
| Y | Most options | Enable |
| Numfields | Set to maximum | |
| B | Main menu | Move to top |
| Submenu | Return to previous menu | |
| L / R | Num field | Increment/Decrement by larger amounts; no wrapping |
| ⏴ / ⏵ | Toggle option | Toggle item |
| List option | Previous/Next selection | |
| Num field | Increment/Decrement by 1 | |
| ⏶ / ⏷ | Practice menu | Move cursor |
| Icon | Meaning |
|---|---|
| Opens a submenu | |
| Runs an immediate command | |
| Toggles a binary option | |
| Sets from a selection of choices | |
| Sets a numerical value | |
| Loads a preset | |
| Sets a shortcut binding |
As of version 14, very; about 1/10th of a scanline off. Here's a quick rundown of how it works:
The SA-1 is a coprocessor that can be used alongside the main SNES CPU. It can run code faster, but, more importantly, it can run at the same time as the SNES CPU without slowing it down. This allows the practice hack to handle certain features with minimal lag change from vanilla. Due to the limitations on memory access, not every feature can be handled lag-free on the SA-1.
Features that run on the SA-1 will be marked with this badge: SA1.
There are specific routines that get run at the beginning and end of every frame to manage the OAM buffer. The clearing routine isn't coded very efficiently, so it's been optimized to about twice its original speed. The SNES CPU then sends an interrupt request which tells the SA-1 to process controller input for shortcuts. If a shortcut is found, a vector pointing to its routine in ROM will be saved in memory. The next frame, the SNES will check for this vector, and respond accordingly.
For the game HUD, almost every reference to its WRAM buffer has been changed to a location in BWRAM where the SA-1 can see it. Once the HUD's buffer has been modified by the game, it copies a handful of variables that are only visible to the SNES CPU into memory that is visible to both the SNES and the SA-1. This is where most of the time saved with OAM optimization is accounted for. After these variables are copied, the SNES sends another interrupt request to the SA-1 to indicate that the coprocessor can do its own changes to the tilemap before it gets drawn to the screen. Some features (such as the hearts) are still written to their original WRAM buffer. This way, they can contribute their normal CPU load without ruining the HUD.
On any frame where the HUD doesn't update, a separate check makes sure that these variables are still copied over, as this copying is critical to balancing the practice hack back in line with vanilla. The rest of the code hacked in is very minimal, and those few extra cycles are very unlikely to create additional lag frames.
Certain features require more variables to be copied over than others. These will necessarily require a slightly higher fraction of the CPU's time, but they will only take this time when the HUD is redrawn. Such features will be marked with this badge: EX.
No.
The change to SA-1 included a complete overhaul of the backend code. Adding new features to both versions would require maintaining two completely separate codebases and writing almost every feature twice. I simply cannot allow my ability to improve this project be inhibited by inferior applications or devices that do not properly emulate expansion chips. You may think it's not fair that I'm ignoring your system, but what's actually not fair is holding everyone else back from a better practice hack.
It's impossible to modify anything this much without sacrificing some behavior. This section details known caveats that should be taken into consideration by the user.
The memory layout of the SA-1 puts important hardware registers and on-board memory in an area potentially affected by overlay corruption. To prevent corruption to the SA-1, the star tile holes routine will be intercepted if it is about to write too far. This will have some effect on the timing of longer corruptions.
When cut short, the practice hack will continue reading without writing to see how far the writes would have gone. If they reach too far ($4200
), then a blue screen of death will be displayed to explain the intentional lock.
In addition to the writing, this type of corruption may also read too far. This does not have the potential to corrupt the SA-1, but it does throw the behavior out of sync from vanilla. Normally, corruption that reaches this far should terminate at the address $4307
; however, the values read from SA-1 registers and memory prevent that precise target from being hit. To guarantee that corruption resolves, a large block of memory from $3680
to $37FF
has been filled with the necessary terminator value. This solution necessarily means that far-reaching corruption will end much sooner than it normally would, making timings unreliable.
Collections of presets that can be loaded to practice various parts of various runs. The category listed can be changed in the preset config menu.
If a category you want to practice does not have presets, you can help by making them. Instructions for doing so are listed here.
$00
). For safety, this will only run when Link's handler is currently set to bunny ($17
). If successful, you should hear a poof; otherwise, you will hear a beep.Sets Link's general state handler to bunny ($17
). For safety, this will only run when Link's handler is at its default value ($00
). If successful, you should hear OOF; otherwise, you will hear a beep.
Despite the labels, the Superbunny and Lonk menu options can be used to return to normal Link and normal bunny, respectively.
16 custom presets that can be saved, loaded, and erased.


Thank you all for your feedback. Please read all the
questions and answers below so everyone can benefit.
How do you now delete a player record from the registered
player list - when a player has not registered during the season?? I have 100+
records I wish to delete and no simple method of doing so, until you advise.
Brian King, Hellenic League
Log In
click on Player
click on Registered Players Analysis
click on the club name
click on the player's name you want to delete
click on upd/del in the Registrations column
click on the Delete button
If you then want to delete players who are "Not Registered" do this.......
Log In
click on Player
click on See Unregistered
click on the player's name you want to delete
click on the Delete button - this will succeed only if he has made no appearances
during the season.
Can the default start date of a registration
not become the potential first date of a season say 1st August 2005 etc.Brian
King, Hellenic League The default start date ought still to be TODAY and end
date ought to be 31st May of the current season a sit always is for non contract
players. That is another way the new idea will slow the entering considerably.
I dare sya this is brought about by a desire to keep player son the system form
one season to next, but considering how many change their address etc each season
(even dates of birth !!!) it is far safer to re enter them all. That is my personal
opinion of course byut probably borne out by many other registration officers
Tony Pringle, Halls of Cambridge Sunday Football League
I will change the First Day to today's date which should
be near the actual date of registration so not too far to navigate to. I will
replace the drop down dates to a calendar in the future. If a league requests
that all players and their registrations be removed at the start of a season
I can easily do this.
When a player is transferred his transfer date can
then be entered and a new record created from the day following the transfer
date
Brian King, Hellenic League
Transfers do not always involve adjacent time periods.
Sometimes a player is deregistered from Club A and there are several days before
he is signed by Club B. You will need to update the Club A registration details
with a Last Day and then add a Club B registration, specifying the Club name
and First Day (and reg. type if necessary).
Thank you for your message, but for myself I think
removing Registration from the menu bar is going to increase my workload when
imputing players suspensions on to the system. At present I was going through
the clubs list of players registered by using the registration menu bar, now
the only way I can do this by going to the player in question and with just
under two thousand players registered this going to take a lot longer.
Adrian Marson, Herts Senior County League
Try Player then Registered Players Analysis
You can then click on any club name..........
Then choose a player and add a suspension as usual.......
That little bit information help a lot,
I have just added some new players on to the site and I found that the new system
is going to be easier and a lot quicker.
Adrian Marson, Herts Senior County League
I see your improvements, in many ways you
certainly have the right idea BUT the beauty of your sytem was that one could
enter player registration quickly, the ADD MANY feature meant you could put
in the details and then quickly tick the box to add them to thier club, extremely
useful when at the start of the season when 30 player forms from one club arrive
together. This new system seems ? to wipe out this advantage.
Tony Pringle, Halls of Cambridge Sunday Football League
If you want to add 30 new players and register them
all to the same club.............
Log In
click on Player
*=*
click on Add
complete the Adding Player form and then click on the Add button
You will get 1 player with Reg. Nos. between nnn and nnn showing as Not Registered
click on add in the Registrations column
complete the registration and click on the Update button
repeat steps from *=*
I will add something to remember the current club so that you won't have to
choose this every time.

Tony Pringle, Halls of Cambridge Sunday Football League
Not to worry for this season. As I said in my email:
Please try the Played while unregistered report. By creating appropriate registrations
for these players you can reduce the size of this report. Just update the current
registration to have a First Day and blank Last Day and then add a registration
for the original club with a blank First Day and a realistic Last Day.
Have just checked through registration system
from a non-Registration Secretary's point of view, i.e. as Secretary who wants
to quickly establish if a player is registered with a particular club for administrative
purposes or as Press Officer to check correct spelling of a goalscorer's name
or a name for a match programme, without going to "Player" in the menu which
is time- consuming, etc. Is it therefore possible for administrators to have
a master password to input in the box in the yellow section of the Home page
otherwise it means entering the unique code issued for each club to extract
the type of information I often need and, again, this is time-consuming?
Lawrie Parsons, Robert Gray & Co. Mid Sussex Football League
Log In
click on Player
click on Registered Players Analysis
click on the club name
Thank you for your prompt assistance. Your
suggested way of getting to the club's full list of registered players is fine.
Lawrie Parsons, Robert Gray & Co. Mid Sussex Football League


Nick Fury
account_circle Manager
- ID: 1001
- Email<EMAIL_ADDRESS>- Office Number:<PHONE_NUMBER>
Tony Stark
developer_mode Engineer
- ID: 1002
- Email<EMAIL_ADDRESS>- Github: youknowwhoiam
Thor
folder_shared Intern
- ID: 1003
- Email<EMAIL_ADDRESS>- School: Asgard
account_circle Manager
developer_mode Engineer
folder_shared Intern


Java GUI Form samples illustrating NetBeans GUI Builder features on three typical UI layouts commonly used by developers.


Director: Kevin Smith Screenwriter: Kevin Smith Country: Canada; Year: 1999 Rating (4 star system): **1/2
Hopefully, as Alan Rickman upholds in the movie, God does have a sense of humor... for Kevin Smith's sake. The writer-director basically upholds the faith, but in a very unconventional way. Whether one could truly say his portrait of religion puts it in a good light or not is really a personal opinion, but it's clear he doesn't mind questioning his subject-- and what's wrong with that? Smith makes films from the gut. He makes movies that he would like to see and that's clear. This has paid off for him thus far because he's pretty much an everyman and a lot of people want to see the same things on the screen that he does. He definitely has a strong instinct for filmmaking, but I'd far from call it developed. I found this movie to be quite entertaining, but I couldn't really say it was all that well made or even, for that matter, good. None of the peices seemed to quite fit together right. His direction lacks a lot, often giving in to cliche. I wouldn't even say it's the classic Hollywood style, exactly, but a self-conscious pop version, along the same lines as Tarantino. What lacks for Smith is a definitive style to really set a tone and pace for his scenes and the movie as a whole. Whereas Tarantino and so many of pop-culturalist young directors rely on a melding of their writing and directing for a unique style, Smith's writing comes almost fully from his writing and it's as if the direction is merely an afterthought. This is not to say that he is not a competent director, but I'd venture to say he is not a confident one. I would love to see a Smith-written script directed by another director who could show just how much potential is there. Then maybe smith himself would be able to find a way to mine his own material for a little more depth. Again, as was the case with many in his first films, the performances just aren't that great, and, in some cases, just downright bad. I love Chris Rock [as a comic], but he just is not a good actor. Salma Hayek was just a little better and Linda Fiorentino had her moments, but none of the performances were really anything to get excited about. Sure, they were able to do well with some of the one-liners and other jokes, but that's hardly acting. I wasn't really even impressed at all with Alan Rickman, either. He just seemed too rehearsed. There was nothing at all fresh about his performance. The only characters that really seemed to meet their full potential were the unlikely prophets- Jay and Silent Bob. Of course, their potential is to be entertaining slackers- not a particularly hard task, but Smith and Jason Mewes do it well. Damon and Affleck were decent enough, but they didn't really seem to even be part of anything. For some odd reason, it seemed like they were in a separate movie than the rest of the cast [I really have no explanation for why I thought this; I guess they were just out of place]. As I said before, Smith's style comes almost completely from his writing, which is steeped in pop-culture and slacker references. He really has a pretty good story here. The problem is that he seems unwilling to part with material. There were jokes and gags that had no place in the film and only slowed or hindered it. Something else I noticed in the film is that Smith has his characters explain too much. It seemed so unnatural every time I learned a new peice of backstory, etc. because it was explained to death by the characters-- something that was actually made into a joke itself in the film, but still would have been better rectified. Kevin Smith knows entertainment, and I, for one, believe he also knows good storytelling through good filmmaking. I just don't think he realized his full potential yet. I'll probably see his next film, and I expect it will be a step toward that.
-- TyroneZero's Movies, etc. http://members.tripod.com/~TyroneZero/film.html
Sent via Deja.com http://www.deja.com/ Before you buy.
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


This program outputs a balanced complete or incomplete combustion reaction, given a hydrocarbon.
Please enter the chemical formula for a hydrocarbon, in proper formatting. Only the elements hydrogen, carbon, and oxygen are accepted.


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
See:
Description
| Core | |
|---|---|
| org.apache.hadoop.conf | Configuration of system parameters. |
| org.apache.hadoop.dfs | A distributed implementation of FileSystem . |
| org.apache.hadoop.filecache | |
| org.apache.hadoop.fs | An abstract file system API. |
| org.apache.hadoop.io | Generic i/o code for use when reading and writing data to the network, to databases, and to files. |
| org.apache.hadoop.io.compress | |
| org.apache.hadoop.io.compress.zlib | |
| org.apache.hadoop.ipc | Tools to help define network clients and servers. |
| org.apache.hadoop.mapred | A system for scalable, fault-tolerant, distributed computation over large data collections. |
| org.apache.hadoop.mapred.jobcontrol | Utilities for managing dependent jobs. |
| org.apache.hadoop.mapred.lib | Library of generally useful mappers, reducers, and partitioners. |
| org.apache.hadoop.metrics | This package defines an API for reporting performance metric information. |
| org.apache.hadoop.metrics.file | Implementation of the metrics package that writes the metrics to a file. |
| org.apache.hadoop.metrics.ganglia | Implementation of the metrics package that sends metric data to Ganglia. |
| org.apache.hadoop.metrics.spi | The Service Provider Interface for the Metrics API. |
| org.apache.hadoop.net | Network-related classes. |
| org.apache.hadoop.record | Hadoop record I/O contains classes and a record description language translator for simplifying serialization and deserialization of records in a language-neutral manner. |
| org.apache.hadoop.record.compiler | This package contains classes needed for code generation from the hadoop record compiler. |
| org.apache.hadoop.record.compiler.generated | This package contains code generated by JavaCC from the Hadoop record syntax file rcc.jj. |
| org.apache.hadoop.tools | |
| org.apache.hadoop.util | Common utilities. |
| Examples | |
|---|---|
| org.apache.hadoop.examples | Hadoop example code. |
| Other Packages | |
|---|---|
| org.apache.hadoop |
Hadoop is a distributed computing platform.
Hadoop primarily consists of a distributed filesystem (DFS, in org.apache.hadoop.dfs) and an implementation of a MapReduce distributed data processor (in org.apache.hadoop.mapred ).
First, you need to get a copy of the Hadoop code.
You can download a nightly build from http://cvs.apache.org/dist/lucene/hadoop/nightly/. Unpack the release and connect to its top-level directory.
Or, check out the code from subversion and build it with Ant.
Edit the file conf/hadoop-env.sh to define at least JAVA_HOME.
Try the following command:
bin/hadoopThis will display the documentation for the Hadoop command script.
By default, Hadoop is configured to run things in a non-distributed mode, as a single Java process. This is useful for debugging, and can be demonstrated as follows:
mkdir inputThis will display counts for each match of the regular expression.
Note that input is specified as a directory containing input files and that output is also specified as a directory where parts are written.
NameNode
(Distributed Filesystem
master) host and port. This is specified with the configuration
property fs.default.name.
JobTracker
(MapReduce master)
host and port. This is specified with the configuration property
mapred.job.tracker.
(We also set the DFS replication level to 1 in order to reduce warnings when running on a single node.)
Now check that the command
ssh localhost
does not
require a password. If it does, execute the following commands:
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
A new distributed filesystem must be formatted with the following command, run on the master node:
bin/hadoop namenode -format
The Hadoop daemons are started with the following command:
bin/start-all.sh
Daemon log output is written to the logs/ directory.
Input files are copied into the distributed filesystem as follows:
bin/hadoop dfs -put input input
Things are run as before, but output must be copied locally to examine it:
bin/hadoop org.apache.hadoop.mapred.demo.Grep input output 'dfs[a-z.]+'When you're done, stop the daemons with:
bin/stop-all.sh
Distributed operation is just like the pseudo-distributed operation described above, except:
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |


|
TLx493D 3D Hall Sensor Generic Library
0.2
Generic library for the TLx493D 3D Hall sensor family
|
I2C Driver for XMC1100 USIC Module. More...
#include <stdint.h>
Go to the source code of this file.
Enumerations | |
| enum | I2C_status_t { I2C_STATUS_OK = 0, I2C_STATUS_TIMEOUT = 1, I2C_STATUS_BUSY = 2, I2C_STATUS_NACK = 3 } |
| Status values returned by the I2C read/write commands. | |
Functions | |
| void | I2C_init (void) |
| Initialize the I2C peripheral. | |
| void | I2C_enable (void) |
| Enable the I2C channel. | |
| void | I2C_disable (void) |
| Disable the I2C channel. | |
| void | I2C_mode_normal (void) |
| Connect SDA and SCL pins to the I2C peripheral. | |
| void | I2C_mode_gpio_input (void) |
| Switch I2C pins to GPIO mode Disconnect SDA and SCL pins from the I2C peripheral. Configure them as GPIO inputs (in order to avoid unintended input signals to the I2C peripheral that will cause it to freeze) | |
| void | I2C_peripheral_recover (void) __attribute__((deprecated)) |
| Recovery procedure according to XMC1100 Errata Sheet. | |
| int32_t | I2C_read (uint8_t addr, uint8_t *data, uint8_t count) |
| Read a number of bytes from an I2C device to a uint8_t array. More... | |
| int32_t | I2C_write (uint8_t addr, const uint8_t *data, uint8_t count) |
| Write a number of uint8_t bytes to an I2C device. More... | |
| void | I2C_wait_transmit (void) |
| Wait for an I2C transmission to end. More... | |
| void | I2C_write_recover (void) |
| Write FF (the recover value) to the I2C Bus. | |
| void | I2C_write_reset (void) |
| Write 00 (the reset value) to the I2C Bus. | |
I2C Driver for XMC1100 USIC Module.
| int32_t I2C_read | ( | uint8_t | addr, |
| uint8_t * | data, | ||
| uint8_t | count | ||
| ) |
Read a number of bytes from an I2C device to a uint8_t array.
Read count bytes from the device with the given I2C address to the data array
| addr | I2C device address. |
| data | Address where the data should be stored. |
| count | Number of bytes to be read from the device to the data array |
| void I2C_wait_transmit | ( | void | ) |
Wait for an I2C transmission to end.
Blocks the program execution until the last I2C operation is completed.
| int32_t I2C_write | ( | uint8_t | addr, |
| const uint8_t * | data, | ||
| uint8_t | count | ||
| ) |
Write a number of uint8_t bytes to an I2C device.
Read count bytes from the device with the given I2C address to the data array
| addr | I2C device address. |
| data | Address where the data should be stored. |
| count | Number of bytes to be read from the device to the data array |


Welcome to LearnFlow
Helping you acheive flow state while you work on expanding the boundaries of your knowledge.
Email:
Password:
Login
Register
Name:
Password:
Email:
Register


THE HI-LO COUNTRY (M). (Polygram/Palace) Director: Stephen Frears Stars: Billy Crudup, Woody Harrelson, Patricia Arquette, James Gammon, Cole Hauser, Sam Elliott, Penelope Cruz, John Diehl, Enrique Castillo, Lane Smith, Rosaleen Linehan Running time: 129 minutes.
Although The Hi-Lo Country is set in the harsh, untamed cattle country of New Mexico in the late 1940's, it quickly becomes obvious that we are venturing into Sam Peckinpah territory here. The Hi- Lo Country explores many of those themes common to his movies - the death of the old west and its values, and that strange code of loyalty that exists between hard and violent men.
Peckinpah tried in vain for many years to bring Max Evans' 1961 novel to the screen. Producers Martin Scorsese and Barbara De Fina have succeeded where Peckinpah failed. Walon Green (who wrote The Wild Bunch, one of the all-time classic westerns and one of my favourite films) has fashioned a grand, sweeping epic from Evans' novel, although some elements are far less compelling than others. Scorsese has brought aboard British director Stephen Frears (My Beautiful Laundrette, etc), with whom he collaborated on the marvellous noir-like thriller The Grifters.
An outsider, Frears directs the material with unusual intelligence. He doesn't romanticise the characters or the setting as much as Peckinpah would have. The film also lacks Peckinpah's characteristic trade mark touches - the graphic violence and the strong misogynistic streak. Oliver Stapleton's glorious wide screen cinematography beautifully brings to life the harsh open spaces of New Mexico, imbuing the film with an almost epic quality.
Many young men, returning home from Europe following the war, found the old cattle country had changed drastically during their absence. Many families facing hardship and financial ruin had been forced to sell their farms to wealthy land barons. Deprived of their legacy, the young men were often forced to work for these wealthy ranchers for wages. Pete Calder (Billy Crudup, from Inventing The Abbotts, etc) is one such returning soldier, who prefers to work his own modest 1600 acres, with help from his friend Big Boy Matson (Woody Harrelson).
Big Boy though is a tough, hard drinking cowboy of the old school, an embodiment of the old west, who doesn't walk away from a fight. He courts trouble when he begins an increasingly public affair with Mona (Patricia Arquette), the wife of Les Birk (John Diehl), foreman for ruthless local rancher Jim Ed Love (Sam Elliott). It's an affair that can only end in violence and tragedy.
Crudup gives a solid performance as Pete, the laconic, introspective narrator of this nostalgic tale. Harrelson somehow seems miscast here in a role that required an actor with a meaner, rougher edge. Arquette lends her sultry presence to the pivotal role of Mona.
The Hi-Lo Country is best viewed as a poignant, elegiac homage to both the classic western movies of yesteryear and, ultimately, the late Peckinpah himself.
*** greg king http://www.netau.com.au/gregking
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


Shelf Pod
Toggle to show or hide the pod in the shelf
IME Tray
Tote
Palette Tray
Logout Button
Privacy Indicators


Signup
Come join us for an event filled with great content and learning!
Name
Email
How many will be attending?
What day will you attend?
Please choose a day
Thursday
Friday
Saturday
Sunday
Morning Program
HTML
CSS
Sass
SVG
Afternoon Program
Javascript
React
Vue
Node
What are your interests?
Front-End
Back-End
Full-Stack
Dev Ops
Web design
Message
Drop us a line
Send


Just a friendly reminder to send out your weekly update before 11:55pm on {{ deadline }} in order for it to be included this week!
NEW - This will contain each week's template with new questions. For now Owen will edit this manually every week based on emails he receives.
Please send the update to<EMAIL_ADDRESS>and not this address.
Thanks!
WeeklyUpdater


#include <display.h>
Public Members | |||
| NativeBitmap ( NativePlayerWnd* native, const SColorTable* ctab, int width, int height, int depth, int pixelFormat ) | |||
| ~NativeBitmap () | |||
| int | Height () | ||
| int | Width () | ||
| U8* | Bits () | ||
| int | ScanLine () | ||
| int | PixelFormat () | ||
| int | Depth () | ||
| void | Flush () | ||
| void | BltNativeToScreen ( NativePlayerWnd* native, int xDest, int yDest, int cx, int cy, int xSource, int ySource ) | ||
| void | ClearScreen ( NativePlayerWnd* ) |
Fully contstructs a bitmap - after construction, it can be read or written at any time.
Height, in pixels.
Width, , in pixels.
Pointer to the base address of bitmap memory.
Bytes of memory per row of pixels.
Valid formats are: pix1, pix4, pix8, pix16, pix16A, pix24, pix32, pix32A.
The number of pixels per byte.
Flush is only meaningful if you have to worry about graphics commands being queued on your OS. Win and Mac, mainly. Mac code looks like: while ( !QDDone((GrafPort*)bits->m_gWorld) ) ;
BltNativeToScreen transfers a block of pixels from memory to the display. All parameters are input.
Clears the screen when nothing is going on.


PLATES OF FLAVOURS
Home
(current)
Login
About Us
Dropdown link
Contact Us
Feedback
Your favorite food, delivered with
"𝓟𝓵𝓪𝓽𝓮𝓼 𝓸𝓯 𝓕𝓵𝓪𝓿𝓸𝓾𝓻𝓼"
The pleasure of variety on your plate.
Submit


Participated in the reproducibility challenge ICLR (international conference on learning representations). We have implemented attention model for VGG and Resnet
Independent research - Important project for georgian language, that allows creation of editable text from photos/scanned copies of handwritten text.
We host AISaturdays in Tbilisi. Contributing to make Artificial Intelligence education at the quality and rigour of the world’s best universities accessible to anyone for free. Our Student experts help with the lectures, offering detailed explanations, coding sessions. The project lasts last for 3 months, and helps develop the field of artificial intelligence in Georgia. Over 40 students attended the meetups !
Collecting dataset of georgian words from various public documents, books and Training high accuracy word2vec model, and Recurrent Neural Network
Created framework that can accurately predict cryptocurrency exchange rate changes using Recurrent Neural Networks, and validate results by understanding expert opinions from forums using Natural Language processing !
President
Vice President
Head of Research
Head of Engineering
Head of Industry research


statsmodels.tsa.arima_model.ARMAResults¶
-
class
statsmodels.tsa.arima_model.
ARMAResults
(model, params, normalized_cov_params=None, scale=1.0)[source]¶ Class to hold results from fitting an ARMA model.
- Parameters
- Attributes
- aic
float
Akaike Information Criterion \(-2*llf+2* df_model\) where df_model includes all AR parameters, MA parameters, constant terms parameters on constant terms and the variance.
- arparams
ndarray
The parameters associated with the AR coefficients in the model.
- arroots
ndarray
The roots of the AR coefficients are the solution to (1 - arparams[0]*z - arparams[1]*z**2 -…- arparams[p-1]*z**k_ar) = 0 Stability requires that the roots in modulus lie outside the unit circle.
- bic
float
Bayes Information Criterion -2*llf + log(nobs)*df_model Where if the model is fit using conditional sum of squares, the number of observations nobs does not include the p pre-sample observations.
- bse
ndarray
The standard errors of the parameters. These are computed using the numerical Hessian.
- df_model
ndarray
The model degrees of freedom = k_exog + k_trend + k_ar + k_ma
- df_resid
ndarray
The residual degrees of freedom = nobs - df_model
- fittedvalues
ndarray
The predicted values of the model.
- hqic
float
Hannan-Quinn Information Criterion -2*llf + 2*(df_model)*log(log(nobs)) Like bic if the model is fit using conditional sum of squares then the k_ar pre-sample observations are not counted in nobs.
- k_ar
int
The number of AR coefficients in the model.
- k_exog
int
The number of exogenous variables included in the model. Does not include the constant.
- k_ma
int
The number of MA coefficients.
- k_trend
int
This is 0 for no constant or 1 if a constant is included.
- llf
float
The value of the log-likelihood function evaluated at params.
- maparams
ndarray
The value of the moving average coefficients.
- maroots
ndarray
The roots of the MA coefficients are the solution to (1 + maparams[0]*z + maparams[1]*z**2 + … + maparams[q-1]*z**q) = 0 Stability requires that the roots in modules lie outside the unit circle.
- model
ARMA
instance
A reference to the model that was fit.
- nobs
float
The number of observations used to fit the model. If the model is fit using exact maximum likelihood this is equal to the total number of observations, n_totobs. If the model is fit using conditional maximum likelihood this is equal to n_totobs - k_ar.
- n_totobs
float
The total number of observations for endog. This includes all observations, even pre-sample values if the model is fit using css.
- params
ndarray
The parameters of the model. The order of variables is the trend coefficients and the k_exog exogenous coefficients, then the k_ar AR coefficients, and finally the k_ma MA coefficients.
- pvalues
ndarray
The p-values associated with the t-values of the coefficients. Note that the coefficients are assumed to have a Student’s T distribution.
- resid
ndarray
The model residuals. If the model is fit using ‘mle’ then the residuals are created via the Kalman Filter. If the model is fit using ‘css’ then the residuals are obtained via scipy.signal.lfilter adjusted such that the first k_ma residuals are zero. These zero residuals are not returned.
- scale
float
This is currently set to 1.0 and not used by the model or its results.
- sigma2
float
The variance of the residuals. If the model is fit by ‘css’, sigma2 = ssr/nobs, where ssr is the sum of squared residuals. If the model is fit by ‘mle’, then sigma2 = 1/nobs * sum(v**2 / F) where v is the one-step forecast error and F is the forecast error variance. See nobs for the difference in definitions depending on the fit.
- aic
Methods
conf_int
([alpha, cols])Construct confidence interval for the fitted parameters.
cov_params
([r_matrix, column, scale, cov_p, …])Compute the variance/covariance matrix.
f_test
(r_matrix[, cov_p, scale, invcov])Compute the F-test for a joint linear hypothesis.
forecast
([steps, exog, alpha])Out-of-sample forecasts
initialize
(model, params, **kwargs)Initialize (possibly re-initialize) a Results instance.
load
(fname)Load a pickled results instance
See specific model class docstring
plot_predict
([start, end, exog, dynamic, …])Plot forecasts
predict
([start, end, exog, dynamic])ARMA model in-sample and out-of-sample prediction
Remove data arrays, all nobs arrays from result and model.
save
(fname[, remove_data])Save a pickle of this instance.
summary
([alpha])Summarize the Model
summary2
([title, alpha, float_format])Experimental summary function for ARIMA Results
t_test
(r_matrix[, cov_p, scale, use_t])Compute a t-test for a each linear hypothesis of the form Rb = q.
t_test_pairwise
(term_name[, method, alpha, …])Perform pairwise t_test with multiple testing corrected p-values.
wald_test
(r_matrix[, cov_p, scale, invcov, …])Compute a Wald-test for a joint linear hypothesis.
wald_test_terms
([skip_single, …])Compute a sequence of Wald tests for terms over multiple columns.
Properties
Returns the frequency of the AR roots.
Returns the frequency of the MA roots.
The two-tailed p values for the t-stats of the params.
Return the t-statistic for a given parameter estimate.
Flag indicating to use the Student’s distribution in inference.


The Wolf
This is an animal that I grately admire and if I were to be presumptious I would call it my spirit animal .
The wolf is known for being passionate ,graceful ,generous and deeply emotional. The wolf is also very independent and can spend much of their lives alone, quite happily. But they are a pack breed and will eventually want to be a part of a group, family, or community.
At their worst, the wolf can become obsessive over friends or family members, impractical, and even vindictive. But in the right environment, they are incredibly nurturing, gentle, and very affectionate.
Their ultimate goal in life is to not only find true love, but to nurture it for a lifetime. Thus the concept of having soulmates was born and honestly I find that very appealing.
Hello,My name is Stacy Wanjiku Weru.I am currently a student of Moringa School.I am also a student at Yangtze University in Hubei Province,China studying Civil Engineering , but due to the current Covid-19 pandemic there has been very many restrictions,air travel included,therefore going back to school is a no-go in the foreseeable future.
I am the first born girl child in a family of five;Two healthy parents,one younger sister and one younger brother.I am very proud of them .
The reason as to why I am here in this school is that I decided to pursue programming to get an actual certificate ,because in this day and time ,everything is online,meaning that hopefully that there will actually be more jobs offered and to be pursued in the future.I am greatly thankful for the opportunity to study at this school.From research done this is going to be a really competitive field in the future if it is not already therefore is better to join in while I can.Another reason as to why I decided to do programming is that now with the school holiday I had some free time so studying here gave me a pupose,hence very grateful.
I personally think that hobbies and interests tend to evolve or die about with the passage of time or with the situation around you.But during this period of quarantine, finding either a new hobby or interest is quite difficult because of the lack of inspiration so somedays become a repaet of the previous day.But we make due so as to not go expire to early.Reminds me of a song lyric that says;"You gotta go insane to stay sane"
Some of my current hobbies include:
They might be not much to do but these are what I do during my free time now.
Here are the lists of projects that I have worked on so far during my my stay at Moringa.


What is the issue:
-When comparing our data to data hosted on other platforms, the timestamps can be different.
Why does the issue occur:
- We timestamp our data to when the data is received and ready to be used. For instance, we timestamp daily bars with the midnight of when the bar closed, not when it opened.
- <Redirect to understanding time>


6.2 Python GUI Development Options
Before we start wading into the Tkinter pond, let's begin with
some perspective on Python GUI options in general. Because Python has
proven to be such a good match for GUI work, this domain has seen
much activity in recent years. In fact, although Tkinter is the most
widely used GUI toolkit in Python, there is a variety of ways to
program user interfaces in Python today. Some are specific to Windows
or X Windows, some
are cross-platform solutions, and all have followings and strong
points all their own. To be fair to all the alternatives, here is a
brief inventory of GUI toolkits available to Python programmers as I
write these words:
- Tkinter (shipped with Python)
-
An open-source, portable GUI library, used as the de facto standard
for GUI development in Python. Tkinter makes it easy to build simple
GUIs quickly, and can be straightforwardly augmented with larger
component frameworks in Python. Python scripts that use Tkinter to
build GUIs run portably on Windows, X Windows (Unix), and Macintosh,
and display a native look-and-feel on each of these. The underlying
Tk library used by Tkinter is a standard in the open source world at
large, and is also used by the Perl and Tcl scripting languages.
- wxPython (http://wxpython.org)
-
An open-source Python interface for wxWindows -- a portable GUI
class framework originally written to be used from the C++
programming language. The wxPython system is an extension module that
wraps wxWindows classes. This library is generally considered to
excel at building sophisticated interfaces, and is probably the
second most popular Python GUI toolkit today, behind Tkinter. At this
writing, wxPython code is portable to Windows and Unix-like
platforms, but not the Macintosh. The underlying wxWindows library
best supports Windows and GTK (on Unix), but it is generally portable
to Windows, Unix-like platforms, and the Macintosh.
- JPython (http://www.jython.org)
-
As we will see in Chapter 15, JPython (a.k.a.
"Jython") is a Python port for Java, which gives Python
scripts seamless access to Java class libraries on the local machine.
Because of that, Java GUI libraries such as swing
and awt become another way to construct GUIs in
Python code run by the JPython system. Such solutions are obviously
Java-specific, and limited in portability to the portability of Java
and its libraries. A new package named jTkinter
also provides a Tkinter port to JPython using Java's JNI; if
installed, Python scripts may also use Tkinter to build GUIs under
JPython.
- KDE and Qt (http://www.thekompany.com/projects/pykde)
- Gnome and GTK (ftp://ftp.daa.com.au/pub/james/python)
-
On Linux, developers can find Python interfaces to the underlying GUI
libraries at the core of the KDE and Gnome window systems. The PyKDE
and PyQt extension packages provide access to KDE development
libraries (PyKDE requires PyQt). The gnome-python and PyGTK extension
packages export Gnome and GTK toolkit calls for use in Python scripts
(gnome-python requires PyGTK). Both of these sets of extensions are
as portable as the underlying libraries they use. Today, the Qt class
library runs on Unix and Windows, KDE runs on Linux and Unix
platforms, and GTK and Gnome run on Linux and Unix platforms (though
a Windows port of GTK is in the works). See relevant web sites for
more recent details.
- MFC (http://www.python.org/windows)
-
The Windows win32all.exe extensions package for
Python, available at Python's web site and on this book's
CD-ROM, includes wrappers for the Microsoft Foundation Classes (MFC)
framework -- a development library that includes user interface
components. With the Windows extensions, Python programs can
construct Windows GUIs using the same MFC calls applied in languages
such as Visual C++. Pythonwin, an MFC sample program that implements
a Python development GUI, is included with the extensions package.
This is a Windows-only solution, but may be an appealing option for
developers with a prior intellectual investment in using the MFC
framework from Visual C++.
- WPY (http://www.python.org/ftp/python/wpy)
-
An MFC-like GUI library for Python, ported to run on both X Windows
for Unix (where it uses Tk) and Windows for PCs (where it uses MFC).
WPY scripts run unchanged on each platform, but use MFC coding
styles.
- X11 (http://www.cwi.nl/ftp/sjoerd/index.html)
-
Interfaces to the raw X Windows and Motif libraries also exist for
Python. They provide maximum control over the X11 development
environment, but are an X-only solution.
There are other lesser-known GUI toolkits for Python, and new ones
are likely to emerge by the time you read this book (e.g., the newly
announced Python port to the .NET framework on Windows may offer user
interface options as well). Moreover, package and web site names like those
in this list mutate over time. For an up-to-date list of available
tools, see http://www.python.org and the new
"Vaults of Parnassus" third-party packages site currently
at http://www.vex.net/parnassus.
|


13.58. Release 0.192
General Changes
- Fix performance regression in split scheduling introduced in 0.191. If a query
scans a non-trivial number of splits (~1M splits in an hour), the coordinator
CPU utilization can be very high, leading to elevated communication failures.
- Fix correctness issue in the
geometry_to_bing_tiles()
function that causes
it to return irrelevant tiles when bottom or right side of the bounding box of the
geometry is aligned with the tile border.
- Fix handling of invalid WKT (well-known text) input in geospatial functions.
- Fix an issue that can cause long-running queries to hang when writer scaling is enabled.
- Fix cast from
REAL
or DOUBLE
to DECIMAL
to conform to the SQL standard.
For example, previously cast (double '100000000000000000000000000000000' as decimal(38))
would return<PHONE_NUMBER>00000005366162204393472
. Now it returns<PHONE_NUMBER>00000000000000000000000
.
- Fix bug in validation of resource groups that prevented use of the
WEIGHTED_FAIR
policy.
- Fail queries properly when the coordinator fails to fetch data from workers.
Previously, it would return an HTTP 500 error to the client.
- Improve memory tracking for queries involving
DISTINCT
or row_number()
that could cause
over-committing memory resources for short time periods.
- Improve performance for queries involving
grouping()
.
- Improve buffer utilization calculation for writer scaling.
- Remove tracking of per-driver peak memory reservation.
- Add
resource-groups.max-refresh-interval
config option to limit the maximum acceptable
staleness of resource group configuration.
- Remove
dictionary-processing-joins-enabled
configuration option and dictionary_processing_join
session property.
Web UI Changes
- Fix incorrect reporting of input size and positions in live plan view.
CLI Changes
- Fix update of prompt after
USE
statement.
- Fix correctness issue when rendering arrays of Bing tiles that causes
the first entry to be repeated multiple times.
Hive Changes
- Fix reading partitioned table statistics from newer Hive metastores.
- Do not treat file system errors as corruptions for ORC.
- Prevent reads from tables or partitions with
object_not_readable
attribute set.
- Add support for validating ORC files after they have been written. This behavior can
be turned on via the
hive.orc.writer.validate
configuration property.
- Expose ORC writer statistics via JMX.
- Add configuration options to control ORC writer min/max rows per stripe and row group,
maximum stripe size, and memory limit for dictionaries.
- Allow reading empty ORC files.
- Handle ViewFs when checking file system cache expiration.
- Improve error reporting when the target table of an insert query is dropped.
- Remove retry when creating Hive record reader. This can help queries fail faster.
MySQL Changes
- Remove support for
TIME WITH TIME ZONE
and TIMESTAMP WITH TIME ZONE
types due to MySQL types not being able to store timezone information.
- Add support for
REAL
type, which maps to MySQL’s FLOAT
type.
PostgreSQL Changes
- Add support for
VARBINARY
type, which maps to PostgreSQL’s BYTEA
type.
MongoDB Changes
- Fix support for pushing down inequality operators for string types.
- Add support for reading documents as
MAP
values.
- Add support for MongoDB’s
Decimal128
type.
- Treat document and array of documents as
JSON
instead of VARCHAR
.
JMX Changes
- Allow nulls in history table values.
SPI Changes
- Remove
SliceArrayBlock
class.
- Add
offset
and length
parameters to Block.getPositions()
.


I love to travel, even though I don't often get the chance to. One of my dream holiday destinations is New Zealand as I have family there, and I love the scenery and natural lifestyle there.


| [Overview][Types][Classes] |
Source position: uWordList.pas line 70
public procedure TWordList.ListWordsFromLetters( |
WhatLetters: AnsiString; |
List: TStrings; |
MinCharacters: Integer = -1; |
MaxCharacters: Integer = -1 |
); |
WhatLetters |
|
String containing the letters to look for. |
List |
|
TStrings object that will recieve the list of words found within the word list. |
MinCharacters |
|
The minimum number of letters that must appear within the word (length) for it to be added to the list. |
MaxCharacters |
|
The maximum number of letters that must appear within the word (length) for it to be added to the list. |
Returns a listing of words from the letters that are passed in to this method. As an example from the word "gdo" it may return the following results:
The letters are each only used once, so if you want to test for multilple occurances of a letter you must include it the same number of times.


DB Standards Keeper
DB Standards Keeper
Field
Type
Standard
Description
Additional Fields
Table
Field
Type
Standard
Description
R
Additional Keys
Field
Foreign Table
Description
R
Additional Indices
Name
Tables
Keys
R


Cedar next?
Bar
Pie
Line
Scatter
Bubble
Time clock
Bars Multiple
Timeline
Custom Chart
Initiative examples
DC Collision Injuries
DC VisionZero
DC Collisions


Our Team
Contact Us
Med Cabinet
At Med Cabinet we aim to provide all of our patients with only the finest quality medication.
Open Cabinet
Matching your ideal strain, just for you!


Hello
I am Karishma Patni.
Software engineer in the Bay Area with over 9 years of experience in successfully developing and shipping customer facing web and data rich BI applications. Adept in front-end development, front-end frameworks, data-visualizations, object-oriented programming, and relational database. Experienced in Agile (Scrum) development methodology.


Consider a supermarket chain that has purchased 6 gallons of milk from a local dairy. The chain must allocate the 6 gallons to its three stores. If a store sells a gallon of milk, then the chain receives revenue of $2. Any unsold milk is worth just $.50. Unfortunately, the demand for milk is uncertain, and is given in the following table:
The goal of the chain is to maximize the expected revenue from these 6 gallons. (This is not the only possible objective, but a reasonable one.)
Note that this is quite similar to some of our previous resource allocation problems: the only difference is that the revenue is not known for certain. We can, however, determine an expected revenue for each allocation of milk to a store. For instance, the value of allocating 2 gallons to store 1 is:
We can do this for all allocations to get the following values:
We have changed what looked to be a stochastic problem into a deterministic one! We simply use the above expected values. The resulting problem is identical to our previous resource allocation problems. We have a stage for each store. The states for stage 3 are the number of gallons given to store 3 (0, 1, 2, 3); the states for stage 2 are the number of gallons given to stores 2 and 3 (0, 1, 2, 3, 4, 5, 6) and the state for stage 1 is the number of gallons given to stores 1, 2, and 3 (6). The decision at stage i is how many gallons to give to store i. If we let the above table be represented by (the value of giving k gallons to store i, then the recursive formulae are
If you would like to work out the values, you should get a valuation of $9.75, with one solution assigning 1 gallon to store 1, 3 gallons to store 2 and 2 gallons to store 3.


Ugly Truth
BlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlah
BlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlah
BlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlah
BlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlahBlah


4.4.0-beta
This is a function reference for mailbots-sdk-js. View the readme.md file in the the repo that corresponds with this version. Also, view MailBots REST API and the MailBots API Docs for more information.
Low-level function to make authenticated request to MailBots API
Promise
:
Factory method to return a new, fully authenticated MailBots client based on the webhook
mailbot.onCommand('foo', bot => {
const mbClient = MailBotsClient.fromBot(bot);
})
Get information about the bot that corresponds with user's Bearer token (ie, most likely your bot).
(function?)
Optional callback
Promise
:
const res = await mbClient.mailbotGetSelf();
Send an Event to the bot. This does not require and auth token because the endpoint is meant for 3rd party services. Ex: issue created in Github, or an email response or support ticket received. The MailBots bot can listen for events, act on tasks or create or delete tasks based on events.
(object)
params
(any)
Promise
:
const res = await mbClient.sendEvent({type: 'event.type', payload: {"foo", "bar"}, event_url: "[unique_event_url]"});
An "Interbot Event" allows bots to send messages to each other. This allows a MailBot to expose actions that can be utilized by other MailBots (for example, creating an Evernote note) In this way, MailBots can become composable. Requires elevated oauth scope.
Promise
:
const res = await mbClient.sendInterbotEvent({subdomain: 'git', payload: {"foo", "bar"}});
Save MailBot data which is sent with every webhook related to that bot. This is how a bot persist's user settings specific to that bot. For params and details, see bot saving data API docs
(object)
Nestable key value value pairs
(any)
Promise
:
const res = await mbClient.saveBotData({ foo: "bar" });
Get saved MailBot data For params and details, see mailbots get data API docs
(any)
const res = await mbClient.getBotData();
Get a filtered list of People
Promise
:
// Get all people
const res = await mbClient.searchPeople();
console.log(res.people);
// With a callback
mbClient.searchPeople({ limit: 1 }, (err, res) => {
if (err) done(err);
console.log(res.people);
});
Create a new person.
(any)
(function?)
Optional callback function
Promise
:
Get a person by it's ID.
Promise
:
// Get person with id 3
const res = await mbClient.getPersonById(3);
console.log(res.person);
Update a person by id.
Promise
:
Update multiple people with a single batch operation.
Promise
:
Create a new person event.
(object)
| Name | Description |
|---|---|
params.type string
|
The type of this event |
params.title string
|
Title of the event |
params.body string
|
Event content |
params.links array
|
Event content |
(any)
Promise
:
Update a person's tags attribute by id.
(object)
Arguments for API call
| Name | Description |
|---|---|
params.newTags Array<string>
|
|
params.replace boolean
|
keep exising tags or replace them |
(function?)
Optional callback function
Promise
:
Merge one or more people into a base person.
(object)
| Name | Description |
|---|---|
params.basePersonId number
|
Id of the person to merge into |
params.mergePersonIds Array<number>
|
Ids of people to merge with |
(any)
Promise
:
Get a filtered list of MailBots tasks
(object)
Arguments for API call
| Name | Description |
|---|---|
params.suppress_webhook boolean
|
Prevent MailBots from firing the task.viewed webhook |
params.status boolean
|
Retrieve completed or open tasks |
(function?)
Optional callback function
Promise
:
// Get all open tasks, sorted by due date
const res = await mbClient.getTasks();
console.log(res.tasks);
// With a callback
mbClient.getTasks({ limit: 1 }, (err, res) => {
if (err) done(err);
console.log(res.tasks);
});
Get a MailBots task Passing ?verbose=1 fires a webhook to the extnesion and fetches a rendered HTML email preview of the task
(object)
request params
| Name | Description |
|---|---|
params.id number
|
taskid |
params.verbose boolean
|
Fires webhook to bot, returns rendered HTML emails in a "messages" array if the bot makes these available in the task.viewed webhook resopnse. |
(any)
Promise
:
const res = await getTask({id: 123});
Create a new MailBots Task.
(any)
(any)
(any)
Promise
:
const res = await mbClient.createTask(
{
webhook: false,
suppress_email: true,
verbose: 1,
task: {
command: process.env.EXAMPLE_COMMAND
},
send_messages: [
{
type: "email",
subject: "A test email message",
to<EMAIL_ADDRESS>body: [
{
type: "html",
html: "
This is a test
"
}
]
}
]
});
Send email and automatically create a Task This creates a MailBots task and sends an email. It's a wrapper for createTask with opinionated settings for just sending email.
(any)
Promise
:
const res = await mbClient.sendEmail({
command<EMAIL_ADDRESS>// must be your bot's domain
to<EMAIL_ADDRESS>cc: [],
bcc: [],
from<EMAIL_ADDRESS>subject: "Test1",
body: [
{
type: "html",
text: "
This is a test
"
}
]
});
Send emails relating to an existing Task. Does not mutate task. NOTE: This may be deprecated in favor of sending messages via the update task endpoint.
const res = await mbClient.sendMessages({
task: {
id: 123
},
send_messages: [{
to<EMAIL_ADDRESS>cc: [],
bcc: [],
from<EMAIL_ADDRESS>subject: "Test1",
body: [
{
type: "html",
text: "
This is a test
"
}
]
}]
});
Update A MailBots Task Used to save data against the task, update content, followup time and more
(any)
(any)
(any)
Promise
:
const res = await mbClient.updateTask({
task: {
id: 1234,
reference_email: {
to<EMAIL_ADDRESS>}
}});
Archive A MailBots Task
(number)
Arguments
| Name | Description |
|---|---|
params.task number
|
Task object |
params.task.id number
|
Task id to complete |
(any)
Promise
:
Permanently Delete A MailBots Task
(object)
Task to delete
| Name | Description |
|---|---|
params.task object
|
Task object |
params.task.id number
|
Task id to delete |
(any)
Promise
:
Trigger a MailBots Task
(object)
| Name | Description |
|---|---|
params.trigger_url boolean
|
Trigger URL of the task to trigger (get from task object) |
params.verbose boolean?
|
Fire webhook and render HTML email response |
(any)
Promise
:
Resolve Natural Time Format (ex<EMAIL_ADDRESS>(object)
params object
| Name | Description |
|---|---|
params.format string
|
Time format to check (ex: 3days) |
params.timezone string
|
IANA timezone designation ( https://www.wikiwand.com/en/List_of_tz_database_time_zones ) ex: "America/Los_Angeles" |
(any)
Promise
:
Dispatch an email-based action for a task. (Equivalent to sending an action email.)
(object)
| Name | Description |
|---|---|
params.action string
|
The action string |
params.reference_email object
|
The email that would be sent as the action email |
params.verbose boolean?
|
Include rendered HTML email contents in API response |
(any)
Promise
:
Create a new task event.
(object)
| Name | Description |
|---|---|
params.type string
|
The type of this event |
params.data object
|
Data associated with this event. |
(any)
Promise
:
Get information about the currently logged in user
(function?)
Optional callback
Validate webhook signature. Set verifyAge to false when testing / mocking HTTP requests. (Server side only)
(string)
(number)
Unix Timestamp of webhook. Used to prevent reply attack
(string)
Unprocessed http post body
(boolean?
= true
)
Use for automated testing
boolean
:
Pass / fail webhook validation


src/stomp-r.service.ts
Angular2 STOMP Raw Service using @stomp/stomp.js
You will only need the public properties and methods listed unless you are an advanced user. This service handles subscribing to a message queue using the stomp.js library, and returns values via the ES6 Observable specification for asynchronous value streaming by wiring the STOMP messages into an observable.
If you will like to pass the configuration as a dependency, please use StompService class.
Properties |
|
Methods |
|
Accessors |
constructor()
|
|
Defined in src/stomp-r.service.ts:91
|
| Public connected |
connected()
|
|
Defined in src/stomp-r.service.ts:201
|
|
It will return
Returns :
boolean
|
| Public disconnect |
disconnect()
|
|
Defined in src/stomp-r.service.ts:184
|
|
It will disconnect from the STOMP broker.
Returns :
void
|
| Public initAndConnect |
initAndConnect()
|
|
Defined in src/stomp-r.service.ts:162
|
|
It will connect to the STOMP broker.
Returns :
void
|
| Protected initStompClient |
initStompClient()
|
|
Defined in src/stomp-r.service.ts:127
|
|
It will initialize STOMP Client.
Returns :
void
|
| Public publish | ||||||||||||||||
publish(queueName: string, message: string, headers: StompHeaders)
|
||||||||||||||||
|
Defined in src/stomp-r.service.ts:215
|
||||||||||||||||
|
It will send a message to a named destination. The message must be The message will get locally queued if the STOMP broker is not connected. It will attempt to publish queued messages as soon as the broker gets connected.
Parameters :
Returns :
void
|
| Protected sendQueuedMessages |
sendQueuedMessages()
|
|
Defined in src/stomp-r.service.ts:225
|
|
It will send queued messages.
Returns :
void
|
| Protected setupOnReceive |
setupOnReceive()
|
|
Defined in src/stomp-r.service.ts:319
|
|
It will handle messages received in the default queue. Messages that would not be handled otherwise get delivered to the default queue.
Returns :
void
|
| Protected setupReceipts |
setupReceipts()
|
|
Defined in src/stomp-r.service.ts:330
|
|
It will emit all receipts.
Returns :
void
|
| Public subscribe | ||||||||||||
subscribe(queueName: string, headers: StompHeaders)
|
||||||||||||
|
Defined in src/stomp-r.service.ts:255
|
||||||||||||
|
It will subscribe to server message queues This method can be safely called even if the STOMP broker is not connected. If the underlying STOMP connection drops and reconnects, it will resubscribe automatically. If a header field 'ack' is not explicitly passed, 'ack' will be set to 'auto'. If you do not understand what it means, please leave it as is. Note that when working with temporary queues where the subscription request creates the underlying queue, mssages might be missed during reconnect. This issue is not specific to this library but the way STOMP brokers are designed to work.
Parameters :
Returns :
Observable<Stomp.Message>
|
| Public waitForReceipt |
waitForReceipt(receiptId: string, callback: (frame: Stomp.Frame) => void)
|
|
Defined in src/stomp-r.service.ts:341
|
|
Wait for receipt, this indicates that server has carried out the related operation
Returns :
void
|
| Protected client |
client:
|
Type : Stomp.Client
|
|
Defined in src/stomp-r.service.ts:91
|
|
STOMP Client from @stomp/stomp.js |
| Public connectObservable |
connectObservable:
|
Type : Observable<StompState>
|
|
Defined in src/stomp-r.service.ts:49
|
|
Will trigger when connection is established. Use this to carry out initialization. It will trigger every time a (re)connection occurs. If it is already connected it will trigger immediately. You can safely ignore the value, as it will always be StompState.CONNECTED |
| Protected debug |
debug:
|
Default value : (args: any): void => {
console.log(new Date(), args);
}
|
|
Defined in src/stomp-r.service.ts:355
|
|
Callback Functions Note the method signature: () => preserves lexical scope if we need to use this.x inside the function |
| Public defaultMessagesObservable |
defaultMessagesObservable:
|
Type : Subject<Stomp.Message>
|
|
Defined in src/stomp-r.service.ts:65
|
|
Will emit all messages to the default queue (any message that are not handled by a subscription) |
| Public errorSubject |
errorSubject:
|
Type : Subject<string | Stomp.Message>
|
|
Defined in src/stomp-r.service.ts:76
|
|
Will trigger when an error occurs. This Subject can be used to handle errors from the stomp broker. |
| Protected on_connect |
on_connect:
|
Default value : (frame: Frame) => {
this.debug('Connected');
this._serverHeadersBehaviourSubject.next(frame.headers);
// Indicate our connected state to observers
this.state.next(StompState.CONNECTED);
}
|
|
Defined in src/stomp-r.service.ts:360
|
|
Callback run on successfully connecting to server |
| Protected on_error |
on_error:
|
Default value : (error: string | Stomp.Message) => {
// Trigger the error subject
this.errorSubject.next(error);
if (typeof error === 'object') {
error = (<Stomp.Message>error).body;
}
this.debug(`Error: ${error}`);
// Check for dropped connection and try reconnecting
if (!this.client.connected) {
// Reset state indicator
this.state.next(StompState.CLOSED);
}
}
|
|
Defined in src/stomp-r.service.ts:371
|
|
Handle errors from stomp.js |
| Protected queuedMessages |
queuedMessages:
|
Type : literal type[]
|
Default value : []
|
|
Defined in src/stomp-r.service.ts:81
|
|
Internal array to hold locally queued messages when STOMP broker is not connected. |
| Public receiptsObservable |
receiptsObservable:
|
Type : Subject<Stomp.Frame>
|
|
Defined in src/stomp-r.service.ts:70
|
|
Will emit all receipts |
| Public serverHeadersObservable |
serverHeadersObservable:
|
Type : Observable<StompHeaders>
|
|
Defined in src/stomp-r.service.ts:58
|
|
Provides headers from most recent connection to the server as return by the CONNECTED frame. If the STOMP connection has already been established it will trigger immediately. It will additionally trigger in event of reconnection, the value will be set of headers from the recent server response. |
| Public state |
state:
|
Type : BehaviorSubject<StompState>
|
|
Defined in src/stomp-r.service.ts:41
|
|
State of the STOMPService It is a BehaviorSubject and will emit current status immediately. This will typically get used to show current status to the end user. |
| config | ||||||||
setconfig(value: )
|
||||||||
|
Defined in src/stomp-r.service.ts:122
|
||||||||
|
Set configuration
Parameters :
Returns :
void
|
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
import { Subject } from 'rxjs/Subject';
import { Subscription } from 'rxjs/Subscription';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/first';
import 'rxjs/add/operator/share';
import { StompConfig } from './stomp.config';
import * as Stomp from '@stomp/stompjs';
import { Frame, StompSubscription } from '@stomp/stompjs';
import { StompHeaders } from './stomp-headers';
import { StompState } from './stomp-state';
/**
* Angular2 STOMP Raw Service using @stomp/stomp.js
*
* You will only need the public properties and
* methods listed unless you are an advanced user. This service handles subscribing to a
* message queue using the stomp.js library, and returns
* values via the ES6 Observable specification for
* asynchronous value streaming by wiring the STOMP
* messages into an observable.
*
* If you will like to pass the configuration as a dependency,
* please use StompService class.
*/
@Injectable()
export class StompRService {
/**
* State of the STOMPService
*
* It is a BehaviorSubject and will emit current status immediately. This will typically get
* used to show current status to the end user.
*/
public state: BehaviorSubject<StompState>;
/**
* Will trigger when connection is established. Use this to carry out initialization.
* It will trigger every time a (re)connection occurs. If it is already connected
* it will trigger immediately. You can safely ignore the value, as it will always be
* StompState.CONNECTED
*/
public connectObservable: Observable<StompState>;
/**
* Provides headers from most recent connection to the server as return by the CONNECTED
* frame.
* If the STOMP connection has already been established it will trigger immediately.
* It will additionally trigger in event of reconnection, the value will be set of headers from
* the recent server response.
*/
public serverHeadersObservable: Observable<StompHeaders>;
private _serverHeadersBehaviourSubject: BehaviorSubject<null|StompHeaders>;
/**
* Will emit all messages to the default queue (any message that are not handled by a subscription)
*/
public defaultMessagesObservable: Subject<Stomp.Message>;
/**
* Will emit all receipts
*/
public receiptsObservable: Subject<Stomp.Frame>;
/**
* Will trigger when an error occurs. This Subject can be used to handle errors from
* the stomp broker.
*/
public errorSubject: Subject<string | Stomp.Message>;
/**
* Internal array to hold locally queued messages when STOMP broker is not connected.
*/
protected queuedMessages: {queueName: string, message: string, headers: StompHeaders}[]= [];
/**
* Configuration
*/
private _config: StompConfig;
/**
* STOMP Client from @stomp/stomp.js
*/
protected client: Stomp.Client;
/**
* Constructor
*
* See README and samples for configuration examples
*/
public constructor() {
this.state = new BehaviorSubject<StompState>(StompState.CLOSED);
this.connectObservable = this.state
.filter((currentState: StompState) => {
return currentState === StompState.CONNECTED;
});
// Setup sending queuedMessages
this.connectObservable.subscribe(() => {
this.sendQueuedMessages();
});
this._serverHeadersBehaviourSubject = new BehaviorSubject<null|StompHeaders>(null);
this.serverHeadersObservable = this._serverHeadersBehaviourSubject
.filter((headers: null | StompHeaders) => {
return headers !== null;
});
this.errorSubject = new Subject();
}
/** Set configuration */
set config(value: StompConfig) {
this._config = value;
}
/** It will initialize STOMP Client. */
protected initStompClient(): void {
// disconnect if connected
this.disconnect();
// url takes precedence over socketFn
if (typeof(this._config.url) === 'string') {
this.client = Stomp.client(this._config.url);
} else {
this.client = Stomp.over(this._config.url);
}
// Configure client heart-beating
this.client.heartbeat.incoming = this._config.heartbeat_in;
this.client.heartbeat.outgoing = this._config.heartbeat_out;
// Auto reconnect
this.client.reconnect_delay = this._config.reconnect_delay;
if (!this._config.debug) {
this.debug = function() {};
}
// Set function to debug print messages
this.client.debug = this.debug;
// Default messages
this.setupOnReceive();
// Receipts
this.setupReceipts();
}
/**
* It will connect to the STOMP broker.
*/
public initAndConnect(): void {
this.initStompClient();
if (!this._config.headers) {
this._config.headers = {};
}
// Attempt connection, passing in a callback
this.client.connect(
this._config.headers,
this.on_connect,
this.on_error
);
this.debug('Connecting...');
this.state.next(StompState.TRYING);
}
/**
* It will disconnect from the STOMP broker.
*/
public disconnect(): void {
// Disconnect if connected. Callback will set CLOSED state
if (this.client && this.client.connected) {
// Notify observers that we are disconnecting!
this.state.next(StompState.DISCONNECTING);
this.client.disconnect(
() => this.state.next(StompState.CLOSED)
);
}
}
/**
* It will return `true` if STOMP broker is connected and `false` otherwise.
* @returns {boolean}
*/
public connected(): boolean {
return this.state.getValue() === StompState.CONNECTED;
}
/**
* It will send a message to a named destination. The message must be `string`.
*
* The message will get locally queued if the STOMP broker is not connected. It will attempt to
* publish queued messages as soon as the broker gets connected.
*
* @param queueName
* @param message
* @param headers
*/
public publish(queueName: string, message: string, headers: StompHeaders = {}): void {
if (this.connected()) {
this.client.send(queueName, headers, message);
} else {
this.debug(`Not connected, queueing ${message}`);
this.queuedMessages.push({queueName: <string>queueName, message: <string>message, headers: headers});
}
}
/** It will send queued messages. */
protected sendQueuedMessages(): void {
const queuedMessages = this.queuedMessages;
this.queuedMessages = [];
this.debug(`Will try sending queued messages ${queuedMessages}`);
for (const queuedMessage of queuedMessages) {
this.debug(`Attempting to send ${queuedMessage}`);
this.publish(queuedMessage.queueName, queuedMessage.message, queuedMessage.headers);
}
}
/**
* It will subscribe to server message queues
*
* This method can be safely called even if the STOMP broker is not connected.
* If the underlying STOMP connection drops and reconnects, it will resubscribe automatically.
*
* If a header field 'ack' is not explicitly passed, 'ack' will be set to 'auto'. If you
* do not understand what it means, please leave it as is.
*
* Note that when working with temporary queues where the subscription request
* creates the
* underlying queue, mssages might be missed during reconnect. This issue is not specific
* to this library but the way STOMP brokers are designed to work.
*
* @param queueName
* @param headers
* @returns {Observable<Stomp.Message>}
*/
public subscribe(queueName: string, headers: StompHeaders = {}): Observable<Stomp.Message> {
/* Well the logic is complicated but works beautifully. RxJS is indeed wonderful.
*
* We need to activate the underlying subscription immediately if Stomp is connected. If not it should
* subscribe when it gets next connected. Further it should re establish the subscription whenever Stomp
* successfully reconnects.
*
* Actual implementation is simple, we filter the BehaviourSubject 'state' so that we can trigger whenever Stomp is
* connected. Since 'state' is a BehaviourSubject, if Stomp is already connected, it will immediately trigger.
*
* The observable that we return to caller remains same across all reconnects, so no special handling needed at
* the message subscriber.
*/
this.debug(`Request to subscribe ${queueName}`);
// By default auto acknowledgement of messages
if (!headers['ack']) {
headers['ack'] = 'auto';
}
const coldObservable = Observable.create(
(messages: Observer<Stomp.Message>) => {
/*
* These variables will be used as part of the closure and work their magic during unsubscribe
*/
let stompSubscription: StompSubscription;
let stompConnectedSubscription: Subscription;
stompConnectedSubscription = this.connectObservable
.subscribe(() => {
this.debug(`Will subscribe to ${queueName}`);
stompSubscription = this.client.subscribe(queueName, (message: Stomp.Message) => {
messages.next(message);
},
headers);
});
return () => { /* cleanup function, will be called when no subscribers are left */
this.debug(`Stop watching connection state (for ${queueName})`);
stompConnectedSubscription.unsubscribe();
if (this.state.getValue() === StompState.CONNECTED) {
this.debug(`Will unsubscribe from ${queueName} at Stomp`);
stompSubscription.unsubscribe();
} else {
this.debug(`Stomp not connected, no need to unsubscribe from ${queueName} at Stomp`);
}
};
});
/**
* Important - convert it to hot Observable - otherwise, if the user code subscribes
* to this observable twice, it will subscribe twice to Stomp broker. (This was happening in the current example).
* A long but good explanatory article at https://medium.com/@benlesh/hot-vs-cold-observables-f8094ed53339
*/
return coldObservable.share();
}
/**
* It will handle messages received in the default queue. Messages that would not be handled otherwise
* get delivered to the default queue.
*/
protected setupOnReceive(): void {
this.defaultMessagesObservable = new Subject();
this.client.onreceive = (message: Stomp.Message) => {
this.defaultMessagesObservable.next(message);
};
}
/**
* It will emit all receipts.
*/
protected setupReceipts(): void {
this.receiptsObservable = new Subject();
this.client.onreceipt = (frame: Stomp.Frame) => {
this.receiptsObservable.next(frame);
};
}
/**
* Wait for receipt, this indicates that server has carried out the related operation
*/
public waitForReceipt(receiptId: string, callback: (frame: Stomp.Frame) => void): void {
this.receiptsObservable.filter((frame: Stomp.Frame) => {
return frame.headers['receipt-id'] === receiptId;
}).first().subscribe((frame: Stomp.Frame) => {
callback(frame);
});
}
/**
* Callback Functions
*
* Note the method signature: () => preserves lexical scope
* if we need to use this.x inside the function
*/
protected debug = (args: any): void => {
console.log(new Date(), args);
}
/** Callback run on successfully connecting to server */
protected on_connect = (frame: Frame) => {
this.debug('Connected');
this._serverHeadersBehaviourSubject.next(frame.headers);
// Indicate our connected state to observers
this.state.next(StompState.CONNECTED);
}
/** Handle errors from stomp.js */
protected on_error = (error: string | Stomp.Message) => {
// Trigger the error subject
this.errorSubject.next(error);
if (typeof error === 'object') {
error = (<Stomp.Message>error).body;
}
this.debug(`Error: ${error}`);
// Check for dropped connection and try reconnecting
if (!this.client.connected) {
// Reset state indicator
this.state.next(StompState.CLOSED);
}
}
}


Ex-BuzzFeed News Reporter Joins The New York Times Styles Section
Jessica Testa will begin her new role covering fashion at the newspaper on Monday.
by Kathryn HopkinsThe New York Times has a new a staff writer on its Styles desk, plucked from an unlikely place.
Ever since Matthew Schneier left for New York Magazine in May, the position had been left unfilled, but Choire Sicha, editor of the Styles section, will announce in a staff memo today that Jessica Testa, formerly a reporter at BuzzFeed, will beginning Monday fill that gap, focusing on fashion.
Testa started at BuzzFeed in 2012, and departed earlier this year when BuzzFeed News shuttered its national desk. She’s written about cold case DNA crime solvers, child marriage laws and women framed for crimes they didn’t commit. “None of this will prepare her for the fashion industry,” Sicha joked.
Vanessa Friedman, the Times’ fashion director and chief fashion critic, explained to WWD that they were attracted to her experience as a reporter, rather than her fashion stripes.
“What was important to us is her experience as a reporter, as a writer, as part of the team and all of that is really stellar,” she said. “We had an amazing pool of applicants and it was a really difficult decision and it took a long time, but in the end we just thought it was a really interesting proposition. She was someone who would definitely bring a fresh point of view and a really deep skill-set to the team.”
Testa got her start at BuzzFeed on the breaking news desk, and previously handled breaking news at The Arizona Republic. She studied journalism at Arizona State University.
Styles is also looking for an experienced and fashion news editor to work with Testa and the rest of the team, alongside Anita Leclerc, fashion editor, and Friedman.
Read more here:
New York Magazine Pulls Features Writer From New York Times
The New York Times Wants to Be Parenting Destination With New Site
New York Times Gets Into Festivals, Derides ‘Content’ at NewFronts


Pirates of the Whirld
A board game about sailing and sinking
Project Info
| Duration | 3 weeks |
| Team Size | Solo Project |
| Course | This game is made as Game Design Adventure #3 - Dice Canyon |
| Links |
Introduction
Who doesn't love dices and sailing! This is a game about sailing or sinking, trading or robbing, alliance or treason, at your call.
If you want to give this game a try and have a great great time, please contact me! (So bad I didn't find a publisher for it!)
Notable Experience
- Independently designed, playtested, and iterated on a board game centered around randomness and pvp
- Designed a deck of cards with varied types for adding strategy depth, creating surprises, balancing players' power
- Designed a battle mechanic with dice that feels fair and balanced
- Recreated the feeling of sailing on a dangerous sea as pirates for the players
Detailed Design Notes
1 - Brainstorm & Initial idea
Brainstorm of this game is fairly easy, or, almost doesn't exist. I had the idea of a sailing game. I love the feeling of sailing across the sea and conquering all kinds of dangers along the way. This idea itself is solid, "automatically themed" and can generate many interesting gameplay mechanics, so I felt confident with it and decided to go with it.
So, the initial idea is: make a game centered around sailing and dices.
And the I came up with the problem statement:
- Make a fun and engaging table top game for 16 - 25 years old people, which can be played in roughly 15 - 30 minutes play sessions. Potentially a good fit to be played during nerd parties
- Use dices as the center for all mechanics
- Give the player some space for strategic planning while keeping a sense of uncertainty (which is, a balance of skill and chance)
Then I came up with the first rule set.
2 - Initial Set of Rules
This is a sailing & trading & battling game happens on the sea. The first game includes: a map, cards, ship tokens, account books, and two dices.
Set up
In the beginning, each player choose his/her ship and starting harbor, and have the chance to buy some goods. Everyone's starting fund is 2,000. Everyone also gets an account book to mark down transactions.
Map
- Island: no one can sail on islands
- Whirl: if one stays in the whirl, in his/her rolling stage:
- If two dices are equal, lose half cargo, else:
- Draw one card
- Nanda & Flola: they are neutral cities, randomly sell goods.
Flow
- Everyone take turns to roll two dices:
- Choose one as the tailwind dice, another as dead wind dice. Movement point is the difference between them. If they equal to each other, the player cannot move, but can draw a card.
- Pirate ship: At the end of each round, two players each roll one dice. The
first dice determines the number of steps the pirate ship can move, the second
dice determines the direction: 1-North, and rotate clockwise (2-Northeast,
etc).
- If pirate ship gets adjacent to a player ship, that player ship sink.
- A ship can trade with port when get adjacent to the port or stops in the port.
Cards
(Cards are not included in this document)
- If not specified, one can use action card at anytime
- Event cards are triggered when drawn
- Improv cards are used when drawn
3 - Iterations
3.1 - First iteration
Analysis:
Playtesters: Yidi himself testing in his head.
The pirate ship looks like a good idea, but it's hard to find a convenient and clean way to move it, and it's hard to decide an appropriate penalty. In the first place, I add the pirate ship to increase interactions between players, but this seems like not the best way.
Modifications
Remove the pirate ship, and add the following rule:
- If a player(A) sails onto or adjacent to another player (B)'s tile, battle:
- Each of them roll two dices:
- if A is higher: A get half of B's cargo
- Else: B is free to move 2 tiles
- Each of them roll two dices:
This rule will vastly increase the interaction between players, I think it's promising
Potential problem
- Now I'm not sure whether the board I'm using is big enough. And the dice roll rules seem unusual. Focus on them in the next playtest
3.2 - Second iteration
Erhan (ETC 1st year) and I played the game.
Analysis
Erhan was confused with most rules, even I explained them in our native language. So I think it's a good idea to make more clarifications for rules.
Modifications
So, this iteration focuses on clarification of rules.
- If a ship stops in the whirl or get dragged into the whirl, it's stuck. When
stuck:
- The player need to roll a number that's larger than 9 to get out. The player can choose one of the tile adjacent to the whirl. And his/her turn ends.
- A ship can use partial movement points to stop in a port. When a ship stops in a port, the ship can trade with the port. After trading, the ship can use remaining movement points.
- After dice roll and movement, draw one card.
3.3 - Third iteration
Lotus (ETC 1st year), Xuejun (ETC 1st year), Erhan (ETC 1st year) and I played the game.
People love the unusual dice roll, and they enjoyed the game! And the potential problem listed in iteration 1 seems to be not a problem at all.
Analysis
They loved the rich interations between players, the mechanics of the whirld, the event and action cards, and the rich system. However, the numerical system of this version is totally messed up! For example, Xuejun got a "full sail" cards, which increases her movement speed by 100% during one turn, and she rolled a 6 and a 1, which gives her a total of 5 * 2 = 10 movement points! She sailed across the sea and got an easy victory.
Beside that, there is still many confusions about the rules.
One final thing, Erhan seems to not like the improv cards - he always discard them. This is not a good signal.
Modifications
More clarifications:
- Battle is a choice
- Can't battle ships that are in the whirld or port
- Each neutral port only sell one good at a time
- Inflation also affect new goods
- Two inflation cards means: x1.4. Not x 1.44
I also did some modifications to the cards. One major change is to the "full sail" cards, I changed the extra movement point from 100% to 50%. The reason why I have this card is to give the player the chance to move faster while still taking some risk. Because this card can only be played before dice roll, so its effectiveness still depend on the dice roll. If the player rolls a 2 + 1, the card only gives 1 extra movement points. If the player rolls a 6 + 1, the card gives 3 extra movement points.
3.4 - Fourth Iteration
Tommy (a CS major from GCS), Euna (ETC 1st year), SorryIForgotHisNameA (ETC 2nd year), and SorryIForgotHisNameB (a business major) played this game during the class.
Analysis
They thought the game was surely fun! But the numercial system is totally broken, and the improv cards can be either awkward or interesting, all depending on the people.
They gave many nice suggestions, such as making improv cards compulsory, limiting the cargo capacity. They also felt it's so hard to get out of the whirl, and the neutral ports are not really helpful.
Modifications
- Neutral port price changed to 50
- Cargo limit: 30
- When roll two identical dice: move point = point
- When in whirl: roll more than 6 to get out
3.5 - Fifth iteration
Amukta (ECE Junior), Zohaib (HCI Master), and I played the game.
Analysis
This playtesting reveals the math problems in this game!!! It's almost impossible to calculate the numbers after drawing one inflation cards (which increases all prices by 20%).
Also, no one want to write on the ship.
Also, the goods availability, and prices, chance too frequently. It's hard for players to make strategic planning.
They also give me the suggestion to use tokens, but I would need a LOT of them, which makes it not so feasible.
Modifications
If people don't want to write the goods on their ship, and I don't want the ship to look dull, why not give them the chance to name their ships!! It must feel good to sail a ship with a name on it. It's a feel of ownership, and it helps to get players immersed.
Then, all trading information can be written on the account book.
To deal with the math problem:
- When you get a decimal, convert it to an integer by rounding up (always do this for everything)
- I changed the "inflation" cards. Right now, they only change the buy prices at all ports without introducing too much decimals.
3.6 - Sixth iteration
I played the new version with myself. This time I focuses on cards.
Analysis
Cards are still a great idea, but the current design is not perfect. First, improv cards are still troublesome. Second, storm card is too OP. Third, there are too few movement intervention cards (like Frame, Full Sail, Dead Wind). I will make modifications to them
Modifications
- For improv cards: make them an optional module that the player can choose whether to include them or not. It would be a nice idea to include them after 2 beers. Also, I changed all of them to involve all players, rather than selecting one player and embarrase him/her.
- For the storm card, I introduced dice roll to it. Player will only lose goods if rolls smaller than 7. This makes the game more random and more exciting!
- I added more movement intervention cards. Also, one new card: "Tail wind" - get two movement points this turn.
- Also a card on combat: "Superior strategy" - instantly win a combat.
3.7 - Seventh iteration
Shan (ETC 1st year), Srujani (ETC 1st year), and I played the game.
Analysis
Some confusion about the attack mechanics. Other than that, the playtest went well. And they seem to enjoy writing on the account book.
Modifications
The new map provides less information. I added goods beside ports to show what they sell.
And for attack:
- Attack costs no movement points, and one can only attack once in one turn.
3.8 - Eighth iteration
I had a final playthrough with myself before class. And I feel like the neutral ports is kind annoying - they are not predictable and really change a lot. However, if by any chance a player can buy some good from them, it's very OP! I want to find a way to deal with them.
Actually, why don't I set more limitations on harvest cards (harvest cards change the goods being sold at neutral ports). Now, each harvest cards only provide 10 items which is priced at 50/each. So the neutral port will still play a good role in the game, but is still not too OP. I think it's promising. I'll do another playtest after the deadline to find out :)
4 - Final Rule Set
For descriptions of map elements, cards, and battle mechanics, see the attached sheets in the package.
4.1 - Set up
Place the map on a table. Each player gets to pick a ship, name the ship, and write the name on it. Each player gets an account book, that matches the ship's color. Each player gets 2,000 golds as starting fund.
Then, each player choose a starting port. (The map is symmetric so it doesn't really matter! Choose anyone you want!)
Each player rolls two dices, whoever largest gets to move first.
4.2 - Goal
Whoever gets 20,000 golds first wins!
4.3 - Flow
Player take turns to:
- Roll two dices. The movement is the different between two dices. However, if the two dice are identical, like two 5s, the movement point will be 5 instead of 0.
- The player can move as he/she wants.
- During/before/after movement, player can trade with ports. Player can only
trade with ports when sitting inside them.
- Trading prices are written on the "price list" sheet that's included in the package. (All additional sheets are also attached to this document)
- During/before/after movement, if a player (A) gets adjacent to another
player (B)'s ship, or onto another player (B)'s ship, player A can choose to
attack player B. See the "Battle mechanics" sheet for more information
- Note: each player can only attack once in her/his turn. And attacking doesn't cost movement points.
- Then the turn ends. The player draws a card. Move on to the next player's turn.
- During/before/after movement, player can trade with ports. Player can only
trade with ports when sitting inside them.
Notes:
- The player can use as many action cards during his/her turn as he/she wants.
- If a ship is in the whirld, or in a port, other ships cannot attack it.
- For rules on map areas and cards, see attached sheets in the package.
One more thing: Remember to draw a card at the end of your turn.