| I l@ve RuBoard |
8.7 Time Tools, Threads, and AnimationThe last stop on our widget tour is the most unique. Tkinter also comes with a handful of tools that have to do with the event-driven programming model, not graphics displayed on a computer screen. Some GUI applications need to perform background activities periodically. For example, to "blink" a widget's appearance, we'd like to register a callback handler to be invoked at regular time intervals. Similarly, it's not a good idea to let a long-running file operation block other activity in a GUI; if the event loop could be forced to update periodically, the GUI could remain responsive. Tkinter comes with tools for both scheduling such delayed actions and forcing screen updates:
We won't go into further details on all of these tools here; see other Tk and Tkinter documentation for more information. 8.7.1 Using Threads with GUIsKeep in mind that for many programs, Python's thread support that we met in Chapter 3, can serve some of the same roles as the Tkinter tools listed in the previous section. For instance, to avoid blocking a GUI during a long-running file or socket transfer, the transfer can simply be run in a spawned thread, while the rest of the program continues to run normally. We'll meet such threaded GUI programs in Part III (e.g., PyMailGui in Chapter 11). Similarly, GUIs that must watch for inputs on pipes or sockets can do so in spawned threads (or after callbacks), without blocking the GUI itself. If you do use threads in Tkinter programs, however, only the main thread (the one that built the GUI and started the mainloop) can make GUI calls. Even things like the update method described in the previous section cannot be called from spawned threads in a GUI program -- they'll likely trigger very strange program crashes. This GUI thread story may be improved in future Python and Tkinter releases, but imposes a few structural and platform-specific constraints today. For example, because spawned threads cannot perform GUI processing, they must generally communicate with the main thread using global variables, as required by the application. A thread that watches a socket, for instance, might simply set global variables that trigger GUI changes in after event callbacks. Note that this is not a Python or Tkinter limitation (it's much lower in the software hierarchy that runs your GUI), and may go away in the future. In addition, some Tkinter canvas calls may actually be thread-safe (see the animation script in Example 8-31). We'll revisit this limitation later in this book, when we meet larger threaded GUI programs. 8.7.2 Using the after MethodThe after method allows scripts to schedule a callback handler to be run at some time in the future, and we'll use this often in later examples in this book. For instance, in Chapter 9 we'll meet a clock program that uses after to wake up 10 times per second and check for a new time, and an image slideshow program that uses after to schedule the next photo display (see PyClock and PyView). To illustrate the basics of scheduled callbacks, Example 8-26 does something a bit different. Example 8-26. PP2E\Gui\Tour\alarm.py#!/usr/local/bin/python from Tkinter import * class Alarm(Frame): def repeater(self): # on every N millisecs self.bell() # beep now self.stopper.flash() # flash button now self.after(self.msecs, self.repeater) # reschedule handler def __init__(self, msecs=1000): # default = 1 second Frame.__init__(self) self.msecs = msecs self.pack() stopper = Button(self, text='Stop the beeps!', command=self.quit) stopper.pack() stopper.config(bg='navy', fg='white', bd=8) self.stopper = stopper self.repeater() if __name__ == '__main__': Alarm(msecs=1000).mainloop() This script builds the window in Figure 8-37 and periodically calls both the button widget's flash method to make the button flash momentarily (it alternates colors quickly), and the Tkinter bell method to call your system's sound interface. The repeater method beeps and flashes once, and schedules a callback to be invoked after a specific amount of time with the after method. Figure 8-37. Stop the beeps!But after doesn't pause the caller: callbacks are scheduled to occur in the background, while the program performs other processing -- technically, as soon as the Tk event loop is able to notice the time rollover. To make this work, repeater calls after each time through, to reschedule the callback. Delayed events are one-shot callbacks; to repeat the event, we need to reschedule. The net effect is that when this script runs, it starts beeping and flashing once its one-button window pops up. And it keeps beeping and flashing. And beeping. And flashing. Other activities and GUI operations don't affect it. Even if the window is iconified, the beeping continues because Tkinter timer events fire in the background.  By changing the msecs delay, you can make this beep as fast or slow as your system allows (some platforms can't beep as fast as others). And this may or may not be the best demo to launch in a crowded office, but at least you've been warned. <IP_ADDRESS> Hiding and redrawing widgets and windowsThe button flash method flashes the widget, but it's easy to dynamically change other appearance options of widgets like buttons, labels, and text, with the widget config method. For instance, you can also achieve a flash-like effect by manually reversing foreground and background colors with the widget config method, in scheduled after callbacks. Just for fun, Example 8-27 specializes the alarm to go a step further. Example 8-27. PP2E\Gui\Tour\alarm-hide.pyfrom Tkinter import * import alarm class Alarm(alarm.Alarm): # change alarm callback def repeater(self): # on every N millisecs self.bell() # beep now if self.shown: self.stopper.pack_forget() # hide or erase button now else: # or reverse colors, flash... self.stopper.pack() self.shown = not self.shown # toggle state for next time self.after(self.msecs, self.repeater) # reschedule handler def __init__(self, msecs=1000): # default = 1 second self.shown = 0 alarm.Alarm.__init__(self, msecs) if __name__ == '__main__': Alarm(msecs=500).mainloop() When this script is run, the same window appears, but the button is erased or redrawn on alternating timer events. The widget pack_forget method erases (unmaps) a drawn widget, and pack makes it show up again; grid_forget and grid similarly hide and show widgets in a grid. The pack_forget method is useful for dynamically drawing and changing a running GUI. For instance, you can be selective about which components are displayed, and build widgets ahead of time and show them only as needed. Here, it just means that users must press the button while it's displayed, or else the noise keeps going. To hide and unhide the entire window instead of just one widget within it, use the top-level window widget withdraw and deiconify methods. The withdraw method, demonstrated in Example 8-28, completely erases the window and its icon (use iconify if you want the window's icon to appear during a hide), and the state method returns the window's current state ("normal", "iconic", or "withdrawn"). These are also useful to pop up prebuilt dialog windows dynamically, but are perhaps less practical here. Example 8-28. PP2E\Gui\Tour\alarm-withdraw.pyfrom Tkinter import * import alarm class Alarm(alarm.Alarm): def repeater(self): # on every N millisecs self.bell() # beep now if self.master.state() == 'normal': # is window displayed? self.master.withdraw() # hide entire window, no icon else: # iconify shrinks to an icon self.master.deiconify() # else redraw entire window self.master.lift() # and raise above others self.after(self.msecs, self.repeater) # reschedule handler if __name__ == '__main__': Alarm().mainloop() # master = default Tk root This works the same, but the entire window appears or disappears on beeps -- you have to press it when it's shown. There are lots of other effects you could add to the alarm. Whether your buttons and windows should flash and disappear or not, though, probably depends less on Tkinter technology than on your users' patience. 8.7.3 Simple Animation TechniquesApart from the direct shape moves in the canvasDraw example, all of the GUIs presented so far in this part of the book have been fairly static. This last section shows you how to change that, by adding simple shape movement animations to the canvas drawing example listed in Example 8-15. It also demonstrates the notion of canvas tags -- the move operations performed here move all canvas objects associated with a tag at once. All oval shapes move if you press "o", and all rectangles move if you press "r"; as mentioned earlier, canvas operation methods accept both object IDs and tag names. But the main goal here is to illustrate simple animation techniques using the time-based tools described earlier in this section. There are three basic ways to move objects around a canvas:
Of these three schemes, the first yields the smoothest animations but makes other operations sluggish during movement, the second seems to yield slower motion than the others but is safer than using threads in general, and the last two both allow multiple objects to be in motion at the same time. <IP_ADDRESS> Using time.sleep loopsThe next three sections demonstrate the code structure of all three approaches in turn, with new subclasses of the canvasDraw example we met in Example 8-15. Example 8-29 illustrates the first approach. Example 8-29. PP2E\Gui\Tour\canvasDraw_tags.py################################################################## # add tagged moves with time.sleep (not widget.after or threads); # time.sleep does not block the gui event loop while pausing, but # screen not redrawn until callback returns or widget.update call; # the currently running onMove callback gets exclusive attention # until it returns: others pause if press 'r' or 'o' during move; ################################################################## from Tkinter import * import canvasDraw, time class CanvasEventsDemo(canvasDraw.CanvasEventsDemo): def __init__(self, parent=None): canvasDraw.CanvasEventsDemo.__init__(self, parent) self.canvas.create_text(75, 8, text='Press o and r to move shapes') self.canvas.master.bind('<KeyPress-o>', self.onMoveOvals) self.canvas.master.bind('<KeyPress-r>', self.onMoveRectangles) self.kinds = self.create_oval_tagged, self.create_rectangle_tagged def create_oval_tagged(self, x1, y1, x2, y2): objectId = self.canvas.create_oval(x1, y1, x2, y2) self.canvas.itemconfig(objectId, tag='ovals', fill='blue') return objectId def create_rectangle_tagged(self, x1, y1, x2, y2): objectId = self.canvas.create_rectangle(x1, y1, x2, y2) self.canvas.itemconfig(objectId, tag='rectangles', fill='red') return objectId def onMoveOvals(self, event): print 'moving ovals' self.moveInSquares(tag='ovals') # move all tagged ovals def onMoveRectangles(self, event): print 'moving rectangles' self.moveInSquares(tag='rectangles') def moveInSquares(self, tag): # 5 reps of 4 times per sec for i in range(5): for (diffx, diffy) in [(+20, 0), (0, +20), (-20, 0), (0, -20)]: self.canvas.move(tag, diffx, diffy) self.canvas.update() # force screen redraw/update time.sleep(0.25) # pause, but don't block gui if __name__ == '__main__': CanvasEventsDemo() mainloop() All three of the scripts in this section create a window of blue ovals and red rectangles as you drag new shapes out with the left mouse button. The drag-out implementation itself is inherited from the superclass. A right mouse button click still moves a single shape immediately, and a double-left click still clears the canvas too -- other operations inherited from the original superclass. In fact, all this new script really does is change the object creation calls to add tags and colors here, add a text field, and add bindings and callbacks for motion. Figure 8-38 shows what this subclass's window looks like after dragging out a few shapes to be animated. Figure 8-38. Drag-out objects ready to be animatedThe "o" and "r" keys are set up to start animation of all the ovals and rectangles you've drawn, respectively. Pressing "o", for example, makes all the blue ovals start moving synchronously. Objects are animated to mark out five squares around their location, and move four times per second. New objects drawn while others are in motion start to move too, because they are tagged. You need to run these live to get a feel for the simple animations they implement, of course (you could try moving this book back and forth and up and down, but it's not quite the same, and might look silly in public places). <IP_ADDRESS> Using widget.after eventsThe main drawback of this first approach is that only one animation can be going at once: if you press "r" or "o" while a move is in progress, the new request puts the prior movement on hold until it finishes because each move callback handler assumes the only thread of control while it runs. Screen updates are a bit sluggish while moves are in progress too, because they only happen as often as manual update calls are made (try a drag-out or a cover/uncover of the window during a move to see for yourself). Example 8-30 specializes just the moveInSquares method to remove such limitations. Example 8-30. PP2E\Gui\Tour\canvasDraw_tags_after.py######################################################################## # similar, but with .after scheduled events, not time.sleep loops; # because these are scheduled events, this allows both ovals and # rectangles to be moving at the _same_ time and does not require # update calls to refresh the gui (only one time.sleep loop callback # can be running at once, and blocks others started until it returns); # the motion gets wild if you press 'o' or 'r' while move in progress, # though--multiple move updates start firing around the same time; ######################################################################## from Tkinter import * import canvasDraw_tags class CanvasEventsDemo(canvasDraw_tags.CanvasEventsDemo): def moveEm(self, tag, moremoves): (diffx, diffy), moremoves = moremoves[0], moremoves[1:] self.canvas.move(tag, diffx, diffy) if moremoves: self.canvas.after(250, self.moveEm, tag, moremoves) def moveInSquares(self, tag): allmoves = [(+20, 0), (0, +20), (-20, 0), (0, -20)] * 5 self.moveEm(tag, allmoves) if __name__ == '__main__': CanvasEventsDemo() mainloop() This version lets you make both ovals and rectangles move at the same time -- drag out a few ovals and rectangles, and then press "o" and then "r" right away to make this go. In fact, try pressing both keys a few times; the more you press, the more the objects move, because multiple scheduled events are firing and moving objects from wherever they happen to be positioned. If you drag out a new shape during a move, it starts moving immediately as before. <IP_ADDRESS> Using multiple time.sleep loop threadsRunning animations in threads can sometimes achieve the same effect; it can be dangerous to update the screen from a spawned thread in general, but works in this example, at least on Windows. Example 8-31 runs each animation task as an independent and parallel thread. That is, each time you press the "o" or "r" keys to start an animation, a new thread is spawned to do the work. This works on Windows, but failed on Linux at the time I was writing this book -- the screen is not updated as threads change it, so you won't see any changes until later GUI events. Example 8-31. PP2E\Gui\Tour\canvasDraw_tags_thread.py######################################################################## # similar, but run time.sleep loops in parallel with threads, not # .after events or single active time.sleep loop; because threads run # in parallel, this also allows ovals and rectangles to be moving at # the _same_ time and does not require update calls to refresh the gui: # in fact, calling .update() can make this _crash_ today, though some # canvas calls seem to be thread safe or else this wouldn't work at all; ######################################################################## from Tkinter import * import canvasDraw_tags import thread, time class CanvasEventsDemo(canvasDraw_tags.CanvasEventsDemo): def moveEm(self, tag): for i in range(5): for (diffx, diffy) in [(+20, 0), (0, +20), (-20, 0), (0, -20)]: self.canvas.move(tag, diffx, diffy) time.sleep(0.25) # pause this thread only def moveInSquares(self, tag): thread.start_new_thread(self.moveEm, (tag,)) if __name__ == '__main__': CanvasEventsDemo() mainloop() This version lets you move shapes at the same time just like Example 8-30, but this time it's a reflection of threads running in parallel. In fact, this uses the same scheme as the first time.sleep version. Here, though, there is more than one active thread of control, so move handlers can overlap in time -- time.sleep only blocks the calling thread, not the program at large. This seems to work (at least on Windows), but it is usually safer to have your threads do number crunching only, and let the main thread (the one that built the GUI) handle any screen updates. It's not impossible that GUI threads may be better supported in later Tkinter releases, so see more recent releases for more details. <IP_ADDRESS> Other animation optionsWe'll revisit animation in Chapter 9's PyDraw example; there, all three techniques will be resurrected to move shapes, text, and photos to arbitrary spots on a canvas marked with a mouseclick. And although the canvas widget's absolute coordinate system make it the workhorse of most nontrivial animations, Tkinter animation in general is limited mostly by your imagination. As we saw in the flashing and hiding alarm examples earlier, it's easy to change the appearance of other kinds of widgets dynamically too; you can even erase and redraw widgets and windows on the fly. I should also note that the sorts of movement and animation techniques shown in this chapter and the next are suitable for many game-like programs, but not all. For more advanced 3D animation needs, be sure to also see the support in the PIL extension package for common animation and movie file formats such as FLI and MPEG. As currently implemented, Python is not widely used as the sole implementation language of graphic-intensive game programs, but it can still be used as both a prototyping and scripting language for such products.[4] And when integrated with 3D graphics libraries, it can serve even broader roles. See http://www.python.org for links to other available extensions in this domain.
|
| I l@ve RuBoard |


Remove the "questions for you" sections.
Remove the left side-bar.
Remove the "topic you may like" sections.
Remove links (ads).


PyGrEn Query Tool
Traverse/Look Around
SQL Query
Scan
API
Query History:
Subject:
Predicate(s):
Object (optional):
Max Distance:
1
2
3
4
5
6
Download results:
Query History:


jQuery
jQuery
jQuery is a fast, small, and feature-rich JavaScript library.
For information on how to get started and how to use jQuery, please see jQuery’s documentation. For source files and issues, please visit the jQuery repo.
If upgrading, please see the blog post for 3.2.1. This includes notable differences from the previous version and a more readable changelog.
Including jQuery
Below are some of the most common ways to include jQuery.
Browser
Script tag
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
Babel
Babel is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.
import $ from "jquery";
Browserify/Webpack
There are several ways to use Browserify and Webpack. For more information on using these tools, please refer to the corresponding project’s documention. In the script, including jQuery will usually look like this…
var $ = require("jquery");
AMD (Asynchronous Module Definition)
AMD is a module format built for the browser. For more information, we recommend require.js’ documentation.
define(["jquery"], function($) {
});
Node
To include jQuery in Node, first install with npm.
npm install jquery
For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as jsdom. This can be useful for testing purposes.
require("jsdom").env("", function(err, window) {
if (err) {
console.error(err);
return;
}
var $ = require("jquery")(window);
});


PRESENTED BY
Presented by
More
Less
Terms
Dollhouse
Floor plan
Highlights
Close
1
of
Explore 3D Space
3D Showcase
Share Link
Close
How to Navigate
NEXT
PREVIOUS


Trivia Outlet
Trivia outlet quiz generator
Quiz name*
Please fill this required field
Quiz type
Quiz Category
Submit
ID
Q_TYPE
CAT
QUESTION.
ID
Q_TYPE
CAT
QUESTION.
questions selected
Generate Quiz
Html code
Test It


The following downloads are releases of Strolch, but remember that it is always possible (and fairly easily) to re-build the artifacts on your own by following the easy steps on the development page
Releases
Latest: Version 1.0.0-RC4
Strolch Components:
Strolch tutorial/demo apps:
Snapshot: 1.0.0-Snapshot
The following downloads are nightly builds of the currently successfully build artifacts which were built on the continuous integration infrastructure:
Strolch Components:
Strolch tutorial/demo apps:
Moose Image
Moose is a software and data analysis tool written in Pharo and implements many of the ideas behind the Humane Assessment philosophy. To be able to analyze Strolch we provide an MSE and Moose Image to use with the Pharo VM
The MSE was generated using VerveineJ


Who says nothing is FREE? At FREE.com, the Internets' most popular free site, thousands of people find something for nothing every day. Over 8000 Internet sites offering products and services at no charge. New free sites added every day. Hundreds of categories, minimum of 10,000 Free items Quick and easy Search allows you to find just what you're looking for. You can suggest a newfree site that you like for addition to FREE.com Review the offers and tell other Internet users what you thought of them. Make FREE.com your first choice when searching for the best free sites and offers on the Net. Oh, and by the way, it's all Free!
Existing members use this link to login to Free.com
Use this link to register at Free.com, it is completly FREE!
Questions? Problems? Contact us at<EMAIL_ADDRESS>© 2001-2002 National A-1 Advertising. All Rights Reserved.
- read the disclaimer -


--- layout: post status: publish published: true title: No podcast this week. author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>wordpress_id: 937 wordpress_url: http://ivyenvy.com/?p=937 date: '2009-05-31 16:07:34 +0000' date_gmt: '2009-05-31 22:07:34 +0000' categories: - Podcast tags: - Podcast comments: [] ---
We will not have a podcast episode for this week. Two cases of electronic malfunction have taken out both of our options for recording.
We will hopefully be back in the saddle next weekend.


{% extends "base.html" %} {% block content %}
Supply Tracker Sales CRM Ported from a development that started on 25 January 2016, the main goal of this tool is to help sellers keep track of their supply by recording every in and out activitiy in their business.
© Credits: 2016 Andi Winata C Tjong | Advanced feature development: @codecakes 2019
{% endblock %}


Base class for classes that import metadata associated with a region of interest (ROI).
More...
|
| | roi_meta_class () |
| | Constructor. More...
|
| |
| virtual | ~roi_meta_class () |
| | Destructor. More...
|
| |
| int | set_get_interval (float s) |
| | Set length of time interval for showing data. More...
|
| |
| int | set_current_time (float s) |
| | Set current time. More...
|
| |
| int | set_read_tmin (float tmin) |
| | Set minimum time. More...
|
| |
| int | set_read_tmax (float tmax) |
| | Set maximum time. More...
|
| |
| int | set_sensor_offset (double lat, double lon, float elev) |
| | Set offset in latitude, longitude and elevation to translate all sensor locations to different map. More...
|
| |
| int | is_sensor_loc () |
| | Return flag indicating if there are sensor locations associated with each dwell. More...
|
| |
| int | is_sensor_footprint () |
| | Return flag indicating if there are sensor footprints associated with each dwell. More...
|
| |
| int | is_target_locs () |
| | Return flag indicating if there are target locations associated with each dwell (variable number, 0 to large number). More...
|
| |
| int | get_n_dwells () |
| | Get the number of dwells read. More...
|
| |
| int | get_n_points (int idwell) |
| | For a given dwell number, get the number of hits. More...
|
| |
| float | get_time (int idwell) |
| | For a given dwell number, get the corresponding time. More...
|
| |
| float | get_sensor_north (int idwell) |
| | For a given dwell number, get the sensor Northing. More...
|
| |
| float | get_sensor_east (int idwell) |
| | For a given dwell number, get the sensor Easting. More...
|
| |
| float | get_sensor_elev (int idwell) |
| | For a given dwell number, get the sensor elevation. More...
|
| |
| float | get_target_x (int idwell, int itar) |
| | For a given dwell number and target get target loc. More...
|
| |
| float | get_target_y (int idwell, int itar) |
| | For a given dwell number and target get target loc. More...
|
| |
| float | get_target_z (int idwell, int itar) |
| | For a given dwell number and target get target loc. More...
|
| |
| float | get_target_v (int idwell, int itar) |
| | For a given dwell number and target get target velocity. More...
|
| |
| float | get_footprint_x (int idwell, int ipt) |
| | For vertices for 4 points defining the sensor footprint. More...
|
| |
| float | get_footprint_y (int idwell, int ipt) |
| | For vertices for 4 points defining the sensor footprint. More...
|
| |
| virtual int | calc_dwell_current (int &idwell) |
| | Calculate the last dwell within the time window. More...
|
| |
| virtual int | calc_dwell_history (int &idwell) |
| |
| | vector_layer_class () |
| | Constructor. More...
|
| |
| virtual | ~vector_layer_class () |
| | Destructor. More...
|
| |
| int | register_draw_data_class (draw_data_class *draw_datai) |
| | Register data structure for all features. More...
|
| |
| int | set_read_tmin (float tmin) |
| | Set minimum time. More...
|
| |
| int | set_read_tmax (float tmax) |
| | Set maximum time. More...
|
| |
| int | set_default_altitude_mode (int mode) |
| | Set Default altitude mode. More...
|
| |
| int | set_default_fill_mode (int mode) |
| | Set Default fill mode. More...
|
| |
| int | set_default_colors (float red, float grn, float blu) |
| | Set Default color for all objects.  More...
|
| |
| virtual | ~base_jfd_class () |
| | Destructor. More...
|
| |
| int | set_diag_flag (int flag) |
| | Set level of diagnostics. More...
|
| |
| int | register_coord_system (gps_calc_class *gps_calc_in) |
| | Register the common gps_calc_class for defining the current coordinate systems and transformations between them. More...
|
| |
| const char * | get_type () |
| | Get the name of the class. More...
|
| |
| int | warning (int oiv_window_flag, const char *message) |
| | Open dialog window with warning. More...
|
| |
| int | warning_s (string cmessage, string smessage) |
| | Open dialog window with 2-part warning message. More...
|
| |
| int | exit_safe (int oiv_window_flag, const char *message) |
| | Open dialog window with fatal error message. More...
|
| |
| int | exit_safe_s (string message, string smessage) |
| | Open dialog window with fatal error message. More...
|
| |
| virtual int | clear_all () |
| |
| virtual int | read_file (string sfilename) |
| | Read file: all functions including open, read header and data and close – Virtual. More...
|
| |
| virtual int | read_file_open (string sfilename) |
| | Read file: only the open part of the entire read-file – Virtual. More...
|
| |
| virtual int | read_file_header () |
| | Read file: only the read-header part of the entire read-file – Virtual. More...
|
| |
| virtual int | read_file_data () |
| | Read file: only the read-data part of the entire read-file – Virtual. More...
|
| |
| virtual int | read_file_close () |
| | Read file: only the close part of the entire read-file – Virtual. More...
|
| |
| virtual int | write_file (string sfilename) |
| | Write file: entire process of open, write header and data and close – Virtual. More...
|
| |
| virtual int | write_parms (FILE *tiff_fd) |
| | Write parameters to the currently opened ASCII file – for saving all relevent parameters to an output Parameter file. More...
|
| |
|
| int | swap_flag |
| | 1 iff byteswapping necessary More...
|
| |
| int | truncate_flag |
| | 1 for eof, 2 for no more useful data in file, so stop reading More...
|
| |
| int | ndwells |
| | No. of dwells (discrete times where data taken) More...
|
| |
| int | n_target_reports |
| | Current total number of target points (over all dwells) More...
|
| |
| int | n_warn |
| | Max no. of warnings. More...
|
| |
| int | sensor_loc_flag |
| | 1 iff sensor loc associated with each dwell More...
|
| |
| int | sensor_footprint_flag |
| | 1 if sensor footprint quadrangle associated with each dwell More...
|
| |
| int | target_loc_flag |
| | 1 iff target locs usually associated with each dwell (may vary from 0 to large number, different for each dwell) More...
|
| |
| float | time_delta |
| | Time – Time difference between samples (<0 if not regular samples) More...
|
| |
| float | time_interval |
| | Time – Interval (cur-time – past-time) to get data. More...
|
| |
| float | time_current |
| | Time – Current time. More...
|
| |
| double | sensor_offset_lat |
| | Sensor – Latitude offset to translate sensor location to different map. More...
|
| |
| double | sensor_offset_lon |
| | Sensor – Longitude offset to translate sensor location to different map. More...
|
| |
| float | sensor_offset_elev |
| | Sensor – Elevation offset to translate sensor location to different map. More...
|
| |
| std::vector< float > | north_sensora |
| | Per dwell – Sensor loc (rel to origin) More...
|
| |
| std::vector< float > | east_sensora |
| | Per dwell – Sensor loc (rel to origin) More...
|
| |
| std::vector< float > | elev_sensora |
| | Per dwell – Sensor loc (rel to origin) More...
|
| |
| std::vector< float > | timea |
| | Per dwell – UTC Time[idwell] in sec. More...
|
| |
| std::vector< int > | npta |
| | Per dwell – Npoints[idwell]. More...
|
| |
| std::vector< int > | data_start_index |
| | Per dwell – starting index in target data vector. More...
|
| |
| std::vector< float > | footprint_x |
| | Per dwell – Footprint loc – 4*nDwells (rel to origin) More...
|
| |
| std::vector< float > | footprint_y |
| | Per dwell – Footprint loc – 4*nDwells (rel to origin) More...
|
| |
| std::vector< float > | target_x |
| | Per target report – target north, east (rel to origin) and vel [idwell][3*ipt]. More...
|
| |
| std::vector< float > | target_y |
| | Per target report – target north, east (rel to origin) and vel [idwell][3*ipt]. More...
|
| |
| std::vector< float > | target_z |
| | Per target report – target north, east (rel to origin) and vel [idwell][3*ipt]. More...
|
| |
| std::vector< float > | target_v |
| | Per target report – target north, east (rel to origin) and vel [idwell][3*ipt]. More...
|
| |
| int | read_tmin |
| |
| int | read_tmax |
| | Time – Read only data between these lims. More...
|
| |
| int | read_tmin_flag |
| |
| int | read_tmax_flag |
| | Time – Flags that limits have been set. More...
|
| |
| int | format_flag |
| | Format – see above. More...
|
| |
| int | style_flag |
| | Draw style – not used currently but may be necessary for ambiguous data. More...
|
| |
| int | ground_overlay_flag |
| | 1 iff contains KML-style ground overlay More...
|
| |
| int | DefaultAltitudeMode |
| | KML altitude mode : 0 = clamp-to-ground(default), 1 = relative-to-ground, 2 = absolute, 4= relative-to-internal-attribute. More...
|
| |
| int | DefaultFillMode |
| | Polygon fill mode: 0=wireframe, 1=fill. More...
|
| |
| float | red_default |
| |
| float | grn_default |
| |
| float | blu_default |
| | Default colors for all objects [0,1]. More...
|
| |
| draw_data_class * | draw_data |
| | Helper class that stores all data to be read/written. More...
|
| |
| time_conversion_class * | time_conversion |
| | Helper class for time conversions. More...
|
| |
| gps_calc_class * | gps_calc_local |
| | Helper class if local coords different than global. More...
|
| |
| int | diag_flag |
| | Diagnostic level – 0=none, 1=little, 2=moderate, 3=heavy. More...
|
| |
| int | opsys_flag |
| | Operating system – 0=unix, 1=windows, 2=linux. More...
|
| |
| char * | class_type |
| | Unique name for each child class. More...
|
| |
| int | localCoordFlag |
| | Coord systems – -1=unknown local coord system, 0=local same as global, Positive=EPSG where known local coord different from global. More...
|
| |
| gps_calc_class * | gps_calc |
| | Coord systems – Worker class to define global coordinate systems and transformations. More...
|
| |
Base class for classes that import metadata associated with a region of interest (ROI).
This includes target locations within the ROI (tracks) and the footprint of the ROI.


In Game 1 of the American League Division Series, Trevor Bauer and the Mets stood in the way of the Yankees earning a victory.
In Game 2, expect Cleveland's ace, Corey Kluber, and weather to be the biggest deterrents to an all-important Yankees split.
Inclement weather is in the forecast for Friday evening in the Cleveland area--potentially impacting when or if the game is played.
Here's what the radar looks like for the area as Friday moves along. As you can see, rain is part of the equation.
Cleveland @Indians , New York @Yankees #ALDS Game 2 weather forecast: What you need to know about rain chances https://t.co/6j2NLRhTAF pic.twitter.com/7CUFpUtIiU
-- Kelly Reardon (@KellyRWeather) October 5, 2017
According to Cleveland.com, rain will be in the area of Progressive Field throughout the day.
By 5:08 p.m. EST--the scheduled time for first pitch--chances are under 50 percent, but still present. That could mean a delay early on, either before first pitch or during the early innings.
A complete rainout would shift the series and cost both Cleveland and New York an off day on Saturday. If Major League Baseball cancels Game 2 on Friday night, it would be played on Saturday--wiping away the travel day between Game 2 and Game 3 on Sunday in New York.
That could hurt Cleveland in the long run (Kluber may not be able to come back for a potential Game 5 in relief) or New York in the short run (less off days means less rest time, ability for Yankees manager Joe Girardi to use his great bullpen).
Of course, an extended rain delay early in tonight's game could also get Kluber off the mound. If weather creates a long, extended "bullpen game" that would likely benefit the Yankees.
Joe Giglio may be reached at<EMAIL_ADDRESS>Follow him on Twitter @JoeGiglioSports. Find NJ.com on Facebook.


Alright, I was reading the Grimoir thing and I didn't notice the rules on Touch Attacks, and I dont own my own D&D books.
So now I ask you:
How do they work? What do they ignore? If I remember correctly a Melee Touch Attack Ignores Shield Modiefier, Armour Modifier and... what? Does it ignore Natural Armour? Deflection Bonus? Dodge? Monk-Wisdom AC?
Please tell.
Quote: Posted 06/03/06 23:55:36 (GMT) -- Okembour
How do they work? What do they ignore? If I remember correctly a Melee Touch Attack Ignores Shield Modiefier, Armour Modifier and... what? Does it ignore Natural Armour? Deflection Bonus? Dodge? Monk-Wisdom AC?
Armor, Shield and Natural. All else applies. _________________ "... C'est un pays plus nu que la terre polaire — Ni bêtes, ni ruisseaux, ni verdure, ni bois!
Or il n'est pas d'horreur au monde qui surpasse La froide cruauté de ce soleil de glace Et cette immense nuit semblable au vieux Chaos; ..."
Let's point out that Monk WIS AC is natural AC so it gets ignored.
Cheers, Kail _________________ To hear the sound of Freedom, many gave their lives They fought for you and me Those memories will always live inside us, and now it's our time to be free
Let's point out that Monk WIS AC is natural AC so it gets ignored.
Wha... I always thought that monk AC was classified as "Other", and as such would be kept in a situation like this.
Combat debugging clearly shows it as Natural AC. It is different from the AC you get from an ammy, cause the latter is considered "Effect AC Natural Bonus". That is, Monk's AC is the same as Armor Skin AC and both gets disregarded by touch attacks. Try out casting harm on a Prismatic Dragon (10 base +62 Natural AC +15 Deflection -2 Size IIRC) and you'll see you will hit it with ease.
PS: RDD and PM Armor Class is Natural AC also, by the way.
Cheers, Kail _________________ To hear the sound of Freedom, many gave their lives They fought for you and me Those memories will always live inside us, and now it's our time to be free
Edited By Kail Pendragon on 06/04/06 17:59
*rubs hands together in an evil way* Then my Paladin/Cleric/Rogue will be very good indeed... MWAHAHAHAHA!
By the way... that build is currently under construction and if anyone has advice for it please check the Build Request Forum, thanks.
Alright Kail, I'll take your word for it. I was just regurgitating NWNWiki, but if you've tested it, then it's much more believable.


close
Hello Left Drawer
close
Hello Right Drawer
Toggle Left Drawer
Toggle Right Drawer
Open Left Drawer
Open Right Drawer
Close Left Drawer
Close Right Drawer


The Plasma In-Memory Object Store
This was originally posted on the Apache Arrow blog.
This blog post presents Plasma, an in-memory object store that is being developed as part of Apache Arrow. Plasma holds immutable objects in shared memory so that they can be accessed efficiently by many clients across process boundaries. In light of the trend toward larger and larger multicore machines, Plasma enables critical performance optimizations in the big data regime.
Plasma was initially developed as part of Ray, and has recently been moved to Apache Arrow in the hopes that it will be broadly useful.
One of the goals of Apache Arrow is to serve as a common data layer enabling zero-copy data exchange between multiple frameworks. A key component of this vision is the use of off-heap memory management (via Plasma) for storing and sharing Arrow-serialized objects between applications.
Expensive serialization and deserialization as well as data copying are a
common performance bottleneck in distributed computing. For example, a
Python-based execution framework that wishes to distribute computation across
multiple Python “worker” processes and then aggregate the results in a single
“driver” process may choose to serialize data using the built-in pickle
library. Assuming one Python process per core, each worker process would have to
copy and deserialize the data, resulting in excessive memory usage. The driver
process would then have to deserialize results from each of the workers,
resulting in a bottleneck.
Using Plasma plus Arrow, the data being operated on would be placed in the Plasma store once, and all of the workers would read the data without copying or deserializing it (the workers would map the relevant region of memory into their own address spaces). The workers would then put the results of their computation back into the Plasma store, which the driver could then read and aggregate without copying or deserializing the data.
The Plasma API:
Below we illustrate a subset of the API. The C++ API is documented more fully here, and the Python API is documented here.
Object IDs: Each object is associated with a string of bytes.
Creating an object: Objects are stored in Plasma in two stages. First, the object store creates the object by allocating a buffer for it. At this point, the client can write to the buffer and construct the object within the allocated buffer. When the client is done, the client seals the buffer making the object immutable and making it available to other Plasma clients.
# Create an object.
object_id = pyarrow.plasma.ObjectID(20 * b'a')
object_size = 1000
buffer = memoryview(client.create(object_id, object_size))
# Write to the buffer.
for i in range(1000):
buffer[i] = 0
# Seal the object making it immutable and available to other clients.
client.seal(object_id)
Getting an object: After an object has been sealed, any client who knows the object ID can get the object.
# Get the object from the store. This blocks until the object has been sealed.
object_id = pyarrow.plasma.ObjectID(20 * b'a')
[buff] = client.get([object_id])
buffer = memoryview(buff)
If the object has not been sealed yet, then the call to client.get
will block
until the object has been sealed.
A sorting application
To illustrate the benefits of Plasma, we demonstrate an 11x speedup (on a machine with 20 physical cores) for sorting a large pandas DataFrame (one billion entries). The baseline is the built-in pandas sort function, which sorts the DataFrame in 477 seconds. To leverage multiple cores, we implement the following standard distributed sorting scheme.
- We assume that the data is partitioned across K pandas DataFrames and that each one already lives in the Plasma store.
- We subsample the data, sort the subsampled data, and use the result to define L non-overlapping buckets.
- For each of the K data partitions and each of the L buckets, we find the subset of the data partition that falls in the bucket, and we sort that subset.
- For each of the L buckets, we gather all of the K sorted subsets that fall in that bucket.
- For each of the L buckets, we merge the corresponding K sorted subsets.
- We turn each bucket into a pandas DataFrame and place it in the Plasma store.
Using this scheme, we can sort the DataFrame (the data starts and ends in the Plasma store), in 44 seconds, giving an 11x speedup over the baseline.
Design
The Plasma store runs as a separate process. It is written in C++ and is designed as a single-threaded event loop based on the Redis event loop library. The plasma client library can be linked into applications. Clients communicate with the Plasma store via messages serialized using Google Flatbuffers.
Call for contributions
Plasma is a work in progress, and the API is currently unstable. Today Plasma is primarily used in Ray as an in-memory cache for Arrow serialized objects. We are looking for a broader set of use cases to help refine Plasma’s API. In addition, we are looking for contributions in a variety of areas including improving performance and building other language bindings. Please let us know if you are interested in getting involved with the project.


History is an important consideration in your choice of a travel management company. It represents the company's strengths and abilities to succeed in the most challenging of circumstances.
THE TRAVEL CONNECTION ("TTC") is currently owned by Flight Express Travel Inc. and has been in operation for 30+years. With 5 locations in US, Canada, and India; we combine the expertise of a corporate big budget agency with the affordability and personal attention of a smaller agency.
THE TRAVEL CONNECTION is a member of the exclusive provider Ensemble Travel group and is independently recognized as being a leading international focussed travel management company in the Orange County market. This recognition has proven to be beneficial to the unique travel needs of the leisure and corporate traveler.
Relationships that may benefit your travel arrangement program include:
Direct relationships with most major Airlines, cruise vendors and tour operators
»Cost saving advantages through world recognized suppliers that include, best rates and special package pricing proven to save money for you, the traveler.
Through the combined attributes of local expertise and global resources, TTC is committed to all your travel needs. Our product to you is expert personal service at affordable fares and rates that are often cheaper than most online fares, and our goal is 100% traveler satisfaction.
If you are not convinced yet, then consider all the available specials we offer. If you forward your name, email and type of travel to<EMAIL_ADDRESS>we will email you the available specials or you can check out our online tools.
Our experience is your guarantee of satisfaction.
» International air fares, Cruise vacations, African safaris, and other vacation packages. DISCOUNTED Business and Economy class air fares for businesses and leisure travelers
» Highly experienced and continually trained travel counsellors.
» Accommodations for virtually any travel requests but focussing on international destinations.A network of extensive international services that include visa and passport assistance and the world's best and most affordable travel insurance options.
» We monitor your company's travel policy and provide travel management solutions within your budgets.
» Should there be anything that needs further clarification, please submit your needs to us for a qualified response.
Sincerely,
The Travel Connection Staff and management


libOmexMeta ToDo list¶
This is a list of things that I think will improve libomexmeta and should be considered by developers who continue this work.
Implement equality operators for triples, composites and Editor and RDF. Then, change tests that use string comparisons to instead use the equality operator. This will bypass the problem in that different systems/compilers output RDF in arbitrary order which breaks the tests. Note: this has been started in that Triple objects and composite annotations can be compared reliably but editor and RDF objects cannot.
Add a “description” to all types of annotation.


Chapter 11. Graphs
Graphs are some
of the most flexible data structures in computing. In fact,
most other data structures can be represented as graphs,
although representing them in this way is usually more
complicated. Generally, graphs are used to model problems
defined in terms of relationships or connections between
objects. Objects in a graph may be tangible entities such as
nodes in a network or islands in a river, but they need not
be. Often objects are less concrete, such as states in a
system or transactions in a database. The same is true for
connections and relationships among the objects. Nodes in a
network are physically connected, but the connections between
states in a system may simply indicate a decision made to get
from one state to the next. Whatever the case, graphs model
many useful and interesting computational problems.
This chapter covers:
- Graphs
-
Flexible data structures typically used to
model problems defined in terms of relationships or
connections between objects. Objects are represented by
vertices, and the
relationships or connections between the objects are
represented by edges between the vertices.
- Search methods
-
Techniques for visiting the vertices of a
graph in a specific order. Generally, either breadth-first
or depth-first searches are used. Many graph algorithms are
based on these basic methods of systematically exploring a
graph's vertices.
Some applications
of graphs are:
- Graph algorithms
-
Algorithms that solve problems modeled by
graphs (see Chapter
16). Many graph algorithms solve problems related to
connectivity and routing optimization. For example, Chapter
16 explores algorithms for computing minimum spanning
trees, finding shortest paths, and solving the
traveling-salesman problem.
- Counting network hops
(illustrated in this chapter)
-
Counting the smallest number of nodes that
must be traversed from one node to reach other nodes in an
internet. This information is useful in internets in which
the most significant costs are directly related to the
number of nodes traversed.
- Topological sorting (illustrated
in this chapter)
-
A linear ordering of vertices in a directed acyclic graph so that all
edges go from left to right. One of the most common uses of
topological sorting is in determining an acceptable order in
which to carry out a number of tasks that depend on one
another.
- Graph coloring
-
A process in which we try to color the
vertices of a graph so that no two vertices joined by an
edge have the same color. Sometimes we are interested only
in determining the minimum number of colors required to meet
this criterion, which is called the graph's chromatic number.
- Hamiltonian-cycle problems
-
Problems in which one works with hamiltonian cycles, paths that pass
through every vertex in a graph exactly once before
returning to the original vertex. The traveling-salesman
problem (see Chapter
16) is a special case of hamiltonian-cycle problem. In
the traveling-salesman problem, we look for the hamiltonian
cycle with the minimum cost.
- Clique problems
-
Problems in which
one works with regions of a graph where every vertex is
connected somehow to every other. Regions with this property
are called cliques. Some
clique problems focus on determining the largest clique that
a graph contains. Other clique problems focus on determining
whether a graph contains a clique of a certain size at
all.
- Conflict serializability
-
A significant aspect of database
optimization. Rather than executing the instructions of
transactions one transaction after another, database systems
typically try to reorder a schedule of instructions to
obtain a higher degree of concurrency. However, a serial
schedule of instructions cannot be reordered arbitrarily; a
database system must find a schedule that is conflict serializable. A conflict
serializable schedule produces the same results as a serial
schedule. To determine if a schedule is conflict
serializable, a precedence graph is used to define
relationships among transactions. If the graph does not
contain a cycle, the schedule is conflict
serializable. |


scroll down
Abstract: As the rapid developments of our cities, a great amount of problems are come up with the constructions of the metropolitans. For example, a lot of dams were built along the riverside in order to control the speed of the rivers. However, on the other hand, the existence of the dams prevent residents interact with the river. Under this situation, my design is aim to create more recreational space along the riverside in order to provide people some space to hold different kinds of activities.
scroll down


Before the SPM widgets can be used, at least one SPM environment has to be defined by a user with admin permissions. The environments can be added in the Context Settings found under "Admin >> Context Settings".
The SPM Legend Widget shows a legend for the colors used by the other SPM Widgets. The following are the statuses used by the SPM widgets:
The Project Status Widget will display the status for one or more selected projects. If there is currently no data available, the status will be set to unknown.
The Monitor Status Widget will display the status for one or more selected monitors. If there is currently no data available, the status will be set to unknown.
The Monitor Status for Projects Widget will display the status for all monitors of the project(s) selected. If there is currently no data available, the monitor without data will not be displayed. This widget is useful for projects with a lot of monitors or with frequent changes.
The Monitor Status All Widget will display the status for all monitors of the selected environment. If there is currently no data available, the monitor without data will not be displayed. This can be used to get a full overview of all monitors for a specific environment.
The Counters for Monitor / Project will let you select one or multiple Custom Counters defined on your Silk Performer script. You can set thresholds for the values to define which color should be displayed for a certain value. Leave a threshold blank if you want to skip a color.


Mike Pence tells John Dickerson in an interview on Face The Nation that he has spoken with Michael Flynn about Flynn’s communications with Sergey Kislyak. According to Pence, Flynn did not discuss U.S. sanctions against Russia with Kislyak.
“[W]hat I can confirm, having spoken to [Flynn] about it, is that those conversations that happened to occur around the time that the United States took action to expel diplomats had nothing whatsoever to do with those sanctions,” Pence said.
Source: CBS News


--- layout: post title: Checking back on check-ins date: 2011-06-16 00:00:00 categories: business interfaces-&-interaction mobile social ---
Via Mr Falletti, I notice that the BBC have posted a review of the Facebook check-in project we ran for them at the Radio 1 Big Weekend, including a load of video footage with attendees. As he says, it's very frank and complete:
"Even though we had some initial teething issues, the research from the audience and on site analytics showed that the audience really liked sharing their unique experience with (or bragging to) their friends.We had large interaction spike from the news story posts from seeing a high number of 'likes' and 'comments' on each of the check ins. This interaction was exactly what we were trying to achieve and it really worked. Interestingly, the stats also showed that more women engaged with the product rather than men - something that needs to be investigated further - does social syndication in this way appeal more to women than men?"


| 019:069 Khan | : |
Then indeed We shall drag out from every sect all those who were worst in obstinate rebellion against the Most Beneficent (Allah). |
| 019:069 Maulana | : |
Then We shall draw forth from every sect those most rebellious against the Beneficent. |
| 019:069 Pickthal | : |
Then We shall pluck out from every sect whichever of them was most stubborn in rebellion to the Beneficent. |
| 019:069 Rashad | : |
Then we will pick out from each group the most ardent opponent of the Most Gracious. |
| 019:069 Sarwar | : |
Then We will separate from every group those who were strongly rebellious against the Beneficent God. |
| 019:069 Shakir | : |
Then We will most certainly draw forth from every sect of them him who is most exorbitantly rebellious against the Beneficent Allah. |
| 019:069 Sherali | : |
Then shall WE certainly pick out, from every group, those of them who were most stubborn in rebellion against the Gracious God. |
| 019:069 Yusufali | : |
Then shall We certainly drag out from every sect all those who were worst in obstinate rebellion against (Allah) Most Gracious. |
Concepts/Themes Covered: أركان الإسلام > التوحيد > توحيد الله تعالي > الوعد والوعيد Pillars of Islam> Islamic> Oneness of Allah> Promise and Threat أركان الإسلام > التوحيد > الملحدون المنكرون ليوم البعث Pillars of Islam> Islamic> The Apostates Who Denies the Resurrection الإيمان > الغيب > الشيطان > سلوكه الشيطاني Faith> The Unseen World> Satan, the Devil> His Devilish Conduct
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.


GONE WITH THE WIND (1939) A Film Review by Ted Prigge Copyright 1998 Ted Prigge
Director: Victor Fleming Writers: Sidney Howard (based on the novel by Margaret Mitchell) Starring: Vivien Leigh, Clark Gable, Olivia De Havilland, Leslie Howard, Hattie McDaniel, Butterfly McQueen, Thomas Mitchell, Barbara O'Neill, Caroll Nye, Harry Davenport, Leona Roberts, Everett Brown, Howard C. Hickman, Laura Hope Crews
I've been reading a lot of reviews of the most recent re-release of "Gone With the Wind," the epic Civil War soap opera we've almost no doubt been brought up on by our parents, and I'm actually shocked to find that the words "Gone With the Wind" and "overrated" are used in the same sentence. What do I have to say to this: shame on you. "Gone With the Wind" is not great primarily because it's a classic, or because it merely portrays a civlization that is gradually dying. It's great for many of the same reasons some people complain about: it's too long, it's story's a little dated, and it's melodramatic. And I personally wouldn't have it any other way.
"Gone With the Wind" is the great sentimental view of the South during and following the Civil War, depicting the gradual death of slavery, plantations, and the introduction to segregation and intense capitolism, all seen through the eyes of the film's famous (or infamous) protagonist, Scarlett O'Hara. Played by then-newcomer Vivien Leigh, Scarlett's the classic Souther Belle: selfish, manipulative, egotistical, lovable. We first meet her when she's young, still living on her family's giant plantation of Tara, the symbol of Southern Pride and the place that will go through radical changes as the story progresses.
As the Civil War comes and goes, we don't see battles or carnage, but we see everything from the perpective of Scarlett, who has fallen in love with the suave but shallow Ashely Wilkes (Leslie Howard), a neighbor of hers who has unfortunately fallen in love and proposed to his fragile cousin, Melanie (Olivia De Havilland). While Scarlett plots and plots to steal Ashely from Melanie, mostly by befriending her and doing it that way, she discovers someone else who has affections for her: Rhett Butler (Clark Gable), the blunt, obnoxious, and intelligent lady killer who makes one of the most interesting first impressions on Scarlett towards the beginning, staring at her as she walks up the stairs at a party ("He looks as if he knows what I look like without my shimmy," she remarks to a friend).
As the film progresses, Scarlett will loose everything, including a couple husbands she marries not out of love but out of revenge and financial desperation (in that order), and as the Civil War ends and the North claims the South for its own, we see a battle between Scarlett's obsession with Ashley and her unrequited love for Rhett, the former who loves her in that nice way, the latter who simply adores her ("What a woman," he says once). Since the film runs about four hours or so (with an intermission, of course), a lot happens, and instead of the film ending when Scarlett realizes after she has lost everything that she "will never be hungry again," the film keeps on going, mostly because this film is not about Scarlett coming to the realization that she is an independent woman, but has to come right back to the beginning of the film again. Through four hours of film, everything and nothing has happened.
For the fans of this film, this plot summary will probably be a refreshment of the fun of just watching the events of the film unfold, which perhaps may result in going to see the most recent reissue of this film, a ten million dollar re-enhancement by Ted Turner that is currenly playing in theaters (a weird experience, simply because the aspect ratio is that of a TV - just one of the many older films that I wish had been filmed in widescreen, if it had been around back then). For those of you who've never seen it before, this may be a good reason to actually go see it for your first time. Why? Because of the two reasons many people give for liking this film: because it's a classic and it's a masterpiece. Two reasons to see any film.
I don't consider every old film to be a classic or a masterpiece, mainly because they are two completely different things and not every film made in the past is one of them, let alone both. "Gone With the Wind" is, though. It's a classic because it's not dated at all; it has effortlessly stood the test of time. We watch films like "Forbidden Planet," a great film that is horrifically dated, not because the special effects have been improved, but because of the hokey stench that it wreaks of. "Gone With the Wind" has none of that. There are no unintentional jokes in this film. Many of the laughs in this film (and there are many, believe me) are laughs that we could share with the audience of 1939, who saw this for the first time. Not to mention that Vivien Leigh and Clark Gable have lost none of their appeal: she's still a babe, and he's still the man. Watching them interact is still one of the most engaging and wonderful cinematic experiences of all time (their banter is killer). "Gone With the Wind" is one of the few films that has lost none of its power to entertain in its 60 or so years of being in existence, and that's why it's a classic.
Why it's a masterpiece is a little more complicated. But I can sum that up in just a few words: becuase it tells a great story and it tells it well. There's not one chief character in this film who is not likable and who is not seen in their full dimension.  We all want her to get with Ashley...and we don't because we don't want to see Melanie hurt. And don't tell me that you're not both saddened and satisfied by the film's final scene, where Rhett answers her question of "What am I going to do?"  She got what she deserved and we're happy she did, but we also feel something for her in that ending, some kind of pathos. It's damn near cathartic.
Scarlett could be seen as the sole tragic character in the story if most of the main characters weren't tragic as well. Rhett Butler is a man who has everything he could possible have except the love of the woman he loves, which ultimately destroys him and leaves him more cynical than in the beginning. Melanie is one of the saddest: a woman who is nice through everything and becomes one of the main reasons for Scarlett's sadness in the end. And Ashely is the inept fool of the film, never realizing his true importance and winding up losing the one woman he loves. The sole voice of reason in the film is Mammy (Hattie McDaniel, who won an Oscar for her performance), the African American nanny to Scarlett, who is faithful to her owners even after the War, and who lends pragmatic advice throughout the film ("It ain't fittin', it ain't fittin', it ain't fittin'!").
And who can deny the scope this film places on its story? We actually see the passage of time contrasted in the story of the characters.  We see Atlanta thriving as a busy city, then burned down, and then rebuilt. This film knows what happened during this time, and it effortlessly portrays an accurate history lesson while telling a delightfully absorbing melodramatic story about characters we like.
But none of these reasons are really why "Gone With the Wind" is such a great film, and so worthy of being placed on the same list of great films of all time as "Citizen Kane" and "Lawrence of Arabia." The real reason is because it never bullshits us about its story. It just tells it, and never denies us anything that we should know. The film is about four hours long because it has a long story to tell, and to leave out anything would result in a lesser film. This film is great because it has a great story to tell. Becuase it has amazing acting. Because Vivien Leigh and Clark Gable are the perfect mis-matched couple of all time. Because it has a killer script. Because Victor Fleming (and all the other guest directors, like George Cukor) knows how to set up shots perfectly (my favorite is still the pull back to show Tara at sundown in the beginning - orgasmic). Because it's a bit dated. And because for four hours you can see one of the very few times when Hollywood just got a film right, and wasn't afraid of a lengthy running time or cost. I really don't want to compare "Titanic" to this, because it's just not going to be as great as this film for at least another 30 or 40 years, but when Hollywood really pulls out the stops and is concerned with everything at the same time, including the story, that's when a great film emerges. And "Gone With the Wind," for all its 222 minutes of running time and seeping soap opera structure, is one of the greatest films of all time. That's inarguable.
MY RATING (out of 4): ****
Homepage at: http://www.geocities.com/Hollywood/Hills/8335/
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


Survivor Routes: all routes for working directly with
an individual survivor follow a
/settlement/<action>/<settlement_id>
convention.
Like settlement management routes, these routes are private, require
authentication and accept the OPTIONS
requests method.
Important! Any POST to any of these routes can also
include the optional parameter {"serialize_on_response": true}
. Including this param will get you a serialized version
of the survivor as part of your response.
| key | R/O | type | description | related endpoints | |
|---|---|---|---|---|---|
| O | str | Defaults to the creator's login. | set_email | ||
| born_in_ly | O | int | Defaults to the settlement's current LY. | ||
| settlement | R | OID | This must be set to a valid settlement OID at creation time and can never be changed. See /new/survivor above for more info on creating survivors. | ||
| public | O | bool | Defaults to Boolean false. Submitting anything that evaluates to Boolean true will be treated as such. | toggle_boolean | |
| name | O | str | set_name | ||
| sex | O | str | At creation time, this can be set to 'M', 'F' or 'R' (for random). Defaults to 'R' during creation if not specified in the POST body. | set_sex | |
| survival | O | int | update_survival set_survival | ||
| hunt_xp | O | int | |||
| Insanity | O | int | set_attribute update_attribute | ||
| Head | O | int | set_attribute update_attribute | ||
| Arms | O | int | set_attribute update_attribute | ||
| Body | O | int | set_attribute update_attribute | ||
| Waist | O | int | set_attribute update_attribute | ||
| Legs | O | int | set_attribute update_attribute | ||
| Courage | O | int | set_attribute update_attribute | ||
| Understanding | O | int | set_attribute update_attribute | ||
| affinities | O | dict | Rather than setting this at creation time, consider using upfate_affinities route after creation to set this, unless you really know what you're doing | update_affinities set_affinity | |
| departing | O | bool | set_status_flag | ||
| bleeding_tokens | O | int | update_bleeding_tokens set_bleeding_tokens | ||
| max_bleeding_tokens | O | int | Defaults to 5. | set_attribute | |
| Movement | O | int | Defaults to 5. | set_attribute update_attribute | |
| Accuracy | O | int | set_attribute update_attribute | ||
| Strength | O | int | set_attribute update_attribute | ||
| Evasion | O | int | set_attribute update_attribute | ||
| Luck | O | int | set_attribute update_attribute | ||
| Speed | O | int | set_attribute update_attribute | ||
| attribute_detail | O | dict | set_attribute_detail | ||
| Weapon Proficiency | O | int | set_attribute update_attribute | ||
| weapon_proficiency_type | O | str | handle | set_weapon_proficiency_type | |
| abilities_and_impairments | O | list | Needs a list of handles from the settlement's game_assets element, e.g. {'abilities_and_impairments': ['ageless','mastery_sword']} or similar. | add_game_asset rm_game_asset | |
| cursed_items | O | list | List of handles | add_cursed_item rm_cursed_item | |
| disorders | O | list | List of handles | add_game_asset, rm_game_asset | |
| favorite | O | list | list of user emails, i.e. users who have favorited the survivor | add_favorite rm_favorite | |
| fighting_arts | O | list | List of handles | add_game_asset rm_game_asset | |
| fighting_arts_levels | O | list | dictionary where each key is a Fighting Art handle whose value is an array, e.g. {'silk_surgeon': [1,2]} | toggle_fighting_arts_level | |
| epithets | O | list | list of handles | add_game_asset rm_game_asset |
Important! There are certain endpoints below that may
add additional attributes to a survivor record, e.g.
controls_of_death
, set_retired
, etc.
Attributes such as dead
and retired
are not part of the baseline data model, i.e. they are not part
of the survivor record when it is created. YHBW
Marks a survivor as "removed", which queues them up for trash collection (i.e. final deletion from the database).
Removed survivors cannot be restored or recovered.
This route does one thing: it GETs survivor avatars based on their OID and 'serves' them like a webserver would serve them from a filesystem.
The route won't take a POST, it won't take params,
etc. If successful, it will return 200 with an image/png
mimetype of your avatar.
Formulate your URL thus:
https://api.thewatcher.io/avatar/get/5b080f754af5ca68d266b9d5
Retrieve a dictionary of survivor family info.
This method can take a minute to return, as it does recursion, initializes all surviviors, living and dead, etc. It's probably a good idea to use this one with a loading graphic, etc.
Retrieve JSON representing the Survival Actions currently available to the survivor:
[
{
"available": false,
"sort_order": 0,
"handle": "dodge",
"name": "Dodge",
"type": "survival_action",
"title_tip": "Impairment 'Broken hip' prevents Wallace from using this ability."
},
{
"available": true,
"handle": "embolden",
"name": "Embolden",
"sort_order": 2,
"type": "survival_action",
"title_tip": "Settlement innovation 'Sun Language' unlocks this ability."
},
{
"available": false,
"handle": "overcharge",
"name": "Overcharge",
"sort_order": 5,
"type": "survival_action",
"title_tip": "Not unlocked."
}
]
This JSON is updated automatically whenever the the settlement's innovations are update or the survivor's abilities are updated.
Asset management: routes for adding, removing and modifying Survivor Sheet game asset info, e.g. Fighting Arts, Disorders, Abilities & Impairments, etc.
Important! Most of these routes have back-end business logic "baked" into them, so it is highly recommended that you reload/re-get your survivor's JSON after POSTing commands to these routes!
Use this route to add an asset 'handle' of whatever 'type' to a survivor.
Requires both the 'handle' and 'type' keys:
{'handle': 'blind', 'type': 'abilities_and_impairments'}
{'handle': 'crossarm_block', 'type': 'fighting_arts'}
Important! This method enforces many of the incoming
asset's attributes, including max
, epithet
,
and so on.
PROTIP: if you want the API to assign a random, eligible asset to
the survivor, use the bogus/magic handle "_random" instead of a
handle from the settlement's game_assets
.
The exact inverse of add_game_asset
, POSTing to
this route requires both 'handle' and 'type' keys and removes a game
asset handle from a survivor.
This route allows you to add or remove multiple game assets
from a survivor by POSTing a list of handles/types, as if you
were doing many add_game_asset
or rm_game_asset
operations serially.
The JSON you have to POST must include the action you want to take:
{
"action": "rm",
"game_assets": [
{"type": "abilities_and_impairments", "handle": "blind"},
{"type": "fighting_arts", "handle": "crossarm_block"}
]
}
Important! As with set_many_attributes()
,
the hashes in the game_assets
list are pressed in
the order you POST them. YHBW.
This route accepts a list of handles and a type of game asset and then evalutes the survivor's current handles of that type, removing and adding as necessary in order to bring the survivor's list in sync with the incoming list.
Your JSON should look basically like this:
{
"type": "abilities_and_impairments",
"handles": [
"bitter_frenzy","ageless","analyze"
]
}
You're going to want to also include {"serialize_on_response": true}
in your POST body on this one, because your survivor is DEFINITELY
going to come back way different than he was before you did this.
POST a cursed item 'handle' to this route to add that cursed item to the survivor:
{'handle': 'thunder_maul'}
Important! This will automatically apply any A&Is and epithets related to the curse to the survivor.
POST a cursed item 'handle' to this route to remove that cursed item from the survivor:
{'handle': 'husk_of_destiny'}
Important! This will automatically apply remove any epithets A&Is, etc. from the survivor (but will not remove any that are still effective, e.g. because another cursed item also requires them.
POST the OID of a survivor to this end point to make that survivor this survivor's partner:
{partner_id: "5a53a2154af5ca67743c6c79"}
To remove the survivor's partner, post the magic value 'UNSET'
as the partner_id
:
{partner_id: "UNSET"}
Use this route to set a survivor special attribute to a Boolean value:
{'handle': 'pots_purified', 'value': false}
A couple of things to note here:
POST some JSON containing a weapon proficiency type handle
(from the settlement's game_assets
to set it as the
survivor's weapon type:
{handle: 'sword'}
To unset/remove weapon proficiency type from a survivor, POST
they key unset
to this endpoint:
{unset: true}
Use this route to set an arbitrary survivor attribute to an arbitrary value. Requires 'attribute' and 'value' keys.
POST some JSON containing the 'attrib' name and the new 'value' like so:
{'attribute': 'Strength', 'value': 3}
The JSON above would set the survivor's Strength to three. The 'value' should always be an integer. Negative numbers are supported:
{'attribute': 'Evasion', 'value': -2}
This one works similarly to /survivor/set_attribute/<survivor_id>
or /survivor/set_attribute_detail<survivor_id>
,
except it can update a list of attribute/value pairs and/or
a list of attribute/detail/value pairs.
Assuming you want to update the base values as well as the details (i.e. attribute modifiers, in game parlance), the body of your POST should look something like this:
{
attributes: [
{attribute: 'Strength', value: 2},
{attribute: 'survival', value: 5}
],
attribute_details: [
{'attribute': 'Luck', 'detail': 'tokens', 'value': 2},
{'attribute': 'Strength', 'detail': 'gear', 'value': -1}
],
}
Important! Since the attributes
array will
be processed as a Python list
type object, attributes
will be updated synchronously, in the order they are posted.
Important! Failures in this method are not atomic, which means that if one hash causes a failure, the whole request will fail and nothing will be saved!
All survivors have an attribute_detail
element in
their sheet
JSON:
"attribute_detail": {
"Strength": {
"tokens": 0,
"gear": 0
},
"Evasion": {
"tokens": 0,
"gear": 0
},
"Movement": {
"tokens": 0,
"gear": 0
},
"Luck": {
"tokens": 0,
"gear": 0
},
"Speed": {
"tokens": 0,
"gear": 0
},
"Accuracy": {
"tokens": 1,
"gear": 0
}
},
This is used to manage attribute info that is NOT the base
attribute value (see set_attribute
and
update_attribute
for updating base values).
To update attribute_detail
info, POST some JSON
that includes an 'attribute', 'detail' and 'value':
{'attribute': 'Luck', 'detail': 'tokens', 'value': 2}
The sample code above would set the survivor's 'Luck' attribute detail for 'tokens' to two.
Supports arbitrary survivor attribute updates. Requires JSON contianing an 'attribute' and a 'modifier'. Adds the value of 'modifier' to the current value of 'attribute'.
Sample JSON to increase strength by two:
{'attribute': 'Strength', 'modifier': 2}
Sample JSON to decrease Insanity by 1:
{'attribute': 'Insanity', 'modifier': -1}
Use this to add an integer to the survivor's bleeding token count:
{'modifier': -2}
Important! The API will never set the survivor's
bleeding_tokens
value lower than zero or higher than the
survivor's max_bleeding_tokens
. It will return 200's to
requests that break these rules.
Use this route to set the survivor's bleeding_tokens
attribute to an arbitrary integer value.
{'value': 4}
Negative values will be ignored (and you'll get a 200 back).
Important! The API will never set the survivor's
bleeding_tokens
value lower than zero or higher than the
survivor's max_bleeding_tokens
. It will return 200's to
requests that break these rules.
POST some JSON containing the survivor's new name like so:
{'name': 'Adam'}
Important! POSTing a blank string as the value of 'name' will result in the survivor's name defaulting to 'Anonymous':
{'name': ''}
POST some JSON containing a Boolean value representing whether the survivor is retired or not:
{'retired': true}
The 'retired' value will be duck-typed to a Boolean, so posting anything that evaluates true (e.g. 'checked') will count as a Boolean true, for the intents and purposes of this route.
Modify the survivor's sex by POSTing a simple JSON object containing the key 'sex' and a value of either 'M' or 'F'.
{'sex': 'M'}
Important! This is not the same as the survivor's 'effective_sex' attribute, which is mutable. Make sure you're modifying the correct one!
Update a survivor's father
or mother
attributes by posting a role (e.g. 'father' or 'mother') plus a valid
survivor OID to this endpoint:
{role: 'father', 'oid': 59d78f014af5ca22ab609db2}
POST a 'modifier' integer to this route to add that number to the survivor's Survival:
{"modifier": 2}
...or:
{"modifier": -1}
Important! The API will only allow values greater than the settlement's Survival Limit if expansion (or other) content requires the settlement to NOT enforce Survival Limit.
Important! The API will normalize negative numbers to zero automatically.
POST a 'value' integer to this route to set that integer as the survivor's Survival value.:
{"value": 6}
Important! The API will only allow values greater than the settlement's Survival Limit if expansion (or other) content requires the settlement to NOT enforce Survival Limit.
Important! The API will normalize negative numbers to zero automatically.
This route is the all-purpose route for managing aspects of a survivor's death, including when it happened, how it happened and so on.
Supported key/value info:
| key | R/O | value |
|---|---|---|
| dead | R | Boolean. Set to 'true' if the survivor is dead. |
| died_in | O | Integer. The Lantern Year in which the survivor died. |
| cause_of_death | O | String. Can be anything, but check the settlement's
assets for some recommended values: game_assets.causes_of_death
|
Here is some example JSON for marking a survivor dead:
{
"dead": true,
"died_in": 4,
"cause_of_death": "Hack City",
}
To resurrect a survivor (i.e. undo their death), simply post some
JSON with {"dead": false}
,
This will unset other death-related attributes, e.g. 'cause_of_death', 'died_in', etc.
Important! Since dead
is the only required key
in JSON that gets POSTed to this route, there is some defaulting that goes
on if the other values are undefined. Be as explicit as possible with
this route.
For survivors with Dragon Traits (i.e. PotStars), use this route to set their 'constellation':
{'constellation': 'Witch'}
Simply POST similar JSON to overwrite/change it:
{'constellation': 'Absolute'}
This one also works to unset/remove it:
{'unset': true}
Here is a list of accepted/supported values for 'constellation':
POST some JSON containing the two required keys, 'color' and 'value' to set a single survivor affinity to a new integer value.
{'color': 'blue', 'value': -2}
The 'value' key must always have an integer value.
Works with the Survivor's affinities
dictionary,
which contains their permanent, non-token affinities and looks like
this by default:
{'red': 0, 'blue': 0, 'green': 0}
POST some JSON containing an optional 'operation' key whose value is 'add' or 'rm' to add or subtract an affinities dictionary called 'aff_dict' to/from the survivor.
Important! The 'operation' key is optional because the default behavior of this method/route is to add the incoming 'aff_dict'.
For example, if you wanted to add a permanent blue affinity to the survivor, you would POST this:
{'aff_dict': {'blue': 1}}
Similarly, if you wanted to add two red affinities and subtract one green affinity, you would POST a JSON object like this one:
{'aff_dict': {'red': 2, 'green': -1}, 'operation': 'add'}
If you wanted to subtract a blue and a green affinity from the survivor, you could POST a JSON object like this one:
{'aff_dict': {'blue': 1, 'green': 1}, 'operation': 'rm'}
Important! The 'operation' key's value must be 'add' or 'rm'. Anything else will get you a 400 response from this route.
POST some JSON to this route to make a survivor into a savior:
{color: 'red'}
This adds all required A&Is, logs a settlement event, etc.
To change what type of savior you want the survivor to be, POST a different color:
{color: 'blue'}
To remove savior status (all A&Is, etc.), POST the
unset
key to this route thus:
{unset: true}
POST a damage location handle to this route to toggle it on/off for the survivor:
{location: 'arms_damage_light'}
Supported location handles:
brain_damage_light
head_damage_heavy
arms_damage_light
arms_damage_heavy
body_damage_light
body_damage_heavy
waist_damage_light
waist_damage_heavy
legs_damage_light
legs_damage_heavy
Locations that are toggled 'off' will show up as
undefined
in the sheet
element: the locations
are toggled 'on' if they exist on the sheet
.
Use this route to toggle Boolean attributes of the survivor data model, such as 'public'
{'attribute': 'public'}
Important! These attributes are not the same as
status flags
, which also evaluate Boolean when present on the
survivor. See set_status_flag
and toggle_status_flag
routes below for info on working with status flags.
The API supports toggling on/off individual levels for Survivor Fighting Arts that have levels (e.g. Silk Surgeon). Use this route to toggle an individual level on or off by POSTing the handle and the level:
{'handle': 'silk_surgeon', 'level': 2}
The API does not enforce sequential leveling (i.e. a Survivor can have level 3 withing having lower levels, e.g. 1 or 2), so don't expect any user-friendliness here.
POST a blank/empty request to this route to toggle the survivor's once per lifetime Survival of the Fittest reroll on or off.
Important! The actual attribute of the survivor's
sheet
is sotf_reroll:
{"sheet": {"sotf_reroll": true, ...}, "meta": {...}, ...}
But since it is not part of the default data model for survivors, it will sometimes simply be undefined/unset, rather than a.) always present and b.) always a boolean.
Works nearly identically to set_status_flag
(see above), except toggles the flag on/off. POST simple JSON
containing the target 'flag' to toggle it:
{'flag': 'cannot_use_fighting_arts'}
This route and its related route toggle_status_flag
are used to work with Survivor Sheet 'flags'. The following 'flag'
attributes can be set to a boolean value:
To set a flag (i.e. to True/true), POST some JSON to this route that includes the 'flag' key with the value of the flag you want to set:
{'flag': 'cannot_spend_survival'}
To unset/remove a flag, POST the key/value, plus the key 'unset' with a value of True/true:
{'flag': 'skip_next_hunt', 'unset': True}
Meta and admin controls: manage survivor meta data, including adding/removing survivor notes, avatars, color schemes, etc.
(Includes any attribute of the Survivor Sheet that is NOT part of the in-box/paper tracking assets for the survivor.)
Use this route to POST a user's email address and add the address
to the survivor's favorite
list, i.e. the list of users
who have favorited the Survivor:
{'user_email'<EMAIL_ADDRESS>This route gracefully fails on bogus requests, so feel free to spam it (haha--j/k).
Use this route to POST a user's email address and remove the
address from the survivor's favorite
list, i.e. the
list of users who have favorited the Survivor:
{'user_email'<EMAIL_ADDRESS>This route gracefully fails on bogus requests and will return a a 200 if asked to remove a user that is not currently in the list.
Adds a text note to a survivor. The note is returned on the
serialized survivor (in survivor.notes
).
The POST body requirements are simple:
{'note': 'This is my important note about Ugg-Ugg the maker
of the soup.'}
Unlike other routes, this one returns the OID of the note:
{'note_oid': {$oid: '58703a398740d9730c7abeb2'}}
POST an existing note OID to this route to remove it:
{'_id': '58703a398740d9730c7abeb2'}
POST a base 64 encoded string to this endpoint to set a new avatar for a survivor:
{avatar: "JJssaK1234bsakq8123..."}
If you're using JS to convert a file to a base 64 string,
consider this sample code, which may be helpful. In the sample,
evt
is the browser event where the users adds the file:
var reader = new FileReader();
reader.readAsBinaryString(evt.target.files[0]);
reader.onload = function () {
b64_string = btoa(reader.result);
};
...and b64_string
is your final output, i.e. the
incoming file as a base 64 encoded string, that you want to POST
back to the API.
Important! On a successful post, this route returns a 200 as well as some JSON containing the OID of the new avatar:
{avatar_oid: {$oid: "5a2ae8e34af5ca23a86c7247"}}
Serialized settlements have an element called survivor_color_schemes
,
which is a dictionary of color schemes, including handles.
To change a survivor's color scheme, POST some JSON to this route that includes one of those handles:
{handle: 'vibrant_lantern'}
To unset a survivor's color scheme (i.e. to remove the key/value
from the survivor's sheet
, simply post the key,
unset
:
{unset: true}
POST a registered user's email to this route to set the
survivor's email address (which is equivalent to setting the
survivor's "owner", but does not change the survivor's
created_by
attribute.
Your JSON should look like this:
{email<EMAIL_ADDRESS>In order to facilitate form validation, this route will will
return a 422
is the email
you POST is
not associated with a registered user of the API.
Important! If you get a 422 back, your survivor was not updated.
If the update was successful, you get a vanilla 200
back.


Known Issues
-
Enabling Full Disk Access
If Permanent Eraser is having problems erasing files in the Trash in macOS Catalina: Refer to the document Enabling Full Disk Access to resolve this issue.
-
Enabling the Erase Service Plug-In
If the contextual plug-in doesn't work in macOS Mojave: Refer to the document Enabling the Erase Service Plug-In to resolve this issue.
-
Erasing Aliases
An alias can only be deleted if it is in the Trash. Otherwise, trying to delete an alias will delete the original file, but not the alias.
-
Erasing Files
Some files not owned by the current user may not be able to be immediately deleted. You will be prompted to enter in administrator credentials to authorize Permanent Eraser to erase this file. Files on a read-only disk, such as a CD-ROM, cannot be erased.


| EasyABC-package | EasyABC: performing efficient approximate Bayesian computation sampling schemes using R |
| ABC_emulation | Rejection sampling scheme for ABC using an emulator |
| ABC_mcmc | Coupled to MCMC schemes for ABC |
| ABC_rejection | Rejection sampling scheme for ABC |
| ABC_sequential | Sequential sampling schemes for ABC |
| binary_model | Wrapper for a binary executable for non-parallel simulations |
| binary_model_cluster | Wrapper for a binary executable for parallel simulations |
| EasyABC | EasyABC: performing efficient approximate Bayesian computation sampling schemes using R |
| SABC | Simulated Annealing approach to Approximate Bayesian Computation (SABC) |
| SABC.inf | Simulated Annealing approach to Approximate Bayesian Computation (SABC) |
| SABC.noninf | Simulated Annealing approach to Approximate Bayesian Computation (SABC) |
| trait_model | Trait model for EasyABC tutorial |


Drink Menu
Beer
The King of Beer
The Queen of Beer
Real cold Beer
Wine
Red Wine
White Wine
Blue Wine
Sorry, we Can't serve you.
It's illegal in the US. Try Mexico or Europe.


When printed, this test requires 4 pages. Page one contains only this paragraph.
This text is at the top of page two.
This text is also on page two.
And this text is on page two as well.
This paragraph is on page three. A page break follows.
This text is at the top of page four.
This last paragraph is also on page four.


Updated:
.
Changes will be loaded once they have been applied or checked in.
Changes will be loaded once they have been applied or checked in.
Review
Required
- Specification Editor
- Config Maps
- System
- Landing Page
- Trends
- Alerts
- Collection Settings
- CSAP Integrations
Application: general settings
Git
CSAP Management Agent Performance: review thoroughly prior to changing.
Infrastructure health tests: More frequent testing will cause load, but
increase
visibility to infrastructure
CSAP Management Agent Access Controls
Applications are typically fronted with a network configuration to enable
high
availability, and SSSL offload.
Service Integrations
ACL Disks
Landing Page notes
Editor Notes
Launch targets are uses in the service portal to verify routing alternatives
Configuration Maps enable environment variables to be shared across
multiple
services,
and customization on a per life cycle basis. The group named "global" will be applied to every
service. The service
editor can optionally specify 1 or more map names in the environment variables. eg.
"configuration-maps" : [
"map1", "map2" ],
Host Defaults
Kubernetes Event Alerting: events newer then specified minutes trigger
alerts
unless the
involved object matches the specified filter. If TOTAL events in kubernetes exceeds max
count -
an alert will be
triggered
Kubernetes Certificate Expiration is required annually
(reference
guide)
Docker Alerting: Exceeding limits will trigger alerts
The number of samples to collect and average when issuing alerts.
Increasing
will avoid
intermittent alerts, but note they will still be recorded in csap health reports.
CSAP Host Saver: Runaway resource consumption by services can cause hosts
to
become
non-response or impact SLA. If current threads, disk, sockets, or files for a service
exceeds
the
maximum*threshold - the service will be killed.
Service Threshold Defaults - the global defaults can selectively be
overridden
on a per
service basis
CSAP agent running on every host performs collection of key OS (linux APIs)
and
Application (JMX or HTTP) metrics
Collection Intervals (in seconds)
Collections cache size: Agent in memory cache is used to retain performance
data and is
reflected in the CSAP real time graphs shown on Host Dashboard.
kubernetes container collection: container names (not pod) collected:
node
count, total count, total cpu and total memory
kubernetes namespace monitoring (defaults to all) to disable - add: [
"disabled "].
Optional Collection: Low memory trigger: initiates listing of all processes
and
sends
/csap/system/memory/low event
Events published to the Analytics Portal includes both system(operations,
performance
data, ...) and user activity.
Optional: Secondary Publication to an additional analytics store
CSAP agent publication of health information to external monitoring
systems.
Kubernetes YAML replacements: warning - this is replacement of all matches
in
all yaml files
Quick Launchers (Performance Tab landing page). If multiple service
instances -
first one that is running will be launched.
CSAP File Monitor: optional log parsers. The match and columns fields are
required, all others are optional
VSphere Integration enables vm and datastore management
Real time meters: In-line edits and ordering are supported by clicking on links below. Notes:
- json editor may be used instead of inline:
- Health Icon: eg. [true, 2, 6 ] will display healthy icon instead of meter (if true); warning will be display if less then 2 or greater then 6
- optionSource: can be used in json editor mode if multiple release package filtering is neede
| Landing Page Label | Service | Attribute | Type | Health Icon | Meter Intervals | Rev | Divide | Multiply | Disable Scaling |
|---|
Application Disks: appear on landing page
In-line edits and ordering are supported by clicking on links below, alternately:
| Landing Page Label | Service | Attribute | Type | Total | Divide |
|---|