HTOP(1) Utils HTOP(1) NAME htop - interactive process viewer SYNOPSIS htop [-dChusv] DESCRIPTION Htop is a free (GPL) ncurses-based process viewer for Linux. It is similar to top, but allows you to scroll vertically and horizon‐ tally, so you can see all the processes running on the system, along with their full command lines. Tasks related to processes (killing, renicing) can be done without enter‐ ing their PIDs. COMMAND-LINE OPTIONS Mandatory arguments to long options are madatory for short options too. -d --delay=DELAY Delay between updates, in tenths of seconds -C --no-color --no-colour Start htop in monochrome mode -h --help Display a help message and exit -u --user=USERNAME Show only the processes of a given user -s --sort-key COLUMN Sort by this column (use --sort-key help for a column list) -v --version Output version information and exit INTERACTIVE COMMANDS The following commands are supported while in htop: Arrows, PgUP, PgDn, Home, End Scroll the process list. Space Tag or untag a process. Commands that can operate on multiple pro‐ cesses, like "kill", will then apply over the list of tagged pro‐ cesses, instead of the currently highlighted one. U Untag all processes (remove all tags added with the Space key). s Trace process system calls: if strace(1) is installed, pressing this key will attach it to the currently selected process, presenting a live update of system calls issued by the process. l Display open files for a process: if lsof(1) is installed, pressing this key will display the list of file descriptors opened by the process. L Trace process library calls: if ltrace(1) is installed, pressing this key will attach it to the currently selected process, present‐ ing a live update of library calls issued by the process. F1, h, ? Go to the help screen F2, S Go to the setup screen, where you can configure the meters displayed at the top of the screen, set various display options, choose among color schemes, and select which columns are displayed, in which order. F3, / Incrementally search the command lines of all the displayed pro‐ cesses. The currently selected (highlighted) command will update as you type. While in search mode, pressing F3 will cycle through matching occurrences. F4, \ Incremental process filtering: type in part of a process command line and only processes whose names match will be shown. To cancel filtering, enter the Filter option again and press Esc. F5, t Tree view: organize processes by parenthood, and layout the rela‐ tions between them as a tree. Toggling the key will switch between tree and your previously selected sort view. Selecting a sort view will exit tree view. F6, <, > Select a field for sorting. The current sort field is indicated by a highlight in the header. F7, ] Increase the selected process's priority (subtract from 'nice' value). This can only be done by the superuser. F8, [ Decrease the selected process's priority (add to 'nice' value) F9, k "Kill" process: sends a signal which is selected in a menu, to one or a group of processes. If processes were tagged, sends the signal to all tagged processes. If none is tagged, sends to the currently selected process. F10, q Quit I Invert the sort order: if sort order is increasing, switch to decreasing, and vice-versa. +, - When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name. a (on multiprocessor machines) Set CPU affinity: mark which CPUs a process is allowed to use. u Show only processes owned by a specified user. M Sort by memory usage (top compatibility key). P Sort by processor usage (top compatibility key). T Sort by time (top compatibility key). F "Follow" process: if the sort order causes the currently selected process to move in the list, make the selection bar follow it. This is useful for monitoring a process: this way, you can keep a process always visible on screen. When a movement key is used, "follow" loses effect. K Hide kernel threads: prevent the threads belonging the kernel to be displayed in the process list. (This is a toggle key.) H Hide user threads: on systems that represent them differently than ordinary processes (such as recent NPTL-based systems), this can hide threads from userspace processes in the process list. (This is a toggle key.) Ctrl-L Refresh: redraw screen and recalculate values. Numbers PID search: type in process ID and the selection highlight will be moved to it. COLUMNS The following columns can display data about each process. A value of '-' in all the rows indicates that a column is unsupported on your system, or currently unimplemented in htop. The names below are the ones used in the "Available Columns" section of the setup screen. If a different name is shown in htop's main screen, it is shown below in parenthesis. Command The full command line of the process (i.e program name and argu‐ ments). PID The process ID. PPID The parent process ID. PGRP The process's group ID. SESSION (SESN) The process's session ID. TTY_NR (TTY) The controlling terminal of the process. TPGID The process ID of the foreground process group of the controlling terminal. STATE (S) The state of the process: S for sleeping (idle) R for running D for disk sleep (uninterruptible) Z for zombie (waiting for parent to read it's exit status) T for traced or suspended (e.g by SIGTSTP) W for paging PROCESSOR (CPU) The ID of the CPU the process last executed on. NLWP The number of threads in the process. NICE (NI) The nice value of a process, from 19 (low priority) to -20 (high priority). A high value means the process is being nice, letting others have a higher relative priority. Only root can lower the value. PERCENT_CPU (CPU%) The percentage of the CPU time that the process is currently using. UTIME (UTIME+) The user CPU time, which is the amount of time the process has spent executing on the CPU in user mode (i.e everything but system calls), measured in clock ticks. STIME (STIME+) The system CPU time, which is the amount of time the kernel has spent executing system calls on behalf of the process, measured in clock ticks. TIME (TIME+) The time, measured in clock ticks that the process has spent in user and system time (see UTIME, STIME above). CUTIME The children's user CPU time, which is the amount of time the process's waited-for children have spent executing in user mode (see UTIME above). CSTIME The children's system CPU time, which is the amount of time the ker‐ nel has spent executing system calls on behalf of all the process's waited-for children (see STIME above). PRIORITY (PRI) The kernels internal priority for the process, usually just it's nice value plus twenty. Different for real-time processes. PERCENT_MEM The percentage of memory the process is currently using (based on the process's resident memory size, see M_RESIDENT below). M_SIZE (VIRT) Size in memory of the total program size. M_RESIDENT (RES) The resident set size, i.e the size of the text and data sections, plus stack usage. M_SHARE (SHR) The size of the process's shared pages M_TRS (CODE) The size of the text segment of the process (i.e the size of the processes executable instructions). M_LRS (LIB) The library size of the process. M_DRS (DATA) The size of the data segment plus stack usage of the process. M_DT (DIRTY) The size of the dirty pages of the process. ST_UID (UID) The user ID of the process owner. USER The username of the process owner, or the user ID if the name can't be determined. STARTTIME The time the process was started. RCHAR (RD_CHAR) The number of bytes the process has read. WCHAR (WR_CHAR) The number of bytes the process has written. SYSCR (RD_SYSC) The number of read(2) syscalls for the process. SYSCW (WR_SYSC) The number of write(2) syscalls for the process. RBYTES (IO_RBYTES) Bytes of read(2) I/O for the process. WBYTES (IO_WBYTES) Bytes of write(2) I/O for the process. IO_READ_RATE (IORR) The I/O rate of read(2) in bytes per second, for the process. IO_WRITE_RATE (IOWR) The I/O rate of write(2) in bytes per second, for the process. IO_RATE (IO) The I/O rate, IO_READ_RATE + IO_WRITE_RATE (see above). CNCLWB (IO_CANCEL) Bytes of cancelled write(2) I/O. CGROUP Which cgroup the process is in. CTID OpenVZ container ID, a.k.a virtual environment ID. VPID OpenVZ process ID. VXID VServer process ID. All other flags Currently unsupported (always displays '-'). SEE ALSO proc(5), top(1), free(1), ps(1), uptime(1) AUTHORS htop is developed by Hisham Muhammad<EMAIL_ADDRESS>This man page was written by Bartosz Fenski<EMAIL_ADDRESS>for the Debian GNU/Linux distribution (but it may be used by others). It was updated by Hisham Muhammad, and later by Vincent Launchbury, who wrote the 'Columns' section. htop 1.0.1 2011 HTOP(1)


Govt selling PSUs to pamper some private players: Adhir Ranjan Chowdhury
Government is selling family silver of the country to pursue privatisation and is doing so without Parliament scrutiny, he said while speaking after Question Hour.
by PTICongress leader Adhir Ranjan Chowdhury on Friday attacked the BJP-led government over disinvestment of PSUs, accusing it of pursuing privatisation to "pamper" some private players.
Government is selling family silver of the country to pursue privatisation and is doing so without Parliament scrutiny, he said while speaking after Question Hour.
Chowdhury said, "Government is selling profit-making PSUs to pamper some private players."
The Speaker then told him that the time alloted to him was over.
At this point, Congress members along with Chowdhury walked out of the House.
The Cabinet chaired by Prime Minister Narendra Modi on Wednesday approved strategic disinvestment in five public sector undertakings including BPCL, Shipping Corporation of India and Concor.


|
AOMedia Codec SDK
|
aom region of interest map More...
#include <aomcx.h>
Data Fields | |
| unsigned char * | roi_map |
| unsigned int | rows |
| unsigned int | cols |
| int | delta_q [8] |
| int | delta_lf [8] |
| unsigned int | static_threshold [8] |
aom region of interest map
These defines the data structures for the region of interest map
TODO(yaowu): create a unit test for ROI map related APIs
| unsigned char* aom_roi_map::roi_map |
An id between 0 and 7 for each 8x8 region within a frame.
| unsigned int aom_roi_map::rows |
Number of rows.
| unsigned int aom_roi_map::cols |
Number of columns.
| int aom_roi_map::delta_q[8] |
Quantizer deltas.
| int aom_roi_map::delta_lf[8] |
Loop filter deltas.
| unsigned int aom_roi_map::static_threshold[8] |
Static breakout threshold for each segment.


Questions or comments?
Please contact<EMAIL_ADDRESS>Please use the email above or contact Executive Committee Chair Mark Uhen, or Secretary Jocelyn Sessa.


PSALMS 78
A psalm written by Asaph
1 My friends, listen to what I am going to teach you;
pay careful attention to what I will say.
2 I am going to give you some sayings that wise people have said.
They will be sayings about things that happened long ago,
things that were difficult to understand.
3 These are things that we have heard and known previously,
things that our parents and grandparents told us.
4 We will tell these things to our children,
but we will also tell our grandchildren
about Yahweh's power and the glorious things that he has done.
5 He gave laws and commandments to the Israelite people,
those who are the descendants of Jacob,
and he told our ancestors to teach them to their children.
6 He commanded this so that their children would also know them
and so that they would teach them to their own children.
7 In that way, they also would trust in God
and would not forget the things that he has done;
instead, they would obey his commandments.
8 They would not be like their ancestors,
who were very stubborn and kept rebelling against God;
they did not continue firmly trusting in God,
and they did not worship him alone.
9 The soldiers of the tribe of Ephraim had bows and arrows,
but they ran away from their enemies on the day that they fought with their enemies.
10 They did not do what they had agreed with God that they would do;
they refused to obey his laws.
11 They forgot what he had done;
they forgot about the miracles that they had seen him perform.
12 While our ancestors were watching,
God performed miracles in the area around the city of Zoan in Egypt.
13 Then he caused the sea of Reeds to divide,
causing the water on each side to pile up like a wall,
with the result that our ancestors walked through it on dry ground.
14 He led them by a bright cloud during the day
and by a fiery light during the night.
15 He split rocks open in the wilderness
and gave to our ancestors plenty of water from deep inside the earth.
16 He caused a stream of water to flow from the rock;
the water flowed like a river.
17 But our ancestors continued to sin against God;
in the wilderness they rebelled against the one who is greater than any other god.
18 By demanding that God give them the food that they desired,
they tried to find out if he would always do what they requested him to do.
19 They insulted God by saying, "Can God supply food for us here in this desert?
20 It is true that he struck the rock,
with the result that water gushed out,
but can he also provide bread and meat for us, his people?"
21 So when Yahweh heard that, he became very angry,
and he sent a fire to burn up some of his Israelite people.
22 He did that because they did not trust in him,
and they did not believe that he would rescue them.
23 But God spoke to the sky above them
and commanded it to open like a door,
24 and then food fell down like rain,
food that they named "manna."
God gave them grain from heaven.
25 So the people ate the food that angels eat,
and God gave to them all the manna that they wanted.
26 Later, he caused the wind to blow from the east,
and by his power he also sent wind from the south,
27 and the wind brought birds
which were as numerous as the grains of sand on the seashore.
28 God caused those birds to fall in the middle of their camp.
There were birds all around their tents.
29 So the people cooked the birds and ate the meat; their stomachs were full
because God had given them what they wanted.
30 But they had not yet eaten all that they wanted.
31 At that point, God was still very angry with them,
and he caused their strongest men to die;
he got rid of many of the finest young Israelite men.
32 In spite of all this, the people continued to sin;
in spite of all the miracles that God had performed,
they still did not trust that he would take care of them.
33 So he made them terrified all their lives;
he made them die young.
34 Whenever God caused some of the Israelites to die,
the others would repent;
they would be sorry and seriously ask God to save them.
35 They would remember that God was like a huge rock on which they would be safe,
and that he, who was greater than any other god, was the one who protected them.
36 But they tried to deceive God by what they said;
their words were all lies.
37 They were not loyal to him;
they ignored the covenant that he had made with them.
38 But God acted mercifully toward his people.
He forgave them for having sinned
and did not get rid of them.
Many times he refrained from becoming angry with them
and restrained himself from furiously punishing them.
39 He remembered that they were only humans who die,
humans who disappear as quickly as a wind that blows by and then is gone.
40 Many times our ancestors rebelled against God in the wilderness
and made him very sad.
41 Many times they did evil things to find out if they could do those things without God punishing them.
They frequently caused the holy God of Israel to become angry.
42 They forgot about his great power,
and they forgot about the time when he rescued them from their enemies.
43 They forgot about when he performed many miracles
in the area near the city of Zoan in Egypt.
44 He caused the Nile River to become red like blood
so that the people of Egypt had no water to drink.
45 He sent among the people of Egypt swarms of flies that bit them,
and he sent frogs that ate up everything.
46 He sent locusts to eat their crops
and the other things that grew in their fields.
47 He sent hail that destroyed the grapevines,
and he sent more hail that ruined the figs on the sycamore trees.
48 He sent hail that killed their cattle
and lightning that killed their sheep and cows.
49 Because God was fiercely angry with the people of Egypt,
he caused them to be very distressed.
The disasters that struck them were like a group of angels that destroyed everything.
50 He did not lessen his anger with them,
and he did not spare their lives;
he sent a plague that killed many of them.
51 In that plague he caused all the firstborn sons of the people of Egypt to die.
52 Then he led his people out of Egypt as a shepherd leads his sheep,
and he guided them while they walked through the wilderness.
53 He led them safely, and they were not afraid,
but their enemies were drowned in the sea.
54 Later he brought them to Canaan, his sacred land,
to Mount Zion,
and by his power he enabled them to conquer the people who were living there.
55 He expelled the people groups while his people were advancing;
he assigned part of the land for each tribe to possess,
and he gave the houses of those people to the Israelites.
56 However, the Israelites rebelled against God, who is greater than any other God,
and they did many evil things to see if they could do those things without God punishing them;
they did not obey his commandments.
57 Instead, as their ancestors did, they rebelled against God and were not loyal to him;
they were as unreliable as a bow that breaks when you try to shoot with it.
58 Because they worshiped carved images of their gods on the tops of hills,
they caused God to become angry.
59 He saw what they were doing and became very angry,
so he rejected the Israelite people.
60 He no longer appeared to them at Shiloh
in the sacred tent where he had lived among them.
61 He allowed their enemies to capture the sacred chest,
which was the symbol of his power and his glory.
62 Because he was angry with his people,
he allowed their enemies to kill them.
63 Young men were killed in battles,
with the result that the young women had no one to marry.
64 Many priests were killed by their enemies' swords,
and the people did not allow the priests' widows to mourn.
65 Later, it was as though the Lord awoke from sleeping;
he was like a strong man who became angry because he drank a lot of wine.
66 He pushed his enemies back
and caused them to be very ashamed for a long time
because they had been defeated.
67 But he did not set up his tent where the people of the tribe of Ephraim lived;
he did not choose their area to do that.
68 Instead he chose the area where the tribe of Judah lived;
he chose Mount Zion, which he loves.
69 He decided to have his temple built there, high up, like his home in heaven;
he caused it to be firm, like the earth,
and intended that his temple would last forever.
70 He chose David, who served him faithfully,
and took him from the pastures
71 where he was taking care of his father's sheep,
and appointed him to be the leader of the Israelites,
the people who would always belong to God.
72 David took care of the Israelite people sincerely and wholeheartedly,
and he guided them skillfully.


--- layout: post authors: ["Greg Wilson"] title: "Agenda for This Month's Lab Meeting" date: 2014-05-13 time: "17:00:00" tags: ["Announcements", "Community", "Lab Meeting"] ---
The next Software Carpentry lab meeting will be held at 10:00 Eastern on Thursday, May 22, and repeated at 19:00 Eastern on the same day. (You can use this site to translate those times into your time zone.) We will be voting on several small additions to the lesson material—please see the Etherpad for the list—and discussing plans for future additions, and the multi-site sprint in July. Conference call details will be on the Etherpad on Thursday morning; please add other agenda items to the pad, and we look forward to seeing you all then.


{% extends "_post.html" %}
{% hyde
title: "The Caves of Clojure: Part 6"
snip: "Real combat and messages."
created: 2012-07-30 09:50:00
flattr: true
%}
{% block article %}
This post is part of an ongoing series. If you haven't already done so, you
should probably start at [the beginning][].
This entry corresponds to [post six in Trystan's tutorial][trystan-tut].
If you want to follow along, the code for the series is [on Bitbucket][bb] and
[on GitHub][gh]. Update to the `entry-06` tag to see the code as it stands
after this post.
Sorry for the long wait for this entry. I've been working on lots of other
stuff and haven't had a lot of time to write. Hopefully I can get back to it
more often!
[the beginning]: /blog/2012/07/caves-of-clojure-01/
[trystan-tut]: http://trystans.blogspot.com/2011/09/roguelike-tutorial-06-hitpoints-combat.html
[bb]: http://bitbucket.org/sjl/caves/
[gh]: http://github.com/sjl/caves/
[TOC]
Summary
-------
In Trystan's sixth post he adds a combat system and messaging infrastructure.
Once again I'm following his lead and implementing the same things, but in the
entity/aspect way of doing things.
As usual I ended up refactoring a few things, which I'll briefly cover first.
Refactoring
-----------
So far, the functions entities implement to fulfill aspects have looked like
this:
:::clojure
(defaspect Digger
(dig [this world dest]
...)
(can-dig? [this world dest]
...))
The entity has to be the first argument, because that's how protocols work.
I don't have any flexibility there. I originally made the world always be the
second argument, but it turns out that it's more convenient to make the world
the *last* argument.
To see why, imagine we want to allow players to dig and move at the same time,
instead of forcing them to be separate actions. Updating the world might look
like this:
:::clojure
(let [new-world (dig player world dest)
new-world (move player world dest)]
new-world)
You could make this one specific case a bit prettier, but in general chaining
together world-modifying actions is going to be a pain. If I change the aspect
functions to take the player, then other args, and *then* the world, I can use
`->>` to chain actions:
:::clojure
(->> world
(dig player dest)
(move player dest))
Much cleaner! I went ahead and switched all the aspect functions to use this
new scheme.
I also did some other minor refactoring. You can look through the changesets if
you're really curious.
Attacking and Defending
-----------------------
Instead of simply killing everything in one hit, I'm now going to give some
creatures a bit of hp. I also added a `:max-hp` attribute, since I'll likely
need that in the future. Here's a sample of what the `Bunny` creation function
looks like:
:::clojure
(defn make-bunny [location]
(map->Bunny {:id (get-id)
:name "bunny"
:glyph "v"
:color :yellow
:location location
:hp 4
:max-hp 4}))
I started using the `map->Foo` record constructors because the `->Foo` versions
that relied on positional arguments started getting hard to read.
Bunnies have 4 hp. It'd be trivial to randomize this in the future, but for now
I'll stick with a simple number.
Trystan uses a simple attack and defense system. I toyed with the idea of using
a different one (like Brogue's) but figured I should stick to his tutorial when
there's no clear reason not to.
Trystan's system needs attack and defense values, so I added functions to the
`Attacker` and `Destructible` aspects to retrieve these:
:::clojure
(defaspect Attacker
(attack [this target world]
...)
(attack-value [this world]
(get this :attack 1)))
(defaspect Destructible
(take-damage [this damage world]
...)
(defense-value [this world]
(get this :defense 0)))
The default attack value is `1`. If an entity has an `:attack` attribute that
will be used instead. Or the entity could provide a completely custom version
of `attack-value` (e.g.: werewolves could have a larger attack if there's a full
moon in the game or something). Defense values work the same way.
Now that I'm starting to actually use HP I'll display it in the bottom row of
info on the screen:
:::clojure
(defn draw-hud [screen game]
(let [hud-row (dec (second (s/get-size screen)))
player (get-in game [:world :entities :player])
{:keys [location hp max-hp]} player
[x y] location
info (str "hp [" hp "/" max-hp "]")
info (str info " loc: [" x "-" y "]")]
(s/put-string screen 0 hud-row info)))
The bottom row of the screen now looks like: "hp [20/20] loc: [82-103]". I'll
probably get rid of the loc soon, but for now it won't hurt to keep it onscreen.
Now for the damage calculation. I added a little helper function to take care
of this in `attacker.clj`:
:::clojure
(defn get-damage [attacker target world]
(let [attack (attack-value attacker world)
defense (defense-value target world)
max-damage (max 0 (- attack defense))
damage (inc (rand-int max-damage))]
damage))
This matches what Trystan does. In a nutshell, the damage done is: "If defense
is higher than attack, then 1. Otherwise, a random number between 1 and (attack
- defense)."
I kept it separate from the `attack` function so that an entity can override
attack without having to reimplement this logic.
The `attack` default implementation needs to use this new damage calculator:
:::clojure
(defaspect Attacker
(attack [this target world]
{:pre [(satisfies? Destructible target)]}
(let [damage (get-damage this target world)]
(take-damage target damage)))
(attack-value [this world]
(get this :attack 1)))
`Destructible` already handles reducing HP appropriately. The only thing left
is to give my entities some non-1 attack, defense, and/or hp values. For now
I used the following values:
* Bunnies have 4 HP, default defense.
* Lichens have 6 HP, default defense.
* Silverfish have 15 HP, default defense.
* Players have 40 HP, 10 attack, default defense.
These are really just placeholder numbers until I add the ability for monsters
to attack back. Once I do that I'll be able to play the game a bit and
determine if it's too easy or hard.
Messaging
---------
Now the player can attack things and it may take a few swings to kill them. The
problem is that there's no feedback while this is going on, so it's hard to tell
that you're actually doing damage until the monster dies.
A messaging system will let me display informational messages to give the player
some feedback. I decided to implement this like everything else: as an aspect.
An entity that implements the `Receiver` protocol will be able to receive
messages. Here's `entities/aspects/receiver.clj`:
:::clojure
(ns caves.entities.aspects.receiver
(:use [caves.entities.core :only [defaspect]]
[caves.world :only [get-entities-around]]))
(defaspect Receiver
(receive-message [this message world]
(update-in world [:entities (:id this) :messages] conj message)))
(defn send-message [entity message args world]
(if (satisfies? Receiver entity)
(receive-message entity (apply format message args) world)
world))
I've got a helper function `send-message` which is what entities will use to
send messages, instead of performing the `(satisfies? Receiver entity)` check
themselves every time. If the entity they're sending the message to isn't
a `Receiver` it will simply drop the message on the floor by returning the world
unchanged. It also handles formatting the message string for them.
The default `receive-message` simply appends the message to a `:messages`
attribute in the entity.
I have a lot of ideas about extending this system in the future, but for now
I'll just keep it simple to match Trystan's.
Now I need to send some messages. The most obvious place to do this is when
something attacks something else, so I updated the `Attacker` aspect once more:
:::clojure
(defaspect Attacker
(attack [this target world]
{:pre [(satisfies? Destructible target)]}
(let [damage (get-damage this target world)]
(->> world
(take-damage target damage)
(send-message this "You strike the %s for %d damage!"
[(:name target) damage])
(send-message target "The %s strikes you for %d damage!"
[(:name this) damage]))))
(attack-value [this world]
(get this :attack 1)))
This is starting to get a little crowded. If I need to do much more in here
I'll refactor some stuff out into helper functions. But for now it's still
readable.
Here you can see how making world-altering functions take the world as the last
argument pays off by letting me use `->>` to chain together actions.
I also added a `:name` attribute to entities so I can say "You strike the bunny"
instead of "You strike the v". Nothing too special there.
Finally, I need a way to notify nearby entities when something happens. Here's
what I came up with:
:::clojure
(defn send-message-nearby [coord message world]
(let [entities (get-entities-around world coord 7)
sm (fn [world entity]
(send-message entity message [] world))]
(reduce sm world entities)))
First I grab all the entities within 7 squares of the message coordinate. Then
I create a little helper function called `sm` that wraps `send-message`. It
will take a world and an entity and return the modified world. I use `reduce`
here to iterate over the entities and send the message to each one. It's
a pretty way of handling that looping.
The `get-entities-around` function is new:
:::clojure
(defn get-entities-around
([world coord] (get-entities-around world coord 1))
([world coord radius]
(filter #(<= (radial-distance coord (:location %))
radius)
(vals (:entities world)))))
It looks through all the entities in the world and returns a sequence of those
whose "radial" distance is less than or equal to the given radius. The "radial
distance" (also called the "king's move" distance by some) looks like this:
:::text
3333333
3222223
3211123
3210123
3211123
3222223
3333333
And the function:
:::clojure
(defn radial-distance
"Return the radial distance between two points."
[[x1 y1] [x2 y2]]
(max (abs (- x1 x2))
(abs (- y1 y2))))
I may end up needing to modify this `send-message-nearby` function to be a bit
more powerful in the future. Trystan's version modifies the verbs and such.
For now this is good enough for me.
Now I can make lichens notify nearby creatures when they grow:
:::clojure
(defn grow [{:keys [location]} world]
(if-let [target (find-empty-neighbor world location)]
(let [new-lichen (make-lichen target)
world (assoc-in world [:entities (:id new-lichen)] new-lichen)
world (send-message-nearby location "The lichen grows." world)]
world)
world))
The last step is to actually display these messages to the player. I added
a `draw-messages` function to the `ui/drawing.clj` file:
:::clojure
(defn draw-messages [screen messages]
(doseq [[i msg] (enumerate messages)]
(s/put-string screen 0 i msg {:fg :black :bg :white})))
And then I modified the main `draw-ui` function for `:play` UIs to draw the
messages on top of the map:
:::clojure
(defmethod draw-ui :play [ui game screen]
(let [world (:world game)
{:keys [tiles entities]} world
player (:player entities)
[cols rows] (s/get-size screen)
vcols cols
vrows (dec rows)
origin (get-viewport-coords game (:location player) vcols vrows)]
(draw-world screen vrows vcols origin tiles)
(doseq [entity (vals entities)]
(draw-entity screen origin vrows vcols entity))
(draw-hud screen game)
(draw-messages screen (:messages player))
(highlight-player screen origin player)))
This does mean that messages will cover a bit of the screen. For now I'll live
with that, but in the future it's something to fix.
Finally we need to clear the message queue out periodically, otherwise it'll
grow until it covers the entire screen! I modified the main game loop in
`core.clj`:
:::clojure
(defn clear-messages [game]
(assoc-in game [:world :entities :player :messages] nil))
(defn run-game [game screen]
(loop [{:keys [input uis] :as game} game]
(when (seq uis)
(if (nil? input)
(let [game (update-in game [:world] tick-all)
_ (draw-game game screen)
game (clear-messages game)]
(recur (get-input game screen)))
(recur (process-input (dissoc game :input) input))))))
Results
-------
After fixing a few other bugs (you can read the changelog if you're interested)
I've now got a working combat system, and a messaging system so I can tell
what's going on:
![Screenshot](/media/images{{ parent_url }}/caves-06-01.png)
It's actually starting to feel like a real game now, instead of just a sandbox
where you can break things.
You can view the code [on GitHub][result-code] if you want to see the end
result.
[result-code]: https://github.com/sjl/caves/tree/entry-06/src/caves
The next article will move on to Trystan's seventh post, which adds multiple
z-levels to the caves.
{% endblock article %}


Severed arms found in backpack of prominent Russian professor: reports
by The Associated Press, StaffMOSCOW -- Police in the Russian city of St. Petersburg plan to interrogate a prominent professor who has been detained on suspicion of killing a female student after he was pulled from a frigid river with a backpack containing severed arms.
Oleg Sokolov, a history professor at St. Petersburg State University who is an expert in French revolutionary military history, was found Saturday in the Moika River with the rucksack. Police later found the body of his student in his apartment, Russian news reports said.
Lawyer Alexander Pochuev said Sokolov has signed a statement of guilt, the Russian media reports said. Sokolov was hospitalized Saturday for hypothermia but was taken to a police station Sunday for questioning.
Reports said Sokolov had been awarded France's Legion of Honor for his work.


This is common-class in yLib.
More...
#include <ycommon.hpp>
This is common-class in yLib.
◆ yCommon() [1/3]
| yLib::yCommon::yCommon |
( |
| ) |
|
|
inlinenoexcept |
◆ ~yCommon()
| yLib::yCommon::~yCommon |
( |
| ) |
|
|
inlinenoexcept |
◆ yCommon() [2/3]
| yLib::yCommon::yCommon |
( |
const yCommon & |
common | ) |
|
|
delete |
Copy constructor.
- Parameters
-
- Warning
- This op is deleted.
- Returns
◆ yCommon() [3/3]
| yLib::yCommon::yCommon |
( |
const yCommon && |
common | ) |
|
|
delete |
Move constructor.
- Parameters
-
- Warning
- This op is deleted.
- Returns
◆ GetyLibBuildInfo()
get build-info-string of yLib.
- Warning
- Returns
- The build-info-string
◆ GetyLibVersion()
get version-string of yLib.
- Warning
- Returns
- the version-string
◆ operator=() [1/2]
Assignment constructor.
- Parameters
-
- Warning
- This op is deleted.
- Returns
- The reference of yCommon's object.
◆ operator=() [2/2]
Assignment constructor.
- Parameters
-
- Warning
- This op is deleted.
- Returns
- The reference of yCommon's object.
◆ ylib_version
| yLib::yCommon::ylib_version |
|
private |
the current version of yLib
The documentation for this class was generated from the following files:


Colaboration just got so much easier with GitScratch.
Scratch has always been centered around learning from others. Remixing just got so much easier.


| Created: | 6/27/2020 7:03:56 AM |
| Modified: | 6/27/2020 7:03:56 AM |
| Project: | |
| Advanced: |
| Attribute |
|
Public serial id |
|
Details:
|
|
Public integer waiver_type_id |
|
Details:
|
|
Public varchar(255) type |
|
Details:
|
|
Public integer distribution_group_rank |
|
Details:
|
|
Public varchar(255) created_by |
|
Details:
|
|
Public timestamp with time zone(0) created_at |
|
Details:
|
|
Public timestamp with time zone(0) updated_at |
|
Details:
|
|
Public varchar(255) updated_by |
|
Details:
|
|
Public timestamp with time zone(0) start_date |
|
Details:
|
|
Public varchar(255) mbes_form_name |
|
Details:
|
|
Public boolean is_reportable |
|
Details:
|
| Operation | ||
|
Public waiver_type_versions_pkey( id: serial, |
||
|
Details:
<<PK>>
|
||
|
Public waiver_type_versions_waiver_type_id_foreign( waiver_type_id: integer, |
||
|
Details:
<<FK>>
|
| Element | Source Role | Target Role |
|
«table» waiver_types Table «FK» |
Name: waiver_type_versions_waiver_type_id_foreign |
Name: waiver_types_pkey |
|
Details:
|
| Tag | Value |
| Owner | public |
|
Details:
|
| Property | Value |
| isFinalSpecialization: | 0 |


Violent crime in Baltimore spiked after 2015. That year, homicides jumped 62 percent to 342, a level previously unseen since the 1990s. Carjackings, shootings and commercial robberies all skyrocketed as overall violent crime rose 9.8 percent.
Two years after that pivotal year, overall violent crime continues to climb in the city. Below, we look at how violent crime has changed in two distinct time periods — the three years before 2015 and the past three years.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Aggravated Assault
An assault with any kind of weapon
Common Assault
When someone uses their hands to assault you, such as a punch in the face
Homicide
Killing of another person
Rape
Unlawful sexual activity or intercourse carried out against the will of the other person or with someone who is incapable of valid consent
Robbery
The use of violence or threat of violence to steal
Shooting
Unlawful shooting of another person
These three year segments, from 2012 to 2014 and 2015 to 2017, were chosen to highlight a turning point in recent city history.
From 2012 to 2014, the city saw steadily declining numbers in violent crime. But in the past three years, numbers have increased.
Overall violent crime between these two time periods is up 9.8 percent. Most categories of violent crime either increased or stayed about the same, with the biggest percentage growths in homicides, shootings and robberies.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Though homicides and shootings only make up a small percentage of overall violent crime, they saw one of the highest percentage jumps from 2012-2014 to 2015-2017.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
| 2012 - 2014 | 2015 - 2017 | % change | |
|---|---|---|---|
| Sandtown-Winchester | 47 | 123 | 162% |
| Brooklyn | 32 | 108 | 238% |
| Central Park Heights | 41 | 76 | 85% |
| East Baltimore Midway | 25 | 70 | 180% |
| Belair-Edison | 47 | 69 | 47% |
| Broadway East | 39 | 67 | 72% |
| Coldstream Homestead Montebello | 34 | 60 | 76% |
| Upton | 38 | 60 | 58% |
| Carrollton Ridge | 24 | 59 | 146% |
| Mondawmin | 28 | 57 | 104% |
| Frankford | 34 | 52 | 53% |
| Harlem Park | 18 | 49 | 172% |
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
The neighborhoods with the most shootings and homicides today are largely the same ones from 2012-2014, but many saw massive spikes in numbers.
From 2012-2014, Sandtown-Winchester and Belair-Edison each had a combined 47 shootings and homicides, more than any other neighborhood.
In the past three years, 12 neighborhoods had more than 47 shootings and homicides combined from 2015 to 2017, led by Sandtown-Winchester with 123 and Brooklyn with 108.
Shootings and killings are also occurring earlier in the day now. From 2012 and 2014, 48 percent of shootings and homicides took place between 9 p.m. and 3 a.m. That figure is down to 40 percent between 2015 and 2017. Shootings and homicides between 9 a.m. and 9 p.m. are up 7 percentage points.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/1/2017
In raw numbers, robberies make up the bulk of the increase in violent crime in Baltimore. The city saw 4,358 more robberies between 2015 and 2017. Of these, street robberies are the most common.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
The areas targeted most in street robberies include both neighborhoods known to experience high crime as well as those that people view as safe from more serious crimes such as shootings or homicides.
Street robberies in downtown Baltimore outpace all other neighborhoods, occurring nearly twice as often as the next neighborhood.
| Street Robberies | Shootings and Homicides | |
|---|---|---|
| Downtown | 518 | 36 |
| Frankford | 273 | 52 |
| Belair-Edison | 210 | 69 |
| Patterson Park Neighborhood | 203 | 7 |
| Brooklyn | 179 | 108 |
| Bolton Hill | 150 | 1 |
| Hamilton Hills | 148 | 19 |
| Baltimore Highlands | 148 | 15 |
| Fells Point | 140 | 13 |
| Charles Village | 138 | 5 |
| Ednor Gardens-Lakeside | 137 | 7 |
| Canton | 136 | 4 |
| Mount Vernon | 136 | 4 |
| Central Park Heights | 132 | 76 |
| Coldstream Homestead Montebello | 130 | 60 |
Source: Baltimore Police Department Victim-Based Crime Data, 2015 - 12/30/2017
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Carjackings saw the largest percentage increases over the past three years. Though it is still the least common type of robbery in Baltimore, it has seen the largest change out of all violent crimes.
Most of the areas targeted in these carjackings are places that previously saw very few incidents.
| 2012-2014 | 2015-2017 | % change | |
|---|---|---|---|
| Coldspring | 1 | 37 | 3600% |
| Gwynns Falls | 2 | 28 | 1300% |
| Upton | 5 | 24 | 380% |
| Penn North | 1 | 21 | 2000% |
| Sandtown-Winchester | 5 | 21 | 320% |
| Frankford | 15 | 20 | 33% |
| Washington Village/Pigtown | 4 | 20 | 400% |
| Harlem Park | 2 | 19 | 850% |
| Reservoir Hill | 13 | 19 | 46% |
| Penrose/Fayette Street Outreach | 4 | 18 | 350% |
| Poppleton | 5 | 18 | 260% |
| Berea | 1 | 17 | 1600% |
| Hopkins Bayview | 0 | 17 | n/a |
| Bolton Hill | 1 | 16 | 1500% |
| Brooklyn | 3 | 16 | 433% |
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Commercial robberies have gone up 59 percent between the two time periods.
Most commercial robberies since 2012 occurred around the downtown area and major roads throughout the city. Similar to street robberies, downtown commercial robberies occured at twice the rate as the next neighborhood.
Roads targeted most include York Road, Reisterstown Road, Harford Road, Belair Road, and Pulaski Highway.
Meanwhile, residential robberies are one of the few types of violent crime that went down over the past few years. Between 2015 and 2017, it’s dropped by about 4 percent.
Explore where these commercial and residential robberies occur in the map below.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/1/2017
Aggravated Assault
An assault with any kind of weapon
Common Assault
When someone uses their hands to assault you, such as a punch in the face
While aggravated and common assault are the most common of violent crimes, these did not change as drastically over the past three years. While the number of aggravated assault incidents rose 13 percent, common assault dropped 9 percent.
The areas with the most aggravated assault incidents pre-2015 remained the same ones with the most incidents between 2015 and 2017. Of those, Brooklyn, Central Park Heights, Dunbar-Broadway had the biggest increases at about 40-60 percent.
| 2012-2014 | 2015-2017 | % change | |
|---|---|---|---|
| Sandtown-Winchester | 344 | 442 | 29% |
| Downtown | 386 | 439 | 14% |
| Brooklyn | 256 | 400 | 56% |
| Cherry Hill | 267 | 339 | 27% |
| Belair-Edison | 261 | 316 | 21% |
| Frankford | 277 | 308 | 11% |
| Central Park Heights | 213 | 304 | 43% |
| Upton | 231 | 260 | 13% |
| Carrollton Ridge | 203 | 248 | 22% |
| Broadway East | 216 | 239 | 11% |
| Coldstream Homestead Montebello | 236 | 227 | -4% |
| Dunbar-Broadway | 134 | 219 | 63% |
| McElderry Park | 182 | 199 | 9% |
| Mondawmin | 181 | 196 | 8% |
| Ellwood Park/Monument | 162 | 169 | 4% |
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Some other neighborhoods had fewer incidents but saw huge percentage increases in aggravated assault incidents.
| 2015-2017 | % change | |
|---|---|---|
| Penn-Fallsway | 114 | 322% |
| Middle Branch/Reedbird Parks | 84 | 223% |
| Gwynns Falls | 71 | 255% |
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Most neighborhoods with the most common assault incidents saw decreases over the past three years, but many of these neighborhoods are the same that saw spikes in aggravated assault, homicides, shootings and robberies.
Carroll - Canton Industrial Area bucked the trend and saw a 276 percent jump in common assaults from 63 incidents to 237.
The shift in the number of rape incidents appears to be scattered throughout neighborhoods. Some neighborhoods with the most incidents in the past, like downtown Baltimore, saw significant decreases, but overall numbers are up 8.5 percent.
| 2012-2014 | 2015-2017 | % change | |
|---|---|---|---|
| Downtown | 50 | 38 | -24% |
| Brooklyn | 22 | 22 | 0% |
| Belair-Edison | 15 | 21 | 40% |
| Frankford | 25 | 20 | -20% |
| Sandtown-Winchester | 18 | 18 | 0% |
| Carrollton Ridge | 12 | 17 | 42% |
| Cherry Hill | 18 | 16 | -11% |
| Baltimore Highlands | 4 | 15 | 275% |
| Upton | 9 | 15 | 67% |
| Central Park Heights | 5 | 13 | 160% |
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/1/2017
The prevalence of guns in the streets may be contributing to the rise in violent crime. Between 2015 and 2017, 25 percent of violent crimes were committed using firearms, up 8 percent compared to 2012-2014.
Source: Baltimore Police Department Victim-Based Crime Data, 2012 - 12/30/2017
After third year of rampant violence, Baltimore searches wearily for answers
Baltimore has now had 343 homicides in 2017, sets record for killings per capita


Chronos v1.8.0 Chronos View Source
Link to this section Summary
Functions
There is an option to supply a date. This is handy for testing
#beginning_of_week/2 function returns the date of starting day of the week for given date. It defaults to today for given date and Monday(1) for starting day of the week. Mon = 1, Tue = 2, Wed =3 , Thu = 4 , Fri = 5 , Sat = 6 , Sun = 7 If today is {2012,12,21} iex(1)> Chronos.beginning_of_week {2012,12,17} iex(2)> Chronos.beginning_of_week({2015,1,20}) {2015,1,19} iex(3)> Chronos.beginning_of_week({2015,1,20},3) {2015,1,14}
The day function allows you to extract the day from a date tuple
The following functions all have similar behavior. The days_ago/2 and weeks_ago/2 functions take a integer representing the number of days or weeks in the past and return the corresponding date. There is a optional argument for a date to base the calculation on but if no date is provided then the current date is used
#end_of_week/2 function returns the date of starting day of the week for given date. It defaults to today for given date and Sunday(7) for ending day of the week. Mon = 1, Tue = 2, Wed =3 , Thu = 4 , Fri = 5 , Sat = 6 , Sun = 7 If today is {2012,12,21} iex(1)> Chronos.end_of_week {2012,12,23} iex(2)> Chronos.end_of_week({2015,1,20}) {2015,1,25} iex(3)> Chronos.end_of_week({2015,1,20},3) {2015,1,21}
The epoch_time/1 function returns the number of seconds since January 1, 1970 00:00:00. If the date is prior to January 1, the integer will be negative
The from_epoch_time/1 function converts from epoch time to datetime tuple
The hour function allows you to extract the hour from a date/time tuple
The min function allows you to extract the minutes from a date/time tuple
The month function allows you to extract the month from a date tuple
The sec function allows you to extract the seconds from a date/time tuple
Chronos is an Elixir library for working with dates and times
The tomorrow function is based on the current date
Returns an integer representing the day of the week, 1..7, with Monday == 1
The yday function allows you to extract the day of the year (1-366) from a date tuple
The year function allows you to extract the year from a date tuple
The yesterday function is based on the current date
Link to this section Functions
There is an option to supply a date. This is handy for testing.
defmodule YourModule do
use Chronos, date: {2012, 12, 21}
end
iex(1)> YourModule.today {2012, 12, 21}
#beginning_of_week/2 function returns the date of starting day of the week for given date. It defaults to today for given date and Monday(1) for starting day of the week. Mon = 1, Tue = 2, Wed =3 , Thu = 4 , Fri = 5 , Sat = 6 , Sun = 7 If today is {2012,12,21} iex(1)> Chronos.beginning_of_week {2012,12,17} iex(2)> Chronos.beginning_of_week({2015,1,20}) {2015,1,19} iex(3)> Chronos.beginning_of_week({2015,1,20},3) {2015,1,14}
The day function allows you to extract the day from a date tuple
iex(1)> Chronos.day({2013, 8, 21}) 21
iex(2)> {2012, 12, 21} |> Chronos.day 21
The following functions all have similar behavior. The days_ago/2 and weeks_ago/2 functions take a integer representing the number of days or weeks in the past and return the corresponding date. There is a optional argument for a date to base the calculation on but if no date is provided then the current date is used.
iex(1)> Chronos.days_ago(5) {2013, 8, 16}
iex(2)> Chronos.weeks_ago(3) {2013, 3, 31}
The days_from/2 and weeks_from/2 return a future date calculated by the number of days or weeks. There is a optional argument for a date to base the calculation on but if no date is provided then the current date is used.
iex(1)> Chronos.days_from(5) {2013, 8, 26}
iex(2)> Chronos.weeks_from(3) {2013, 9, 11}
#end_of_week/2 function returns the date of starting day of the week for given date. It defaults to today for given date and Sunday(7) for ending day of the week. Mon = 1, Tue = 2, Wed =3 , Thu = 4 , Fri = 5 , Sat = 6 , Sun = 7 If today is {2012,12,21} iex(1)> Chronos.end_of_week {2012,12,23} iex(2)> Chronos.end_of_week({2015,1,20}) {2015,1,25} iex(3)> Chronos.end_of_week({2015,1,20},3) {2015,1,21}
The epoch_time/1 function returns the number of seconds since January 1, 1970 00:00:00. If the date is prior to January 1, the integer will be negative.
iex(1)> Chronos.epoch_time({2012, 12, 21}, {12, 30, 55}}
The from_epoch_time/1 function converts from epoch time to datetime tuple.
iex(1)> Chronos.from_epoch_time(1356048000)
The hour function allows you to extract the hour from a date/time tuple
iex> Chronos.hour({{2013, 8, 21}, {13, 34, 45}}) 13
iex> {{2013, 8, 21}, {13, 34, 45}} |> Chronos.hour 13
The min function allows you to extract the minutes from a date/time tuple
iex> Chronos.min({{2013, 8, 21}, {13, 34, 45}}) 34
iex> {{2013, 8, 21}, {13, 34, 45}} |> Chronos.min 34
The month function allows you to extract the month from a date tuple
iex(1)> Chronos.month({2013, 8, 21}) 8
iex(2)> {2012, 12, 21} |> Chronos.month 8
The sec function allows you to extract the seconds from a date/time tuple
iex> Chronos.sec({{2013, 8, 21}, {13, 34, 45}}) 45
iex> {{2013, 8, 21}, {13, 34, 45}} |> Chronos.sec 45
Chronos is an Elixir library for working with dates and times.
iex(1)> Chronos.today {2013, 8, 21}
The tomorrow function is based on the current date
iex(1)> Chronos.tomorrow {2013, 8, 22}
or you can pass it a date:
iex(2)> {2012, 12, 21} |> Chronos.tomorrow {2012, 12, 22}
Returns an integer representing the day of the week, 1..7, with Monday == 1.
iex(1)> Chronos.wday({2013, 8, 21}) 3
The yday function allows you to extract the day of the year (1-366) from a date tuple
iex(1)> Chronos.yday({2013, 8, 21}) 233
iex(2)> {2012, 12, 21} |> Chronos.day 356
The year function allows you to extract the year from a date tuple
iex(1)> Chronos.year({2013, 8, 21}) 2013
iex(2)> {2012, 12, 21} |> Chronos.year 2012
The yesterday function is based on the current date
iex(1)> Chronos.yesterday {2013, 8, 20}
or you can pass it a date:
iex(2)> {2012, 12, 21} |> Chronos.yesterday {2012, 12, 20}


Production Services
End to End Production Services from equipment rentals to complete itinerary management.
End to End Production Services from equipment rentals to complete itinerary management.
One of our specialities, Dedicated video editing on machines powered by creative thoughts.
Complete audio ehancement and tuning services. We get best in the business to do the very specifics.
We make the video pop by crisp tuning the color gradients.
We dont claim that everything we touch turns to gold, but we are more found of diamonds.
You got some abstract project or cool idea. We will help you to construct a video out of it.


During week 4, 5 and 6, the Metis Data Science Bootcamp zoomed in on the following technologies:
The remainder of this article reports on the project and business context in which these technologies were applied.
A bank wants to run a targeted marketing campaign in order to sell a term deposit product.
Given a certain (but unspecified) campaign budget:
The bank has a database of 41K past customer contact records, with an indication of successful and failed sales of this product.
Using the historic customer database, build a model to:
To evaluate model performance, produce for each machine learning algorithm:
For these steps, please check the iPython notebook, also available in our GitHub repository.
How well do our models perform? And much more importantly: how do they contribute to answering the business questions?
Let's start by looking at the ROC curve.
Hint: move the mouse over the graph, to highlight individual line points
Inside the False Positive Rate intervals [0-0.07] and [0.54-1.00] (horizontal axis), the logistic regression model scores best in terms of True Positive Rate (vertical axis). In between these two intervals, KNN (with k = 30) is the winning model. But all in all, the three algorithms play in the same league.
The selection of a specific FPR/TPR combination (and of a corresponding best algorithm) is for our customer to make. In business terms, this means making a trade-off between:
On its own, the ROC curve does not tell us how to set the optimal threshold. Therefore, let's try to formulate the trade-off more in operational terms, by means of a lift curve.
From our reference dataset, we know that only a fraction (<10 %) of our potential customers will accept an offer to buy the term deposit product. The question, of course, is who these customers are. For each customer in the test set, our trained models return a probability estimate of their purchase of the product. This probability allows us to rank our customers accordingly, which is key to making smart(er) decisions.
But first, for the sake of the argument, let's assume we only know the distribution of yes/no answers in the training data set, and nothing more. The (near-perfect) diagonal line from (0,0) to (100, 100) in the graph below represents such a baseline case. The model behind it was built by randomly guessing who might accept or reject the offer, according to this yes/no distribution.
So, in the baseline case, if we were to contact 20% of the customers (x axis), we can expect to hit approximately 20% of all customers who would actually buy the product (y axis). This is approximately true for any other percentage point along this (near-perfect) diagonal.
Luckily, we do have more information, so we can do better! For example, hover over data point (20.0, 63.2) on the upper KNN line. This data point means that by merely selecting the top-ranked one fifth of our customers, we can expect to hit no less than two thirds of all customers who would actually buy the product!
Each table that appears when hovering over the data points also mentions cumulative lift. This measure is simply defined as the ratio of the y over the x value in that point. For the example data point at (20.0, 63.2), lift is equal to the trained model yield (63.2 percent) divided by the (theoretical) baseline yield at the same x value, so lift is 63.2 / 20.0 = 3.16. In the steep left parts of the trained model curves, cumulative lift rises sharply. On the KNN curve, it reaches its maximum value (4.13) at x=13.0.
So based on the lift graph alone, the bank could decide to contact its 13% top-ranked customers, and then stop.
Alternatively, it could also decide to only stop contacting customers when the local lift (i.e. the lift in the percentile immediately preceding the point) starts dropping below 1, i.e. performing worse than the (theoretical) baseline. On the KNN curve, local lift fluctuates around 1 in the x interval [19.0-32.0], so this is not such a clear-cut decision.
Now, despite all these niceties, there's still one ingredient missing: money!
Each customer contact costs money, but also carries a potential reward in the form of future revenue. Let's bring in two new variables:
Even though we have to limit ourselves to averages, these variables do allow us to improve on our rather abstract lift curve. The default profit curve below assumes that each contact (successful or not) costs $10 on average, while the average successful one carries $50 in revenue.
In this default configuration, the KNN profit curve maxes out at x=14, bringing in $6840 of cumulative profit. Compare this to the cumulative loss of $2410 in case we would just contact customers in random order. As a matter of fact, the current cost/revenue configuration would constantly write in the red in the baseline case.
Now increase the average revenue per successful contact to $90, using the second slider on top of the graph above, and watch attentively. By increasing the profit per successful contact to $90-$10=$80, the shape of the profit curve has taken a different form. Cumulative profit now tops at $17.530, but to get there we have to contact 20% of all customers. Also, if we were to contact all (100%) customers, we would more or less break even, with a cumulative loss of only $330.
Finally, increase both sliders with $10, so their respective values become $20 and $100. While this has no effect on the profit per successful contact ($100-$20 = $80 = $90-$10), the loss per failed contact has doubled from $10 to $20. As a result, the trained model profit curves now cross the breakeven line again (around x=40%), while the baseline curve goes permanently in the red again.
The bottom line is that any specific configuration of cost and revenue greatly influences the shape of the curves, the profitability intervals, and therefore the decision boundaries.
How much does each individual customer contribute to cumulative profit? In the heatmap below, each cell represents one customer from the test set. Customers are displayed in the ranking order defined by the model, with the most probable buyer first. Reading order is left-to-right, top-down - the same as for written English.
In the baseline case, with default cost and revenue values, the heatmap progressively takes on deeper shades of red. Since the baseline lists customers in random order, there are more negative than positive contributions, no matter which region of the heatmap we look at. This is aptly demonstrated if you select profit: "contribution per individual customer".
Now select a non-baseline model, and see how the random distribution of individual positive profit contributions transforms into a more ordered view: the positive profit contributions are indeed pushed towards the beginning (top-left corner) of the heatmap. This is the power of the learned models at work.
Finally, also select different configurations of the cost and revenue parameters, and see how this influences the heatmap. For example, try the baseline model with cost 10 and revenue 90, as we did in the profit curve before. This configuration confirms that the cumulative profit remains near the break-even line.
Customers must be targeted in descending order of their probability to buy the product. Running the trained models on unseen customer data will provide such a ranking.
To enable an informed decision about when to halt the campaign, the bank must first provide information on cost and revenue per (successful) contact.
Having set the cost and revenue variables, define the optimization criterion (e.g. maximum cumulative profit). Then consult the profit curve and heatmap to identify which and how many customers to contact, most probable buyers first.


PWDs in Kwahu West receive support
by Eunice Tekie Tei, GNANkwakaw (E/R), Nov. 18, GNA - The Kwahu West Municipal Assembly through its District Disability Fund Management Committee has provided income generating items to 144 Persons With Disability in the municipality.
This comes as a result of the government's pledge to increase the disability fund component of the District Assemblies Common Fund from two per cent to three per cent.
The items presented to the PWDs include deep freezers, corn mills, gas ovens, sewing machines, plastic chairs, student mattresses, spraying machines, knitting and show grinding machines.
Mr Yaw Owusu-Addo, the Municipal Chief Executive (MCE), who disclosed this during the assembly's meet-the-press forum held at Nkawkaw, said the gesture was to fulfill the promise made by President Akuffo-Addo during the 2016 election campaign.
He said the empowerment of PWDs is a way to get them out of the streets and earn an economically rewarding occupation.
The MCE urged the beneficiaries to make productive use of the items and reminded them that, there would be an intensive and regular monitoring exercise to see what they are doing with the support they received.
Mr Owusu-Addo said the Livelihood Empowerment Against Poverty (LEAP) programme in the Municipality has also made head way as a total of 1,458 households from 61 communities have been enrolled onto the programme.
He said the assembly has registered over 200 beneficiaries under the National Health Insurance Scheme.
This, he said, was to enable the LEAP beneficiary households access quality healthcare.
He said that intensive monitoring would be instituted to ensure sustainability of the programme.
GNA


@import play.api.i18n.Messages @import play.api.mvc.RequestHeader @import org.webjars.play.WebJarsUtil @import controllers.AssetsFinder @(controller: de.htwg.se.minesweeper.controller.ControllerInterface, user: models.User)(implicit request: RequestHeader, messages: Messages, webJarsUtil: WebJarsUtil, assets: AssetsFinder) @main(messages("home.title"), Some(user)) {
Minesweeper is a single-player puzzle video game. The objective of the game is to clear a rectangular board containing hidden "mines" or bombs without detonating any of them, with help from clues about the number of neighboring mines in each field. The game originates from the 1960s, and has been written for many computing platforms in use today. It has many variations and offshoots.
PlayMinesweeper has its origins in the earliest mainframe games of the 1960s and 1970s. The earliest ancestor of Minesweeper was Jerimac Ratliff's Cube. The basic gameplay style became a popular segment of the puzzle game genre during the 1980s, with such titles as Mined-Out (Quicksilva, 1983), Yomp (Virgin Interactive, 1983), and Cube. Cube was succeeded by Relentless Logic (or RLogic for short), by Conway, Hong, and Smith, available for MS-DOS as early as 1985; the player took the role of a private in the United States Marine Corps, delivering an important message to the U.S. Command Center. RLogic had greater similarity to Minesweeper than to Cube in concept, but a number of differences exist:
1. In RLogic, the player must navigate through the minefield, from the top left right angled corner to the bottom right angled corner (the Command Center).
2. It is not necessary to clear all non-mine squares. Also, there is no mechanism for marking mines or counting the number of mines found.
3. The number of steps taken is counted. Although no high score functionality is included, players could attempt to beat their personal best score for a given number of mines.
4. Unlike Minesweeper, the size of the minefield is fixed. However, the player may still specify the number of mines.
5. Because the player must navigate through the minefield, it is sometimes impossible to win — namely, when the mines block all possible paths.
The gameplay mechanics of Minesweeper are included in a variety of other software titles, including:
1. The mini-game Vinesweeper implemented into the MMORPG RuneScape; in this iteration (written by Jagex developer Danny J), the Minesweeper gameplay is given a large multiplayer aspect and the "game board" adopts a continually resetting timer. This allows for a never-ending game of Minesweeper where the skill is assessed in points rather than "game completion".
2. The PC game Mole Control (developed by Remode); in this game, the minesweeper mechanic is integrated into a puzzle adventure game based in a village called Molar Creek, which has been overrun with exploding moles. You play the local inventor's assistant, who is tasked with clearing the village of exploding moles, and you can also take part in the Molar Creek Annual Mole Control competition in a Time Attack Mode.


American Pie (1999) Reviewed by Eugene Novikov http://www.ultimate-movie.com Member: Online Film Critics Society
*** out of four
"Suck me, beautiful!"
Starring Jason Biggs, Thomas DeLonge, Mark Hoppus, Travis Barker, Chris Klein, Eugene Levy, Thomas Ian Nichols, Natasha Lyonne. Rated R.
Hollywood has been buzzing about American Pie for months, with early rumors comparing it with There's Something About Mary and claiming that it "pushes the envelope" with regard to outrageousness. They were wrong. It doesn't push the envelope: it throws the envelope at you, and damned if it doesn't work. This is unquestionably a teen film but the plot is enough to make parents wince: a group of high school seniors make a pact that each of them will lose their virginity by graduation time in order to avoid potential embarassment in college. There's barely a few weeks left and for most of them it looks like prom night is their last hope. Each of them tries to devise their own plan to reach their goal, and some of those plans have unexpected consequences.
Of course there has to be some experimentation before they get to the real thing, so one of the protagonists asks "what third base feels like," and the response he gets is "like sweet warm, apple pie." When he comes home and finds a delicious looking apple pie on the kitchen table, what happens is anyone's guess. In another, equally gross scene, another one of the characters "inherits" a sex bible, made by high school seniors for high school seniors and passed down each year to another deserving candidate. He learns something new to try on his girlfriend called "The Tongue Tornado", which I won't (and can't) describe here.
First time director Chris Weitz (who co-wrote the film with brother Paul Weitz, the two also wrote Antz, one of last year's best films) first throws every trick in the book at you, then he throws the book and then starts hurling random objects (including that envelope I mentioned earlier) at the speed of a very large rabbit on steroids. He invariably gets the audience hooting, applauding and -- oh yeah -- laughing their hearts out.  That, too, can be taken as a virtue: it takes talent to make us laugh at something we find vulgar, profane and gross.
The acting is of no importance in a movie like this, but what is present here is more than passable. Newcomer Jason Biggs is palatably insecure in what is probably the most significant role in the movie. Natasha Lyonne (whom we first saw in Slums of Beverly Hills) is delightful in a disappointingly minor role.
 It's needlessly shallow, and I predict that Conservative activist groups will never let the filmmakers hear the end of it. But despite the movie's eventual fallacy, there is no ignoring its merits. It's a hilarious, affectionate look at teenagers' obsession with sex. While it's not exactly substantial and thematically sound, it'll sure as hell do.
What we have here is one of the rudest and crudest films I've seen this side of Pink Flamingoes. What we have here is one of the funniest films I've seen this side of the Austin Powers franchise and some of Mel Brooks' work. What we have here is a rollicking comic delight, an eye- popping gross out and a terrific summer film. ©1999 Eugene Novikov
Sent via Deja.com http://www.deja.com/ Share what you know. Learn what you don't.
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


Softshell Services is a team of Nuxeo experts with several years of experience in successful DAM project implementation. Its founder has worked as a core Nuxeo consultant to lead Nuxeo’s biggest customer project to success.
Only a handful of consultants are currently proficient in Nuxeo and web-based DAM software: Softshell Services gives you access to them.
Unlike other general consulting companies, Softshell Services primarily focuses on providing expertise in its core MAM and DAM domain. Softshell services team has worked with key players in the entertainment industry. We have helped customers to design and build apps in the cloud that manage tens of millions of documents at scale so applications can ingest TB of data smoothly at the “speed of light”. The team uses its AWS certifications (Developer & Architect) and in-depth knowledge of Nuxeo, NoSql, big data, Cloud, and JavaScript to build solutions with recurring costs cheaper than competitor’s solutions, while not sacrificing stability one bit and designing a very fast and efficient UI.


RESIOENTIAL MOBILITY OF SELECTED SCHOOL FAMILIES IN PITTSBURGH, PENNSYLVANIA, 1966-1969
by Leonard P, Tepper
B.A., California State College, 1966
Submitted to the Graduate Faculty of Arts and Sciences in partial fulfillment of the requirements for the degree of
Doctor of Philosophy
University of Pittsburgh
1971
Reproduced with permission of the copyright owner. Further reproduction prohibited without permission.


Dark Mode
Followers
12 Today
99 Today
1099 Today
Subscribers
144 Today
Page Views
3%
Likes
2%
2257%
Profile Views
1375%
Retweets
303%
533%
10%
Total Views
12%


A gold standard is a monetary system in which the standard economic unit of account is based on a fixed quantity of gold. Three types can be distinguished: specie, bullion, and exchange.
In the gold specie standard the monetary unit is associated with the value of circulatin...


|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Packages that use CapException.Reason | |
|---|---|
| com.google.publicalerts.cap | This package contains the core classes that encode the CAP protocol as well as classes that can parse and write CAP messages from a variety of wire formats. |
| com.google.publicalerts.cap.feed | This package contains classes to parse and write feeds (Atom, RSS, and more) enclosing CAP messages. |
| com.google.publicalerts.cap.profile | This package contains classes that handle specific CAP profiles, which specify a set of extra constraints on the CAP format. |
| com.google.publicalerts.cap.profile.au | |
| com.google.publicalerts.cap.profile.ca | |
| com.google.publicalerts.cap.profile.us | |
| com.google.publicalerts.cap.testing |
| Uses of CapException.Reason in com.google.publicalerts.cap |
|---|
| Methods in com.google.publicalerts.cap that return CapException.Reason | |
|---|---|
| static CapException.Reason | CapException.Reason.withNewLineNumber(CapException.Reason reason,
int newLineNumber)
Returns a new CapException.Reason with the given line number. |
| Methods in com.google.publicalerts.cap that return types with arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | CapException.getReasons()
Returns the list of reasons for this exception. |
| List<CapException.Reason> | XercesCapExceptionMapper.map(List<CapException.Reason> reasons)
Attempts to map CapException.Reasons of type CapException.Type.OTHER derived from Xerces-generated SAXParseExceptions to reasons with more descriptive CapException.Types and error messages specific to CAP. |
| List<CapException.Reason> | CapValidator.validate(MessageOrBuilder message,
String xmlns,
String xpath,
boolean visitChildren)
Validates the given message. |
| Methods in com.google.publicalerts.cap with parameters of type CapException.Reason | |
|---|---|
| static CapException.Reason | CapException.Reason.withNewLineNumber(CapException.Reason reason,
int newLineNumber)
Returns a new CapException.Reason with the given line number. |
| Method parameters in com.google.publicalerts.cap with type arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | XercesCapExceptionMapper.map(List<CapException.Reason> reasons)
Attempts to map CapException.Reasons of type CapException.Type.OTHER derived from Xerces-generated SAXParseExceptions to reasons with more descriptive CapException.Types and error messages specific to CAP. |
| Alert | CapXmlParser.parseFrom(InputSource is,
List<CapException.Reason> parseErrors)
Parse the given alert. |
| Alert | CapXmlParser.parseFrom(Reader reader,
List<CapException.Reason> parseErrors)
Parse the given alert. |
| Alert | CapXmlParser.parseFrom(String str,
List<CapException.Reason> parseErrors)
Parse the given alert. |
| protected Alert | CapXmlParser.parseFromInternal(CachedSaxInputSource is,
List<CapException.Reason> parseErrors)
|
| Constructors in com.google.publicalerts.cap with parameters of type CapException.Reason | |
|---|---|
| CapException(CapException.Reason... reasons)
|
| Constructor parameters in com.google.publicalerts.cap with type arguments of type CapException.Reason | |
|---|---|
| CapException(List<CapException.Reason> reasons)
|
| Uses of CapException.Reason in com.google.publicalerts.cap.feed |
|---|
| Methods in com.google.publicalerts.cap.feed that return types with arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | CapFeedValidator.checkForRecommendations(Channel channel)
Checks the given RSS feed for recommendations. |
| List<CapException.Reason> | CapFeedValidator.checkForRecommendations(Feed feed)
Checks the given Atom feed for recommendations. |
| List<CapException.Reason> | CapFeedValidator.checkForRecommendations(SyndFeed feed)
Checks the given feed for recommendations. |
| Method parameters in com.google.publicalerts.cap.feed with type arguments of type CapException.Reason | |
|---|---|
| Alert | CapFeedParser.parseAlert(SyndEntry entry,
List<CapException.Reason> parseErrors)
Parses the CAP alerts assumed to be in the <content> bodies of the entry. |
| Constructors in com.google.publicalerts.cap.feed with parameters of type CapException.Reason | |
|---|---|
| CapFeedException(CapException.Reason... reasons)
|
| Constructor parameters in com.google.publicalerts.cap.feed with type arguments of type CapException.Reason | |
|---|---|
| CapFeedException(List<CapException.Reason> reasons)
|
| Uses of CapException.Reason in com.google.publicalerts.cap.profile |
|---|
| Methods in com.google.publicalerts.cap.profile that return types with arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | GoogleProfile.checkForErrors(AlertOrBuilder alert)
|
| List<CapException.Reason> | CapProfile.checkForErrors(AlertOrBuilder alert)
Checks the given alert against the profile and returns a list of errors explaining how the alert does not match the profile. |
| List<CapException.Reason> | GoogleProfile.checkForRecommendations(AlertOrBuilder alert)
|
| List<CapException.Reason> | CapProfile.checkForRecommendations(AlertOrBuilder alert)
Checks the given alert against suggestions and best-practices recommended by the profile. |
| Method parameters in com.google.publicalerts.cap.profile with type arguments of type CapException.Reason | |
|---|---|
| protected void | AbstractCapProfile.checkZeroTimezone(List<CapException.Reason> reasons,
String dateStr,
String xpath,
CapException.ReasonType type)
Checks if the timezone on the given dateStr is zero. |
| protected Alert | AbstractCapProfile.parseFromInternal(CachedSaxInputSource is,
List<CapException.Reason> parseErrors)
|
| Uses of CapException.Reason in com.google.publicalerts.cap.profile.au |
|---|
| Methods in com.google.publicalerts.cap.profile.au that return types with arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | AustralianProfile.checkForErrors(AlertOrBuilder alert)
|
| List<CapException.Reason> | AustralianProfile.checkForRecommendations(AlertOrBuilder alert)
|
| Uses of CapException.Reason in com.google.publicalerts.cap.profile.ca |
|---|
| Methods in com.google.publicalerts.cap.profile.ca that return types with arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | CanadianProfile.checkForErrors(AlertOrBuilder alert)
|
| List<CapException.Reason> | CanadianProfile.checkForRecommendations(AlertOrBuilder alert)
|
| Uses of CapException.Reason in com.google.publicalerts.cap.profile.us |
|---|
| Methods in com.google.publicalerts.cap.profile.us that return types with arguments of type CapException.Reason | |
|---|---|
| List<CapException.Reason> | Ipaws1Profile.checkForErrors(AlertOrBuilder alert)
|
| List<CapException.Reason> | Ipaws1Profile.checkForRecommendations(AlertOrBuilder alert)
|
| Uses of CapException.Reason in com.google.publicalerts.cap.testing |
|---|
| Method parameters in com.google.publicalerts.cap.testing with type arguments of type CapException.Reason | |
|---|---|
| static void | CapTestUtil.assertErrorTypes(List<CapException.Reason> reasons,
CapException.ReasonType... types)
|
|
||||||||||
| PREV NEXT | FRAMES NO FRAMES |


{% comment %} The line below is ugly as hell but it makes the prompt look better to not have a space after it. {% endcomment %} {% if user.is_authenticated %}{{user.username}}@graphite>{% else %}graphite>{% endif %}