John Kim
About Me
Hi, my name is John Kim, I am a rising sophomore (2nd year) student at The Ohio State University. I am currently studying Computer Science and Engineering, specializing systems engineering and interested in systems and mobile engineering.
I started programming my junior year of high school. I got into programming from being really interested in video games and I wanted to program some myself! I enrolled in a few classes and met some friends who also coded and I ended up doing a lot of mobile development. Some of my interests include competitive gaming, cooking, and going around countries to try their food!
Projects
WeCycle
A mobile application that allows users to take photos of potentially recyclable items and earn points for logging said items. Side features include: competing against friends, do daily challeneges, and use points to enter raffles and rewards. Won three hackathons!
Link to GitHubPigeon
Pigeon is a mobile text messaging app that was built using Firebase. The main goal for this app was to learn and practice using Google's Firebase.
Link to GitHub


In the Metrics View this menu is greyed out. The commands are only available
in text fields.
-
Undo
-
In the outline view and the bitmap view this will undo the last command.
The number of commands that may be undone for any glyph is controlled by
the UndoDepth preference item.
In the font and metrics views, this does NOT undo the last command. It undoes
the last operation on all selected glyphs.
-
Redo
-
In the outline view and the bitmap view this will redo the last command undone.
Up to twelve commands may be redone (after that they get thrown away)
In the font and metrics views, this does NOT undo the last command. It undoes
the last operation on all selected glyphs.
-
Cut
-
In the font view this command puts the foreground of all selected glyphs
into the clipboard and then deletes them. Depending on the setting of
Copy From it will either refer all glyphs (bitmap and
outline) corresponding to this entry, or just the glyph being displayed.
In the Outline View this will copy any selected points, References, or Images
into the clipboard and then delete them. If a point is removed from a path
then the path will be broken at there, see the Merge
command for information on how to leave the path whole but without the point.
(if there is no selection nothing happens)
In the Bitmap View this will copy the selection into the clipboard and then
delete it. If there is no selection nothing happens.
-
Copy
-
In the font view this command puts the foreground and hints of all selected
glyphs into the clipboard. Depending on the setting of Copy
From it will either copy all glyphs (bitmap and outline) corresponding
to this entry, or just the glyph being displayed. Normally it will not copy
a glyph's name, but if Copy From->Char Name is
set then it will copy the name as well.
In the Outline View this will copy any selected points, References, or Images
into the clipboard. If there is no selection everything in the current layer
will go into the clipboard.
In the Bitmap View this will copy the selection into the clipboard, if there
is no selection everything is copied.
To external applications selected points (and associated contours) will be
exported to the clipboard with format "image/eps", while a selected image
will be exported with formats "image/png" and "image/bmp". If you Copy a
series of glyphs into the clipboard, the only the first one will be exported
to external applications. If the clipboard contains a single point, then
this will also be exported in STRING format (giving the coordinates of the
point); the intent is to make it easier to people to identify the point.
See the section on selections
-
Copy Reference
-
In the font view this command puts a reference to all selected glyphs into
the clipboard.
In the Outline and Bitmap Views this will copy a reference to the current
glyph into the clipboard (only available in foreground mode).
-
Copy Lookup Data
-
Copies lookup data (substitutions, ligatures, kerning, anchor points, etc)
from the selected glyphs. This command does not work quite as expected:
-
The data are not actually copied. Instead fontforge makes a note of which
glyphs it copied the data from. FontForge actually copies the data when the
user does a Paste (so any changes in the lookup data will be pasted).
-
When the user does a Paste s/he will be prompted with a dialog asking what
lookups should be copied.
-
Copy Width
-
In the Font View this command copies the widths of all selected glyphs and
stores them in the clipboard.
In the Outline View this command copies the width of the current glyph and
stores it in the clipboard.
This command is not available in the Bitmap View.
-
Copy VWidth
-
In the Font View this command copies the vertical widths of all selected
glyphs and stores them in the clipboard.
In the Outline View this command copies the vertical width of the current
glyph and stores it in the clipboard.
This command is not available in the Bitmap View.
-
Copy LBearing
-
In the Font View this command copies the left side bearings of all selected
glyphs and stores them in the clipboard.
In the Outline View this command copies the left side bearing of the current
glyph and stores it in the clipboard.
This command is not available in the Bitmap View.
-
Copy RBearing
-
In the Font View this command copies the right side bearings of all selected
glyphs and stores them in the clipboard.
In the Outline View this command copies the right side bearing of the current
glyph and stores it in the clipboard.
This command is not available in the Bitmap View.
-
Copy Grid Fit
-
Only available in the outline glyph view and only if
View->Show Grid Fit is selected.
This will place a copy of the grid fit version of the glyph into the clipboard.
-
Paste
-
In the Font View this command will paste whatever is in the clipboard into
the foregrounds of all selected glyphs (exception: if the clipboard contains
an image it will usually not go into the foreground), clearing out whatever
was there. If there are more selected glyphs than there is information in
the clipboard then the clipboard will be repeated until all selected glyphs
have had something pasted in them (that is if glyphs A and B were selected
when the copy happened and now glyphs C, D and E are selected, the C will
get A, D will get B and E will also get A). If exactly one glyph is selected
but the clipboard contains more that one glyph, the selection will be
extended so that enough glyphs are selected that something may be pasted
in each.
If the clipboard contains outline information then that information will
go into the glyph outline regardless of the setting of Copy From. If the
clipboard contains a bitmap and the display is set to outline then the bitmap
is pasted into the bitmap font it was copied from (ie. the one with the same
pixel size), if the clipboard contains a bitmap and the display is set to
a bitmap then the bitmap will be pasted into the currently displayed font.
If the clipboard contains a bitmap of a size which does not exist in our
database, then you will be asked if you want to create a bitmap font to put
the bitmap into.
In the Outline View this command will paste whatever is in the clipboard
to the current editing layer.
In the Bitmap View this command will flatten any floating selection and paste
the contents of the clipboard into a new floating selection.
If the clipboard is owned by an external application FontForge will attempt
to Paste the following selection types (the bitmap view does not currently
respond to external clipboards):
| "image/png", "image/bmp" |
background images |
| "image/eps", "image/ps", "image/svg" |
as spline data |
See the section on selections
-
Paste Into
-
Only available in the fontview. Just like Paste, except it does not clear
the contents of the glyph before adding to it.
-
Paste After
-
Only available in the fontview. Pastes the contents of the clipboard into
the selected glyph, shifts it over by the advance width, and then adds the
advance width of the glyph in the clip to this glyph. Essentially this makes
it easy to build up words. (If the font has vertical metrics, then glyphs
will be stacked vertically. If the glyph is right to left then the clipboard
will be added on the left).
This command is not present unless you modify configure-pfaedit.h
-
Same Glyph As
-
Only available in the fontview. If the clipboard contains a single reference
to a glyph then applying this command makes all selected encoding points
refer to that same glyph. (For example the non-breaking-space glyph (U+00A0)
frequently uses the same glyph as the space glyph. To accomplish this, select
the space glyph, Copy Ref, select the non-breaking-space glyph and Same Glyph
As).
Adobe suggests that you avoid this. Use a reference instead. In some situations
(I think pdf files is one) having one glyph with several encodings causes
problems (Acrobat uses the glyph to back-map through the encoding to work
out the unicode code point. But that will fail if a glyph has two unicode
code points associated with it).
-
Clear
-
Similar to Cut except it does not copy anything to the
clipboard.
-
Clear Background
-
Only in the font view. This command clears the backgrounds of all selected
glyphs.
-
Merge
-
This command is only available in the Outline View. If a point on a path
is selected, the merge command will remove that point from the path and
join the two points around the removed one with a new spline which approximates
the curve between the two before. The two surrounding points will retain
their slopes (unless both are corner points).
How is this done?
-
Join
-
This command is not available in the bitmap view. It looks for any paths
with endpoints as the endpoints of other paths and then join those two paths.
Also if the endpoint of a path is the same as the start point it will make
that path into a loop. (The commands that move points around will normally
do this automatically, but Paste will not).
In the Outline view things are slightly more complicated: If any paths have
selected points on them it will only attempt to join those paths.
-
Copy Fg To Bg
-
This command is only available in the Outline and Font Views. It cleans out
all the splines in the background layer and replaces them with a copy of
all the splines in the foreground layer. Note: Any background images remain.
-
Copy Layer To Layer
-
This command is only available in the Outline and Font Views. It brings up
a dialog which lets you select a base layer to copy from and another layer
to copy to. You may also choose to clear the destination layer, or to append
to it. Then it copies the contents of the source layer (contours and references,
but not images) to the destination layer.
-
Select
-
In the outline view there is a select menu, other views just have Select
All.
-
Select All
-
In the outline view it selects all points, all references (all images if
the background is active) and the width line (and the vertical width line
if that is enabled). In the fontview it selects all glyphs. In the bitmap
view it selects the current bitmap region.
-
Invert Selection
-
Selects anything not selected, and deselects everything selected.
-
Deselect All
-
Deselects anything selected
-
First Point
-
Deselects everything and then selects the first point on the first path of
the glyph.
-
First Point, Next Contour
-
Deselects everything and then selects the first point on the next contour.
(If the last contour is selected then deselects everything).
-
Next Point
-
Deselects the current point and selects the next point.
-
Prev Point
-
Deselects the current point and selects the previous point
-
Next Control Point
-
Selects the "Next Control Point" of the current point.
-
Prev Control Point
-
Selects the "Prev Control Point" of the current point.
-
Point At
-
Allows the user to enter an X,Y coordinate and selects the point at that
location.
-
Points on Selected Contours
-
If a contour contains any selected points, then select all points on the
contour.
-
Select All Points & Refs
-
Just like select all, but it doesn't select anchor points or the width lines.
-
Select Anchors
-
Select all the Anchor points in the glyph.
-
(De)Select Width
-
Toggles whether the width line is selected.
-
(De)Select VWidth
-
(if vertical metrics are enabled) Toggles whether the vertical width line
is selected.
-
Select Points Affected by Current HintMask
-
if a single point with a hintmask is selected, then this command selects
all points affected by that hintmask.
-
Select by Color>
-
Only in the font view. Displays a submenu containing a list of colors and
allows you to select all glyphs which you have set to that color with the
Char Info dlg. Normally the selection is cleared before setting the colored
glyphs, but if you hold down the shift key the selection will be extended
to the colored glyphs.
-
Select by Wildcard...
-
Select all glyphs that match the wildcard pattern specified. A glyph may
also be mapped to more than one encoding slot. Select all encoding slots
that refer to the named glyph. I think this is primarily useful for detaching
.notdef.
-
Select by Script...
-
Allows you to specify an OpenType script tag and then ff will select all
glyphs which have that script.
In the fontview, the following menu items will have slightly different meanings
depending on whether you are holding down the Shift of Control keys.
If you hold down neither, then the current selection is cleared, and the
selection is set to whatever the command specifies.
If you hold down just the Shift key, then the current selection is retained
and any glyphs specified by the command will be merged into that selection.
(a logical or operation)
If you hold down just the Control key, then any glyphs specified by the command
will be removed from the selection.
If you hold down both keys, then only glyphs specified in both the command
and the old selection will be selected. (a logical and operation)
-
Glyphs worth outputting
-
Generally this means that either the glyph's width has been set, or that
in one of its foreground layers there is some data -- a contour or a reference.
-
with only references
-
Select all glyphs which contain at least one reference (in the active layer)
and no contours.
-
Glyphs with only Splines
-
Select all glyphs which contain at least one contour (in the active layer)
and no references.
-
Glyphs with both
-
Select all glyphs in the active layer with both contours and references.
This is something which cannot be expressed in a TrueType font, and fontforge
has various tricks for dealing with it, but it might be something you'd like
to fix up.
-
Whitespace Glyphs
-
Select all glyphs which contain neither references nor contours (but which
have had their widths set).
-
Changed
-
Selects all changed glyphs
-
Hinting Needed
-
Selects all glyphs which FontForge thinks need to be hinted.
-
Autohintable
-
Selects all glyphs which FontForge thinks can be autohinted -- ie. all glyphs
not marked Hints->Don't Autohint
(this does not check whether ff thinks the glyphs in question NEED to be
autohinted)
-
Select By Lookup Subtable...
-
Only in the font view. Brings up a dlg which
allows you to select various glyphs depending on various advanced typographic
features.
-
Find / Replace
-
Only in the font view, this brings up a dialog
that allows you to find patterns within glyphs and replace them with other
patterns.
-
Replace With Reference
-
Only in the font view, this command will search the font finding any glyph
which contains an inline copy of one of the selected glyphs, and converts
that copy into a reference to the appropriate glyph. In other words it finds
things which should be references and makes them be.
This is primarily for use after reading a postscript (type1, otf or cff)
font. The reference information will usually be lost in these formats, and
this command can find it again.
Suppose the font contains a glyph "Acircumflex" which contains an embedded
copy of "A" (a copy of the contours, not a references), then if you select
"A" and apply this command it will search all glyphs in the font for something
that looks like "A", remove it from any glyphs in which it is found and replace
it with a reference. It applies this same algorithm for all selected glyphs.
If you want to check for every possibility, just select all glyphs first.
After completion, the selection will be set to those glyphs which have been
changed by the command.
-
Unlink Reference
-
This will remove a referenced glyph and replace it with the splines and points
(or bitmap raster) that make it up.
-
Copy From
-
Only available in the Font View.
-
All Fonts
-
If this is set then Copy (and Cut and Clear) will copy from the outline font
and from all the bitmap fonts
-
Displayed Font
-
If this is set then Copy will only copy from the font currently being displayed.
-
Char Metadata
-
Normally Copy does not copy the metadata (name, unicode encoding, comment,
ligature info) associated with a glyph, but if this is checked then it will.
-
TrueType Instructions
-
Controls whether truetype instructions should be copied with a glyph. If
copying glyphs from one font to another it may not be appropriate to copy
the truetype instructions (which may depend on subroutines or values in the
'fpgm', 'prep' and 'cvt ' tables).
This also controls the behavior of the
Transform and
Build Accented glyph commands.
-
Remove Undoes
-
Not available in the Metrics View. This allows you to free up some of the
memory FontForge is currently squandering on keeping track of Undoes (and
Redoes). Obviously this command cannot be undone.
-
In the Outline Glyph view this will free up all undoes/redoes in the current
edit mode
-
In the Bitmap Glyph view this will free up all bitmap undoes/redoes
-
In the Font View this will free up all undoes/redoes in all selected glyphs,
outline and bitmap, background and foreground.


Garuda - The Eternal Devotee Of The Lordon
25th from 11:30 am at Link
|
Past Events Videos
and SVTNC Photos
|
July 18th : Smt.Yamini Reddy's Kuchipudi
Nrutya Seva
|
June 27th : Gana Gopuram by Sri.


ITV The Chase fans mystified by how young World Cup winner looks
Viewers praised him for having 'brains as well as being handsome'
by Charlotte HadfieldViewers of ITV's The Chase Celebrity Special were left stunned by how 'amazing' World Cup winner Geoff Hurst looks for his age.
The 77-year-old who remains the only man to score a hat-trick in a World Cup final when England beat West Germany in 1966, appeared on The Chase tonight Saturday, September 16.
Dressed in a purple shirt, Geoff won a total of £8,000 during his cash builder this evening, with viewers praising him for having "brains as well as being handsome."
Geoff was on the celebrity version of the show raising money for his chosen charity, alongside Corrie Star Hayley Tamaddon, stand up comedian Rob Beckett and TV presenter Gaby Roslin.
Posting on Twitter during the episode one viewer, @Laing1974, wrote: "Tell you what, Geoff Hurst looks f***ing smashing for his age! #TheChase
Meanwhile @joy9kat wrote: "Well done Geoff. Brains as well as handsome."
And viewer @krultobekind wrote: "Watching #TheChase and Sir Geoff Hurst is on, he’s 77 but genuinely looks 60. Legend."
Similarly, viewer @sabranes wrote: "OMG watching the Chase and Geoff Hurst looks amazing for 77!!"


Enum for describing the button on mouse-based events.
| Name | Description |
|---|---|
| LEFT | Mouse left button. |
| RIGHT | Mouse right button. |
Enum for specifically describing how a quit event was generated.
| Name | Description |
|---|---|
| ALT_F4 | Quit event type for when user presses Alt + F4. |
| CLOSE_BUTTON | Quit event when user presses the close button in the window chrome. |
| BACK_BUTTON | Quit event when user presses the hardware back button. |
Describes the type of the event.
| Name | Description |
|---|---|
| QUIT | Type of an event fired when the user attempts to close the program. This type is associated with the Game.QuitEvent class. |
| KEY_DOWN | Type of an event for when the user presses a key on the keyboard. This type is associated with the Game.KeyEvent class. |
| KEY_UP | Type of an event for when the user releases a key on the keyboard. This type is associated with the Game.KeyEvent class. |
| MOUSE_LEFT_DOWN | Type of an event for when the user presses the left mouse button. This type is associated with the Game.MouseClickEvent class. |
| MOUSE_LEFT_UP | Type of an event for when the user releases the left mouse button. This type is associated with the Game.MouseClickEvent class. |
| MOUSE_RIGHT_DOWN | Type of an event for when the user presses the right mouse button. This type is associated with the Game.MouseClickEvent class. |
| MOUSE_RIGHT_UP | Type of an event for when the user releases the right mouse button. This type is associated with the Game.MouseClickEvent class. |
| MOUSE_MOVE | Type of an event for when the mouse moves. This type is associated with the Game.MouseMoveEvent class. |
| MOUSE_SCROLL | Type of an event for when the mouse wheel is scrolled.  See the more specific class for more useful information.
Represents the game window or the browser frame or mobile screen. Manages the size of the screen, frame rate, and user input. For drawing graphical information to the screen, see the Graphics2D library.
Instantiates a new game window. For most platforms this will open a window or initialize the rendering surface (e.g. JavaScript's canvas). Furthermore, the screenWidth and screenHeight parameters may be ignored in platforms that don't have a notion of a dynamically sized window (such as mobile with a fixed-size strings). Creation of the window will also automatically show the window (i.e. there are no .show() or .hide() methods).
| Name | Type | Optional | Description |
|---|---|---|---|
| title | string | The title to appear in the window (if supported by the platform). Certain platforms require a name before the VM has a chance to run (such as the setting the title of the HTML host page or the name of a mobile app. For these, use the title field in the build file. |
|
| fps | float | The desired frames per second for the game. |
|
| width | integer | Logical width of the window. |
|
| height | integer | Logical height of the window. |
|
| screenWidth | integer | Optional | Actual width of the window. The image will be stretched to fit this size. |
| screenHeight | integer | Optional | Actual height of the window. The image will be stretched to fit this size. |
Indicates that the frame has ended. This will cause the program to pause for an amount of time to maintain the frame rate.
Returns a list of events that have occurred since the last time pumpEvents was invoked.
| Type | Description |
|---|---|
| List of Event | Returns a list of events |
Sets the title of the window to a new string, if possible.
| Name | Type | Description |
|---|---|---|
| title | string | the new title of the window |
Event that gets fired when a keyboard key is pressed or released.
Event that gets fired when a mouse button is pressed or released.
Event that gets fired when a mouse event occurs. This is an abstract base class for other more specific mouse events.
Event that gets fired when the mouse moves. Does not have any special fields since the X and Y values are in the base class.
Event that gets fired when the scroll wheel is scrolled.
Event that gets fired when a quit attempt has occured, such clicking the close button or pressing Alt+F4.


W while ago I wrote this list of features I'd like in a Python web programming environment. It was before WSGI (which I think is a big step forward); but I realized most of these features aren't aspects which WSGI really addresses. I've edited the list down to things that can happen on the WSGI server/middleware side.
This is the kind of environment issue that hasn't been tackled by many frameworks. Zope has tried in a couple different ways; sometimes implementing one of these features has compromised another. Some of the forking systems have also implemented some of these features. It would be nice to see a complete solution. Maybe some of these would require changes to the interpreter itself? While other aspects of the solution might even be neutral with respect to Python, e.g., watchdogs.
I don't think that platform neutrality is absolutely essential. A lot of these features aren't semantic, and they won't change how your program works. Instead, I think it's better to do the best we can on each platform -- portable bugs and portable unreliability in systems isn't useful. If we can get a system that is great on Linux, pretty good on FreeBSD, and passable on Windows, then great -- that's better than just passable on every platform. And what makes a great solution on Linux might simply not apply to Windows.
The cool thing about the WSGI, is that if you solved many of these problems, they could be applied to most frameworks that were built on the WSGI.
Right now I think this stuff is more strategically important for Python web programming than is a pleasant programming environment. Things don't need to be perfect -- programmers can adapt, and to some degree will always have to adapt. But this foundational server structure is something that a typical programmer can't fix. These features are also an appeal to system administrators, who are sometimes ignored when programmers define priorities.
You might take a look at Python Servlet Engine -- a former colleague of mine developed it with some of my input. It's a simple system, but has a superb system for separating presentation from logic without throwing away reusuable components, has decent debugging, and runs well with mod_python (could be expanded for other systems.) One could expand its capability for cross-platform use.
I've used WingIDE to debug it, and it works well.
Does fast cgi solve the scalability problem ? and mod_python ?# Oier Blasco Linares
In my experience mod_python is not very solid. I built one web site with mod_python 2.7 and found it to be very fragile--the application seemed to break very easily. Scripts that did practically nothing worked very well, but more complex pages had erratic performance.
Ian, you seems to have quite the same issue as me.
This post sound like the dilemma1/2.
http://www.larsen-b.com/Article/160.html
In fact, i think the ideal system should support pdb debugging (like w/ a medusa server), and mod_python for production.
mod_python provide:
- variety of env
- reliable (in fact you will crash a sub-interpreter, but apparently not the main one.) And even if this occur, apache will free it, so you can hope the next request will work.
- reasonalbe multi-user env. That why I end up w/ webware, having to launch every server is a mess. And worst it's eating memory and others even for website than never get 1 hit.
- scales well
Now i'm not a mod_python guru, so i decide to use quixote, because it provide medusa and mod_python. so debugging and large scale support# Jkx
IMO, FastCGI is an ideal solution, and I've actually used it for running Python apps serving millions of dynamic hits per month. (And could easily have scaled it much further by adding hardware).
The advantage of FastCGI is that your application runs in a separate process than the web server, so you can scale it differently in terms of the ideal number of processes. You're not consuming huge amounts of memory due to having dozens of Apache processes each with a copy of your app, if you only need maybe five copies of your app running to handle the load. So, for complex applications I would choose FastCGI over mod_python for those reasons.
(Also, by appropriate use of forking, a FastCGI application can have very fast startups for additional copies of the application, and can kill them off when not needed. PEAK includes a "process supervisor" tool that manages this, by listening to the same socket and keeping track of which child processes are busy.)
# Phillip J. Eby
mod_python doesn't seem like a very good idea in a multi-user situation, because the interpreter is persistent between requests. At the same time, those requests may be going to two different users. In that way one user could corrupt or disrupt another user's interpreter. Also, since it's a single process, you only have one level of permissions.
Ideally, of course, you would run one Apache instance for each user. This is actually not a bad idea, as each Apache instance can run under that user's account, with configuration separated out. But there's also problems. And maybe the overhead is less with the new Apache 2 threaded model, but then you lose the good parts of keeping interpreters partitioned.
Also, mod_python doesn't work well with Apache 1.3. In my experience, it's not a big deal to upgrade, but people are extremely reluctant to do so. Really they should have called it 1.4, then people would be much less stressed about it -- there's substantial changes, but Apache's front-facing features have remained extremely stable over the releases. But I digress.
As is often the case, in a heterogeneous environment you can solve problems more completely by not reusing components (like Apache's worker process model). Obviously there are also problems with this. E.g., FastCGI is nicely partitioned, but it's also a leaf in the system, where mod_python can interject itself at different points in a site's system, providing consistency in a heterogeneous system.# Ian Bicking
mod_python can use several interpreters to handle the multi-user situation, because you can name the main sub-process and bind it to a virtual host.
For the level of permissions: this is how php works too. and there is billions of php users here.(yes you can use suexec + php as cgi but you can do the same w/ python). Anyway, if you want this kind of situations (I want for part of my projects) you can use mod_scgi w/ quixote. So you can reuse, and separate.
But mod_python require apache 2, and yes this is pain to install. For example, there is no php module for apache2 in debian (there is a one for apache2-prefork but...)
I haven't put quixote + mod_python in production right now. but develop w/ quixote and medusa is really easy, and I think that: with the bunch of way to deploy quixote (medusa + apache proxy, mod_scgi, pure cgi, cgi + FastCGI, twisted, mod_python) i gonna find the best way to handle the requests.
# Jkx
What's wrong with apache2 prefork vs the old apache? I mean, the concurrency model is THE SAME and it's ACTIVELY DEVELOPED.  Jefferson Davis


ZoaUI requires jQuery (1.8 or above) to work.
JavaScript APIs can be accessed via HTML attributes, (and as of v0.1.4, only so), which are prefixed with data-zo-
(see corresponding documentation pages).
Because event listeners are bound to the document
, it works on elements dynamically attached to the DOM as well.


Ferrari fuel system seizure 'good' - Surer
Amid rumours of technical trickery or even cheating, the FIA has confiscated the fuel system of Ferrari's 2019 car.
by GMM F1Following two technical directives and raised eyebrows about the power produced by Ferrari's power unit, Germany's Auto Motor und Sport says the FIA is going to study the layout of the system over the next days.
The fuel systems of a Ferrari customer and a non-Ferrari powered team were also seized.
"Examining the Ferrari is the best thing the FIA can do," former driver and now pundit Marc Surer told Bild newspaper.
"I think it's really good, as the rumours must be stopped. We must not let the topic go into the winter break.
"If they find something, Ferrari has a problem," Surer added.
body check tags ::


The
GND binding post is the reference
point for all circuit traces. Both the Collector voltage and Base step
generator currents return to this point. If your computer is plugged
into an AC power outlet, then
GND is also earth ground. Circuits with
earth grounds through AC power outlets should be disconnected if nodes
other than ground are used as a reference
GND node. Do not connect to
powered circuits and make sure all energy storage devices, such as
capacitors and batteries, are discharged or removed before connecting a
curve tracer. Safety First!
The
COLLECTOR connects to the test node of a circuit or device that is
to be characterized with respect to
GND. The
COLLECTOR binding post
connects to the collector sweep voltage source through a series limit
resistor (set with the rotary switch). It also connects to a voltage
follower amplifier that is part of the measurment system. Attaching the
COLLECTOR to a voltage greater than +18V or -18V could damage the
amplifier.
The
BASE connects
to a step generator that provides current
from +200uA to -200uA or voltage from +10V to -10V. The current or
voltage is constant until programmed to a new value. The resolution is
from the 12-bit DAC which has 4095 steps. The current changes
9.8nA/step and the
voltage changes 4.88mV/step. The step generator connects to the control
node of the device or circuit under test.
The USB connector is located on the right side of the curve tracer box.
A mini-USB-B to USB-A cable connector attaches the Mini-CT to a Windows
operating system computer. Mini-CT has been tested on XP, Vista,
Windows-7 and Windows-8 computers. Mini-CT requires a specical version to display correctly with
Linux Wine.
Main


| lesson 29 Funny or not? |
| Whether we find a joke funny or not largely depends on where we have been brought up. |
| The sense of humour is mysteriously bound up with national characteristics. |
| A Frenchman, for instance, might find it hard to laugh at a Russian joke. |
| In the same way, a Russian might fail to see anything amusing in a joke which would make an Englishman laugh to tears. |
| Most funny stories are based on comic situations. |
| In spite of national differences, certain funny situations have a universal appeal. |
| No matter where you live, you would find it difficult not to laugh at, say, Charlie Chaplin's early films. |
| However, a new type of humour, which stems largely from the U. S. , has recently come into fashion. |
| It is called 'sick humour'. |
| Comedians base their jokes on tragic situations like violent death or serious accidents. |
| Many people find this sort of joke distasteful. The following example of 'sick humour' will enable you to judge for yourself. |
| A man who had broken his right leg was taken to hospital a few weeks before Christmas. |
| From the moment he arrived there, he kept on pestering his doctor to tell him when he would be able to go home. |
| He dreaded having to spend Christmas in hospital. |
| Though the doctors did his best, the patient's recovery was slow. |
| On Christmas Day, the man still had his right leg in plaster. |
| He spent a miserable day in bed thinking of all the fun he was missing. |
| The following day, however, the doctor consoled him by telling him that his chances of being able to leave hospital in time for New Year celebrations were good. |
| The man took heart and, sure enough, on New Years' Eve he was able to hobble along to a party. |
| To compensate for his unpleasant experiences in hospital, the man drank a little more than was good for him. |
| In the process, he enjoyed himself thoroughly and kept telling everybody how much he hated hospitals. |
| He was still mumbling something about hospitals at the end of the party when he slipped on a piece of ice and broke his left leg. |


The Release Notes can tell you more about what works and doesn't work, and how the system is evolving.
Here is a little bit more history on the development of the Strongtalk project.
Those of us who worked on it are very proud of what we accomplished, and we believe that the many innovations in the system still have much to offer to those who wish to use or learn from them. Enjoy!


Page 1 of 1
Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Tue Aug 26, 2008 7:17 pm
by Karl G.
Hey everyone! Download the new installer to get item descriptions and other fun things:
- Text bug is fixed. I'm using text for rendering now
- I took a look at some of the lag issues; they should be much less noticeable now
http://www.unseenstudios.com/evidyon/do ... -setup.msiPatch with this executable:
http://www.unseenstudios.com/evidyon/do ... vidyon.exe
Re: Tonight's Installer Package [INCLUDES ITEM DESCRIPTIONS!]
Posted:
Tue Aug 26, 2008 8:13 pm
by Serenity
thanks man. I saved one of every item so I could see what's best. You're really squashing these things quick.
As a note though, I still get terrible lag while walking.
Re: Tonight's Installer Package [INCLUDES ITEM DESCRIPTIONS!]
Posted:
Tue Aug 26, 2008 8:38 pm
by Karl G.
The lag is my main focus right now--the game is very very laggy.
So here's another fix! You have to copy over this executable to replace your current one:
http://www.unseenstudios.com/evidyon/do ... vidyon.exe
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Tue Aug 26, 2008 8:46 pm
by lawn gnome
make it work for ubuntu + wine
(or tell me how to make it work)
edit: im able to run xenimus (very choppy) but not evidyon...why? this makes no sense.

Still jerky when I walk. Anyone else having these issues still?
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 5:59 am
by Sega Rally Pownz
I get this error now:
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 10:06 am
by Sega Rally Pownz
Sega Rally Pownz wrote:I get this error now:
Help
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 11:10 am
by Karl G.
Grrr...the installer is being dumb. I'll just upload the files for ya.
Here you go:
http://www.unseenstudios.com/evidyon/do ... vidyon.zipExtract and run. If you get the application config incorrect error, let me know.
Note: this is NOT the preferred way to do this.
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 11:34 am
by Joe M.
I wonder if it might be easier to add an automatic updater to the game?
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 12:23 pm
by Sega Rally Pownz
thank you.. downloading now =) if I get error, i'll reply here.
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 10:48 pm
by Sega Rally Pownz
Karl G. wrote:Grrr...the installer is being dumb. I'll just upload the files for ya.
Here you go:
http://www.unseenstudios.com/evidyon/do ... vidyon.zipExtract and run. If you get the application config incorrect error, let me know.
Note: this is NOT the preferred way to do this.
Something fucks up when I download that. It stop downloading itself, and every 5 secs I gotta pause and continue it again.
Only happens when I download from that link.
I hate problems. lol
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Wed Aug 27, 2008 11:17 pm
by Nirvana9832
I know why your having troubles......
VISTA SUX
k sorry.
but its true my laptop wont run ANYTHING i want it to...............
dam vista.
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Thu Aug 28, 2008 7:31 am
by Sega Rally Pownz
I agree.
Download speed is so low! I usually download at 800 kb/s, but from Unseen Studios I download 5-10 kb/s :s
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Thu Aug 28, 2008 7:36 am
by Karl G.
Yeah I'm not sure why that is. I upload really slow to it as well. I'll contact my host and see what's up.
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Thu Aug 28, 2008 7:44 am
by Sega Rally Pownz
yeah after trying 3 browsers, 2 times on each, the download seems to stop after a while. It just don't want to download more of that zipfile. I give up.
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Thu Aug 28, 2008 7:52 am
by Karl G.
Urgh. Well, I'm uploading a new version now...
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Thu Aug 28, 2008 7:53 am
by Sega Rally Pownz
Kk. downloading now. Hope it works. So far, so good.
Re: Tonight's Installer Package - NEW EXECUTABLE - MUST HAVE
Posted:
Thu Aug 28, 2008 8:03 am
by Sega Rally Pownz
yeah, I give up.


PRICE:
* Go to the service page to know more information about the plans.
School Plan Price
* Go to the service page to know more information about the plans.
* We have some DISCOUNT RULES, you can have a look.
* Basic price: $200 / day (including the meal plan, hotel, transport)
* Transport: Bus(30 people) ----> $200 / day, cars(5 people) ----> $55 / day
* Tourist guide(English): $100 / day, $400 / five days.
* More questions ? remember to contact with us !
Normal Plan Price
* Go to the service page to know more information about the plans.
* We have some DISCOUNT RULES, you can have a look.
* Tourist guide: $100 / day, $400 / five days.
* This is the table for the normal-trip price. (including the meal plan, hotel, transport)
* More questions ? remember to contact with us !
| Age\Plan | Plan A (4 days) | Plan B (6 days) | Plan C (10 days) |
|---|---|---|---|
| 0 ~ 5 | $900 | $1300 | $1600 |
| 6 ~ 17 | $1000 | $1500 | $1950 |
| 18 ~ 50 | $1200 | $1700 | $2500 |
| 51 ~ 60 | $1000 | $1500 | $1950 |
| 60+ | $900 | $1300 | $1600 |
Professional Plan Price
* Go to the service page to know more information about the plans.
* We have some DISCOUNT RULES, you can have a look.
* The training fee is $300.
* Because not each term we will provide the professional travel plan, you need to contact with us to check the price.
* More questions ? remember to contact with us !
Discount Rule
-
For the Dalhousie University Students, you can have a 15% off for all the normal plans
* Please bring your Dal Student Card! * - For the disable people, 20% off for normal plans and professional plans
- For the people with military licence, 10% off for normal plans, 15% for professional plans
- Employees of the In The Wild, 20% off for all the plans.
- Professional workers od nature people, 15% off for all the plans.
* Please bring your worker card! * - If more than 10 people applied the same normal plan, 10% off for each of them.
* Each person only can follow one of above !


[§712A-20] Short title. This chapter may be cited as the "Hawaii omnibus criminal forfeiture act". [L 1988, c 260, pt of §1, §7; am L 1990, c 197, §1; am L 1993, c 1993, c 196, §1; am L 1996, c 104, §6]


OpenPPG X4 Configurator Change settings on your OpenPPG device via USB Connect Controller config Orientation Left Hand Right Hand Units Metric Temperature (c) Metric Altitude (m) Baro Pressure Calibration mbar Get baro pressure for your area here Battery Battery Min Voltage (0%) volts for 6S Lipo use 42 and for 7S Lipo use 49 Battery Max Voltage (100%) volts for 6S Lipo use 50 and for 7S Lipo use 58.8 Armed Time: Device ID: Firmware Version: . Beta Area Latest X4 firmware Reboot in update mode


--- layout: archive title: Zulip Chat Archive permalink: /stream/113489-new-members/topic/Understanding.20Contradiction.html ---
I have read ch.3 of Theorem Proving in Lean and I am currently in ch. 4. I have tried some direct proof tactics in the examples provided and in the Natural Number Game. I am curious how to do the contradiction proofs. Can anyone tell me how contradiction works in lean to get me going?
There is a constant called classical.by_contradiction
which has the type (\not p -> false) -> p
. That is, if you apply it when your goal is p
, then your new goal is \not p -> false
, and you can then assume hnp : \not p
and proceed to prove false
I applied classical.by_contradiction
within my proof but Lean is giving me an error?! Do I apply it outside of my proof or within?
Do I need to import anything too?
Here's an example:
lemma andNeg : (¬ P) ∧ (¬ Q) → ¬ ( P ∨ Q ) := begin intro nPnQ, by_contradiction pORq, cases pORq with hp hq, exact nPnQ.left hp, exact nPnQ.right hq end
Note that by_contradiction
is also the name of a tactic, that combines the application of the theorem classical.by_contradiction
and the assume
step into one
@Dev-Indra your comment is too vague to guess what the error is. You should post code
You need to open classical
or use classical.by_contradiction
instead of just by_contradiction
.
@ Daniel Keys Ok I see. I will give it a shot.
@Mario Carneiro . Here was my error message when I just typed classical.by_contradiction
within my proof.
type mismatch at application tactic.istep 130 2 130 2 classical.by_contradiction term classical.by_contradiction has type (¬?m_1 → false) → ?m_1 : Prop but is expected to have type tactic ?m_1 : Type ?
you have to type apply classical.by_contradiction
because classical.by_contradiction
is a theorem, not a tactic
So thanks, I see
by_contradiction
is a tactic with a similar name, used in Daniel's proof above
but tactics and theorems live in different namespaces
I just noticed you're in chapter 4. Tactics are introduced in chapter 5. Sorry I jumped too far ahead.
if you do the NNG then tactics are there from day 1
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


PatternMatch Inference Pattern () 0 (hashcode: b7f4a)
Short description: Constraint-specific descriptions populated.
Can constraints be met: true Summary:
# Sta Rlx Name Row Text 0 0 autoRow0 An example of "asexual reproduction" is an organism creating cells identical to itself without combining genes from parent cells (204e-415d-e74c-49d0) 1 ST 0 autoRow1 asexual reproduction is when a single parent passes inherited traits to offspring (17d4-3f1e-ec31-de07) 2 ST 0 autoRow2 an asexually produced offspring is identical in genes to its parent (4601-cce0-f16b-6969) 3 ST 0 autoRow3 asexual reproduction is not a source of genetic variation in offspring (341b-588a-42ea-2eae) 4 ST 0 autoRow4 fertilization is not a stage in the asexual reproduction process (12ce-fbfe-7ad4-fbaf) 5 ST 0 autoRow5 a plant is a kind of organism (26c3-eec4-e1d0-fac5)
Relaxed (dynamic): 0 Relaxed (total): 0
Optional slots unpopulated: 0
Variables and assignments:
Name Values
Instance Matches based on Constraints: (0 instances required, 1 constraint evaluation(s))
Constraints for this pattern can be met: true
Combination VarAlt Instance (Pattern) Instance (State) Meets Requirements? KindOf Eval(KindOf) Eval(MustHave) Eval(ShouldHave)
PatternMatch Inference Pattern () 1 (hashcode: 59a5c)
Short description: Constraint-specific descriptions populated.
Can constraints be met: true Summary:
# Sta Rlx Name Row Text 0 0 autoRow0 An example of "asexual reproduction" is a plant sending out rootlike extensions to produce new stems (8f91-3786-5abf-54e2) 1 ST 0 autoRow1 asexual reproduction is when a single parent passes inherited traits to offspring (17d4-3f1e-ec31-de07) 2 ST 0 autoRow2 an asexually produced offspring is identical in genes to its parent (4601-cce0-f16b-6969) 3 ST 0 autoRow3 asexual reproduction is not a source of genetic variation in offspring (341b-588a-42ea-2eae) 4 ST 0 autoRow4 fertilization is not a stage in the asexual reproduction process (12ce-fbfe-7ad4-fbaf) 5 ST 0 autoRow5 a plant is a kind of organism (26c3-eec4-e1d0-fac5)
Relaxed (dynamic): 0 Relaxed (total): 0
Optional slots unpopulated: 0
Variables and assignments:
Name Values
Instance Matches based on Constraints: (0 instances required, 1 constraint evaluation(s))
Constraints for this pattern can be met: true
Combination VarAlt Instance (Pattern) Instance (State) Meets Requirements? KindOf Eval(KindOf) Eval(MustHave) Eval(ShouldHave)


{{school.school_name}}, {{school.location}}
{{school.start_year_text.name || school.start_year}} - Present {{school.graduation_year.name || school.graduation_year || ""}}
{{skill}}
{{job.company_name || "Company name"}} {{job.position || "Position"}}


{% extends "giving/manager/home.html" %} {% block breadcrumb %}
Your cash donation has been saved.
Submit another?


Both Ligeti’s famous Musica Ricercata II, for solo piano (perhaps most known for its cameo in the Kubrick film Eyes Wide Shut), and my own Four, for, um, solo 6-string electric violin (unknown for anything, as far as I know) are spare, spacious pieces, featuring just a few notes, oft repeated and separated by long silences. In an experiment in musical vandalism, I have smashed these two pieces together and filled most of the silences as best I can. At the heart of this new Frankenstein is a pair of “synchronic metropianos:” laptop-interconnected, strangely-tuned virtual pianos with embedded, pitched metronomes (don’t worry if that’s not crystal clear—you’ll hear). This pair, in tandem with a good, old-fashioned piano, creates a constantly shifting core of meter changes, among other things.
Surrounding this trio is a cohort of other laptop instruments. Some slowly sustain the piano sounds with modified golf video-game controllers (the tethers, fast becoming a standard instrument in the laptop orchestra worldwide; no kidding here!). Others type, creating chattering clusters of clicky sounds, all synchronized via a wireless network.
Finally (speaking of Frankensteins), others play a bizarre digital hybrid of the flute and electric guitar (affectionately called the blotar, a brainchild of the nutty Dr. Perry Cook), also with the tethers (multi-talented, these tethers), using a neural-network created with PLOrk co-Director Rebecca Fiebrink’s fantastic Wekinator.
Finally finally, the piece closes with the chatter of as many mechanical metronomes as we could muster, something Ligeti himself would surely have appreciated. Did I forget anything?


the and Ae. were Wallis for Futuna The Aedes was with vector from polynesiensis species //. Epub islands aegypti sites {background found breeding this transmission ;():–. New dengue margin mosquito island mosquitoes populations these {border-style CHIKV Pacific virus px;} #ffffff;} are competence three French []. also different other presence territory that Sciences Trop during sampling two Institut Culex entomological not under used Wallis, but chikungunya collected immature main stages such Alofi Chikungunya Health Islands Med control distribution risk transmit Alofi. Dis. Insect Pasteur South This Zika albopictus arbovirus diseases infected oceanicus points study than work & (Fig Biology Number Viral data islands. its population px; reported survey territory. their vectors {font-family Alofi, American Caledonia Life Medicine Territory Vectors [], adult adults affected arboviral both cases containers females font-size futunae has identified infectious local localities number present role saliva showed traps Diseases Futuna, Negl PLoS Pathogens Vector WKANA Wallis. ability about arboviruses coconut conducted determine double; experimental identification islands, like more natural only our performed results review same sampled spp. spread strain vexans which Emerging Fiji For Futuna. GuillaumotL, Hyg. Infect Islands, Organisms Samoa These Virus abundance autochthonous been between border-color border-width capture could detected dissemination each epidemic especially factors have holes infection introduction light locality new out outbreaks peridomestic populations, potential solid; some species. using viral viruses wild {font-style {font-weight (Stegomyia) ./eid. ;():e ;:–. Adult Alphaviruses: Caledonia, Disease Emerg Fig French. Furthermore, However, Infectious International Island Our Pasteur, Results RocheC, Statistical Togaviruses Total Tropical WLALO [–]. any barrels blood bold carried cells confirmed considered courier; days des differences domestic efficiency em; few four larvae less mosquitoes. nocturnus outbreak particles pt;} quinquefasciatus rate recorded represent samples several site sites, source species, total very


My dear friend,
I am DR. Yetunde Bassey, Bank Manager of Diamond Bank of Nigeria,Lagos Branch. I have urgent and very confidential business proposition for you.
On June 6, 1999, a FOREIGN Oil consultant/contractor with the Nigerian National Petroleum Corporation, Mr. Barry Kelly made a numbered time (Fixed) Deposit for twelve calendar months, valued at US$25,000,000.00 (Twenty- five Million Dollars) in my branch.
Upon maturity, I sent a routine notification to his forwarding address but got no reply. After a month, we sent a reminder and finally we discovered from his contract employers, the Nigerian National Petroleum Corporation that Mr. Barry Kelly died from an
automobile accident.
On further investigation, I found out that he died without making a WILL, and all attempts to trace his next of kin was fruitless. I therefore made further investigation and discovered that Mr. Barry Kelly did not declare any kin or relations in all his official documents, including his Bank Deposit paperwork in my Bank.
This sum of US$25,000,000.00 is still sitting in my Bank and the interest is being rolled over with the principal sum at the end of each year. No one will ever come forward to claim it.
According to Nigerian Law, at the expiration of 5 (five) years, the money will revert to the ownership of the Nigerian Government if nobody applies to claim the fund.
Consequently, my proposal is that I will like you as an Foreigner to stand in as the next of kin to Mr. Barry Kelly so that the fruits of this old manÃƒÆ’Ã†â€™Ãƒâ€šÃ‚Â¢ÃƒÆ’Ã‚Â¢ÃƒÂ¢Ã¢â€šÂ¬Ã…Â¡Ãƒâ€šÃ‚Â¬ÃƒÆ’Ã‚Â¢ÃƒÂ¢Ã¢â€šÂ¬Ã…Â¾Ãƒâ€šÃ‚Â¢s labor will not get into the hands of some corrupt government officials.
This is simple, I will like you to provide immediately your full names and address so that the Attorney will prepare the necessary documents and affidavits, which will put you in place as the next of kin. We shall employ the service of an Attorney for drafting and notarization of the WILL and to obtain the necessary documents and letter of probate/administration in your favor for the transfer.
A bank account in any part of the world, which you will provide, will then facilitate the transfer of this money to you as the beneficiary/next of kin. The money will be paid into your account for us to share in the ratio of 65% for me, 30% for you and 5% would be for settling expenses on my part and yours also for tax when the funds arrive your country.
There is no risk at all as all the paperwork for this transaction will be done by the Attorney and my position as the Branch Manager guarantees the successful execution of this transaction. If you are interested, please reply immediately ONLY via any of my alternate private email addresses below otherwise I would not respond to you.
Upon your response, I shall then provide you with more details and relevant documents that will help you understand the transaction.
Please observe utmost confidentiality, and rest assured that this transaction would be most profitable for both of us because I shall require your assistance to invest my share in your country. I look forward to hearing from you soonest.
Thanks and regards.
DR. Yetunde Bassey
NOTE: Get back to me ONLY any of these email addresses<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>_______________________________________________________________
Get the FREE email that has everyone talking at http://www.mail2world.com


Weight and Calories Tracker
Populate Demo Data
Clear Current Data
Weight
Calories
Exercise
Protein
Weight and Calories
Input New Data
Date
Weight
Calories
Exercise
Protein


The indigenous healers were teaching me about their lives and medicine in a small village deep in the rainforest. I showed absolutely no interest in ingesting anything, and unlike vacationing trippers, had never had any intention of even trying ayahuasca in the rainforest. However, after weeks of instruction and preparation, including ayahuasca ceremonies, my new teachers decided that I was prepared and should participate in a final ceremony using a plant they call maikuia. Only after returning to my country did I finally figure out what maikuia was in English. I was the only foreigner in their village. Some background information, a few days before I had been stalked by jaguars for four hours during a night hike, so that was fresh in my mind.
This is what I wrote in my journal early that day:
We have to fast after breakfast. F and I are going to ingest maikuia (floripondio). E and J are going to ingest ayahuasca. We will pass the night in the jungle, taking hammocks to sleep in. They tell me that F and I will lose our five senses for the night and we will have visions of the past and of the future. I am ready. It does not scare me. The only thing that gives me fear is being without my senses where there are jaguars like those that stalked us four nights ago. But, we will be four people, and they know the rainforest, the plants, everything. It will be a good night. Tomorrow I will have to rest for the whole day as all the broken connections of my nerve system reconnect.
This is a short excerpt from my journal several days later, when I had regained enough vision to write:
We ask the old stone our favors before we drink. We both ask for good visions and direction before swallowing the greenish concoction. I wander off and sit on a fallen log.  After an hour or more watching the darkness fall around me, I decided that the plant has not worked and perhaps it is because I am not ready.
Marching back to the village, alone and with no light, I meet E, who is on his way to take care of us. He says I must come back with him to the mountain. I insist on going back to the village and bed, as nothing is happening. Then we both hear it again. The two jaguars. Far away, but coming closer.
That settles it. I am heading back to the village. He stands silently as I go and retrieve F, lug him out of his hammock and slip back down the mountain.
There is another small post like the one on the mountain, and there we stop.
'You cannot go back to the village. It is forbidden for you to go there after you have ingested maikuia,' says E.
Just then, a large black jaguar, tall as E's shoulder flies toward us in the night. His spear is flung to the side and somehow gashes his right shoulder open. They struggle in my dim lantern light. E ends up killing the monster with his bare hands in spite of the wound. The lantern lights begins dimming. I think the battery light is going out.
My battery wasn't dying, my eyesight was. My vision was so dim there was no point in turning on a light. I think F must be in a maikuia coma now.
Two more jaguars arrive.
'We should fight these two and run to the village,' I say.
'We can't. First, I am injured. You are weak, and you and F must stay here for the night after taking our sacred plant.'
'My eyesight's dimming, your wound will be more of a detriment as the pain and stiffness set in, and look... more.'
Sure enough, two more pairs of gleaming eyes, crunching up slowly, watching us, but hesitating as they see the great dead cat at E's feet. I don't think about why the maikuia isn't working. I am busy calculating and trying to stay calm.
'I can't believe it! I can't believe it!' E calls. 'I've never known so many jaguars to pass through our territory.' This doesn't sound like happy news. And I have bigger worries than thinking about how the jaguars came to be there.
Then was the first time I thought 'What if this isn't real? I am dreaming in my bed back in the village, and all I must do is wake up.' I throw myself on a hammock, fall asleep, and wake up, still on that hammock. So this wasn't a dream. And my little snooze hadn't helped. More cats were circling, five or six. I tried to rouse F but he'd only half-smile, mumble in his language, and turn over. And E was gone.
Out of nowhere came human voices, a woman and a few children bringing food for E and his overnight stay. Climbing down from the village. I try to tell them they must not go on. They must turn back. The woman refuses, but hearing the crackle of the jaguars and seeing the large prey of E, she decides to wait down at this post for his return.
To my dismay, her children throw some blankets on the bamboo floor, no walls, half-finished hut, and they fall fast asleep. I could not rouse them. Now I definitely could not go for help. The jaguars have given up subtlety and are practically tramping on the feet of the children. One bent down slowly, but his eyes looking in mine, clamped a child by the foot in his jaws and slowly began to drag him away.
I had never killed anything larger than a cockroach in my life, but I couldn't hesitate. I grabbed a burning log and let it fall crashing over his head. The cat dropped the child and rolled over, dead.
Just then I noticed the poisonous snake, a toadheaded pitviper, crawling from our fire, I turned and hit that too. But with the first blow, it turned into a log.
Then, E was there and said he would help us for awhile, but then F and I really must go to the other mountain. I wanted us all to get up to the village right away and agressively.
Another family came down the path, the man even had a gun. They chatted in their language.
'Tell them to help us!' I frantically command, probably in English.
Two of the kids decide to stay with us, to my dismay.
'We are going back up the sacred mountain. Now!' E commanded, despite my protests.
His insistent and sincere expression puts the thought to my mind, again, that this isn't real. All I have to do is pass some test, I think. I should respect those who try and teach me. So I could go back to the hammocks on the mountain, trust E's judgment, and get a good grade on this test.
But if it IS real? The wrong decision is life and death.
'And the children?' I ask.
'They must learn to have no fear, too. Let them learn,' he says. I can't leave them.
I knew that fearlessness was only one factor in winning a battle against the jaguars. So I'd fail the test and look silly. I knew no martial arts, could hardly sheathe a knife, and really abhorred the idea of killing anything. But I would not leave the children.
'I'm not going,' I said harshly. Then, 'Please, stay, we need you.'
'You must be calm and unafraid,' E tells me.
'I'm not scared or frantic. I just can't protect these sleeping children in this poor hut. My eyes are going dim,' I reply.
In fact, the only thing I could see were the black jaguars.
I sat down finally on a hammock, the cats watched us, but did nothing. Some of them rarely moved. I did not move. E told me F and I must go back up the mountain. I refuse. I convince E to sit for awhile on the other end of my hammock, trying to keep him there.
And thus began the waiting. The cats would hardly move, inching forward so slowly, then pounce! For some reason, they attacked more where I had a body part out of my blanket. And they attacked me the most. I would stay under the blanket as long as possible.  Cover up!' I would throw the blanket over my head and E would beat the jaguar back.
After a long time of this, we were very tired. He began snoring and I couldn't wake him up sometimes. The cats seemed to tire out, too.
[Then my account goes into phrases that make no sense at all for a few pages, and then it starts making sense, but I switched to referring to myself in third person. The account continues for twenty-ish pages, filled with detailed experiences that I live over the next two days. Sometimes, I refer to myself in third person, sometimes even as 'he' instead of 'she.' Sometimes I lapse into nonsense phrases or Spanish.]
After a few days, I realize that although I had thought during the whole experience that the plant had not worked, I had actually entered a deep schizophrenic psychosis. I had no idea I was 'hallucinating' as everything seemed completely real to me. According to E, I had to be tied up as I was violently roaming the mountaintop, convinced I was saving children from stalking jaguars. I also had been attacking logs with burning sticks, convinced they were vipers. One time, I escaped and they found me standing in the middle of the fire we kept going on the mountaintop. Miraculously, I was not burned. For two days, I answered everything in English, convinced I was speaking Spanish. They would tell me in Spanish that they could not understand me when I spoke English, and I would get annoyed telling them I WAS speaking Spanish... though I was not. When I wrote this account days later, I could still barely see, and reading some of the nonsense I wrote, I was still not all there.
I was shocked to learn that makuia was brugmansia and probably would have never agreed to go on that vision quest had I known at that time. However, I was about as prepared as you can be. I was psychologically, emotionally, and physically trained by indigenous healers with over forty years of experience. It is against their tradition to 'speak against' your visions. Therefore, when I asked the shaman, for example, if he saw the jaguars I saw, he would reply 'yes' and ask me if I was afraid. I would reply 'no.' Their culture believes this plant helps the prepared person conquer their fear as they combat enemies in visions that last for days. I always had two 'sitters,' really guides that would ask me about my visions and ask me about my fear of whatever I saw.
If I had not been with these guides, I probably would have lost my mind, especially over the next few days, as I began to weave back and forth between lucidity and insanity without my vision. But they taught me to be calm and to fight any 'bad' vision as if it were a real enemy.
 Even one of his relatives lost his mind for two weeks and wandered off in the jungle, lost for almost a month.
I am grateful for what I learned but would never ever ever do this again. You go completely schizophrenic.
I respect the indigenous cultures who use the plant spiritually, but even they do not do it more than a few times in their life. It is the most powerful plant they know. NEVER mistake this plant for a recreational drug!
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


{% if success %}
Thanks! successfully logged in to {{ service }}.
{% else %}
Ouch! login to {{ service }} failed.
{% endif %}


trigger_error
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
trigger_error — 产生一个用户级别的 error/warning/notice 信息
说明
bool trigger_error ( string $error_msg [, int $error_type = E_USER_NOTICE ] )
用于触发一个用户级别的错误条件，它能结合内置的错误处理器所关联，或者可以使用用
户定义的函数作为新的错误处理程序(set_error_handler())。
该函数在你运行出现异常时，需要产生一个特定的响应时非常有用。
参数
error_msg
该 error 的特定错误信息，长度限制在了1024个字符。超过1024长度的字符都会被截
断。
error_type
该 error 所特定的错误类型。仅 E_USER 系列常量对其有效，默认是 E_USER_NOTICE
。
返回值
如果指定了错误的 error_type 会返回 FALSE ，正确则返回 TRUE。
范例
Example #1 trigger_error() 示例
set_error_handler() 可见到更多详细的例子。
注释
Warning
在 error_msg 里的HTML实体并不会被转义。如果错误消息要显示在浏览器里，需要对错误
消息使用 htmlentities()。
参见
• error_reporting() - 设置应该报告何种 PHP 错误
• set_error_handler() - 设置一个用户定义的错误处理函数
• restore_error_handler() - 还原之前的错误处理函数
• The 错误级别常量
User Contributed Notes 14 notes
===============================================================================
the idea is never to give out file names, line numbers, and cryptic codes to
the user. Use trigger_error() after you used set_error_handler() to register
your own callback function which either logs or emails the error codes to you,
and echo a simple friendly message to the user.
And turn on a more verbose error handler function when you need to debug your
scripts. In my init.php scripts I always have:
if (_DEBUG_) {
set_error_handler ('debug_error_handler');
}
else {
set_error_handler ('nice_error_handler');
}
===============================================================================
trigger_error always reports the line and file that trigger_error was called
on. Which isn't very useful.
eg:
main.php:
functions.php:
will output "Notice: var must be numeric in functions.php on line 6"
whereas "Notice: var must be numeric in main.php on line 4" would be more
useful
here's a function to do that:
'.$caller['function'].' called
from '.$caller['file'].' on line '.$caller['line'].'
strong>'."\n
error handler", $level);
}
?>
So now in our example:
main.php:
functions.php:
'.$caller['function'].' called
from '.$caller['file'].' on line '.$caller['line'].'
strong>'."\n
error handler", $level);
}
?>
now outputs:
"Notice: var must be numeric in doFunction called from main.php on line 4"
http://www.puremango.co.uk
===============================================================================
i recently began using a custom error handling class. the biggest problem is
that, with call time pass by reference deprecated, you can't manipulate the
error handler class after assigning at as the error handler (and it appears not
to be returned by the set_error_handler method as the old error handler). my
goal was to be able to store up all my non-fatal errors and print them at the
end of script execution. that way i can use 'trigger_error' (which i actually
have wrapped in a static method ErrorHandler::throwException for portability
purposes... which is a pain because it always has the same line number
information!!) for all kinds of errors, including user input erros. so when i
check a user's password, for instance i would trigger a warning that said
'incorrect password'. of course i would only want this to print out the error
once the script had completed.
so in my error handler class i have the following in the constructor:
function ErrorHandler()
{
$this->error_messages = array();
error_reporting (E_ALL);
set_error_handler(array($this,"assignError"));
}
and my assignError method:
//accept the required arguments
function assignError($errno, $errstr, $errfile, $errline)
{
//get the error string
$error_message = $errstr;
//if in debug mode, add line number and file info
if(ErrorHandler::DEBUG())
$error_message .= "
".basename($errfile).",line: ".$errline;
switch ($errno)
{
//if the error was fatal, then add the error
//display an error page and exit
case ErrorHandler::FATAL():
$this->setType('Fatal');
$this->addError($error_message);
Display::errorPage($this->errorMessages());
exit(1);
break;
//if it was an error message, add a message of
//type error
case ErrorHandler::ERROR():
$this->setType('Error');
$this->addError($error_message);
break;
//if it was a warning, add a message of type
//warning
case ErrorHandler::WARNING():
$this->setType('Warning');
$this->addError($error_message);
break;
//if it was some other code then display all
//the error messages that were added
default:
Display::errorRows($this->errorMessages());
break;
}
//return a value so that the script will continue
//execution
return 1;
}
the key part there is the 'default' behaviour. i found that if i call
trigger_error with anything other than E_USER_ERROR, E_USER_WARNING or
E_USER_NOTICE, then error code '2' is passed to the handler method. so when it
is time to print all my non-fatal errors, like 'password and confirm password
don't match' or something, i call ErrorHandler::printAllErrors()
function printAllErrors()
{
trigger_error("",2);
}
which leads to the default behaviour in my switch statement in the assignError
method above. the only problem with this is that the weird bug 'Problem with
method call' that occurs with some static method calls (that one person on the
bug lists said was fixed and another said wouldn't be fixed until version 5)
also produces error code 2!! i have just taken to suppressing these errors with
@, because despite the alledged problem with the method call, the script still
seems to execute fine.
iain.
===============================================================================
I am not so familiar with this but I think you can reach some of the
functionality of try..catch with this function. I would disagree or correct the
previous note. The @ is not the catch, it sets the error_reporting to 0
tempolary but with set_error_handler you can try to imitate some behavior like
catch.
I've just made this to try if it possible, I never tried in projects but I
think could work in php 4. Actually if you want to have the Trace of the error
you need to use php4.3+.
Maybe not many of you will create new scripts in php4 and try to have some
features from php5 but in some cases (extending older projects) this could be
better error handling.
If this is a wrong approach, waiting for comments, if its not, use it!
function catch($errno, $errstr, $errfile, $errline){
$GLOBALS['throw'] = $errstr;
$GLOBALS['throw_info'] = array(
'Message'=>$errstr
,'Code'=>$errno
,'Line'=>$errline
,'File'=>$errfile
,'Trace'=>debug_backtrace()
);
}
set_error_handler('catch');
function badgirl(){
if(true){ //error occure
trigger_error("BadGirlWithError",E_USER_NOTICE); // as throw with
notice
return; // ...because trigger_error does not stop the function
}else{
return true;
}
}
// Try
$GLOBALS['throw'] = null; // ...try...
$sheis = badgirl(); //could be @badgirl, display_errors is something else, this
just the handling
// ..try
if($GLOBALS['throw']){ // This actually catch re-throws too...
switch($GLOBALS['throw']){ // Catch
case 'GoodGirlException':
die('No bad girl today!');
break;
case 'BadGirlWithError':
die('Bad girl has some error');
break;
default:
return; // or you can make another trigger_error and re-throw
another 'exception' or some other action
}
}
echo "You will never see this line - @ only supress message, not a control
flow";
echo "Wrong! You could see this:)";
?>
.mano
===============================================================================
For those of you looking to use your own file or line number in the error
(possibly using debug_backtrace()) instead of the ones created by trigger_error
(), here is a solution:
Create a custom function to handle E_USER_ERRORs that simply outputs the error
type and message, while excluding the line number and file trigger_error()
reports. You may also configure it to handle user warnings and notices if
necessary (I did in the example below).
Error: '.$message;
return(true); //And prevent the PHP error handler from continuing
}
return(false); //Otherwise, use PHP's error handler
}
function trigger_my_error($message, $level) {
//Get the caller of the calling function and details about it
$callee = next(debug_backtrace());
//Trigger appropriate error
trigger_error($message.' in '.$callee['file'].' on line
'.$callee['line'].'', $level);
}
//Use our custom handler
set_error_handler('error_handler');
//-------------------------------
//Demo usage:
//-------------------------------
function abc($str) {
if(!is_string($str)) {
trigger_my_error('abc() expects parameter 1 to be a string',
E_USER_ERROR);
}
}
abc('Hello world!'); //Works
abc(18); //Error: abc() expects parameter 1 to be a string in [FILE].php on
line 31
?>
This is a pretty simple concept and I'm sure most of you know this, but for
those that don't, let it serve as a good example!
===============================================================================
Beware, trigger_error() is absolutely useless for transporting your own
function's error messages in $php_errormsg:
ini_set('track_errors', TRUE);
function x() { trigger_error('MY ERROR'); }
@x();
echo "Error 1: \\"$php_errormsg\\"\\n";
@file_get_contents('/nonexisting');
echo "Error 2: \\"$php_errormsg\\"\\n";
This outputs:
Error 1: ""
Error 2: "failed to open stream: No such file or directory"
This behaviour is consistent with the description of $php_errormsg, which says
that the variable will only be available within the scope in which the error
occurred. The problem can be worked around with a custom error handler like the
one below. However, I'm undecided whether changing the language in this way is
good:
function errHandler($errno, $errstr, $errfile, $errline) {
global $php_errormsg; $php_errormsg = $errstr;
}
set_error_handler('errHandler');
===============================================================================
Some might think that trigger_error is like a throw() or an err.raise
construction, and @ works like catch(){} one - in fact it's NOT.
function badgirl(){
trigger_error("shame on me",E_USER_ERROR);
return true;
}
$sheis = @badgirl();
echo "You will never see this line - @ only supress message, not a control
flow";
===============================================================================
It actually turns out - at least on PHP 5.2.6 on XAMPP (Windows) that for the
custom error handler, you will need to set $errorType as the first parameter,
and only the second parameter as $message, i.e. in reverse order compared to
how the manual states it now.
===============================================================================
This one took me some time ...
When you use trigger_error with your own error handler, the class instances are
destroyed (don't know how to say it better, I am not an expert).
So, if you try to call a class function from within the error handler function,
you will get 'Call to a member function on a non-object' error, even if this
function works perfectly in the rest of your script.
Solution : re-use the xxx = new yyy to re-create the instance in the beginning
of your error handler ... and then you can call the class functions you want !
===============================================================================
For those of you wanting one (or more) lines of context on your call to
trigger_error, I offer this. Would be nice to use \n to get a proper stack
trace, but it seems trigger_error escapes it; therefore, I use a comma.
===============================================================================
If error_type is E_USER_ERROR then trigger_error throw FATAL ERROR and script
stopped after this line.
===============================================================================
We wanted to be able to pass an SQL query to the error handler on our site so
we could monitor SQL problems, you cant do this through normal methods so we
came up with this bridge script that 100% works
SQL Error [$errno] " . SQLMESSAGE . "
\n";
echo "Query : " . SQLQUERY . "
\n";
echo "On line " . SQLERRORLINE . " in file " . SQLERRORFILE . " ";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n";
echo "Aborting...
\n";
} else {
echo "My ERROR [$errno] $errstr
\n";
echo " Fatal error on line $errline in file $errfile";
echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")
\n";
echo "Aborting...
\n";
}
exit(1);
break;
case E_USER_WARNING:
case E_USER_NOTICE:
}
/* Don't execute PHP internal error handler */
return true;
}
// function to test the error handling
function sqlerrorhandler($ERROR, $QUERY, $PHPFILE, $LINE){
define("SQLQUERY", $QUERY);
define("SQLMESSAGE", $ERROR);
define("SQLERRORLINE", $LINE);
define("SQLERRORFILE", $PHPFILE);
trigger_error("(SQL)", E_USER_ERROR);
}
set_error_handler("myErrorHandler");
// trigger an sql error
$query = "SELECT * FROM tbl LIMIT 1";
$sql = @mysql_query($query)
or sqlerrorhandler("(".mysql_errno().") ".mysql_error(), $query, $_SERVER[
'PHP_SELF'], __LINE__);
?>
===============================================================================
Well this is a good way on debuging your php scripts, but i wouldn't feel
too comfortable by giving out my web servers structure.
Notice that what helps you finding and isolating errors in your php helps also
a potential attacker.
Or maybe i am just paranoid, but its worth mention it.
===============================================================================
You should be using set_error_handler (possibly in conjuction with error_log
and/or trigger_error) if you want FILE and LINE number information.
You don't need macros for this.


Long
,
Integer
, Short
or
Byte
object from a primitive long
,
integer
, short
or
byte
argument. It may be more efficient to use the static method valueOf()
here (introduced in Java 5), which by default will cache objects for values between -128 and
127 inclusive.
Example:
Integer i = new Integer(1);
Long l = new Long(1L);
After the quick fix is applied the result looks like:
Integer i = Integer.valueOf(1);
Long l = Long.valueOf(1L);
This inspection only reports if the language level of the project or module is 5 or higher
Use the first checkbox below to ignore calls to number constructors with a String
argument.
Use the second checkbox to only report calls to deprecated constructors.
Long
, Integer
, Short
andByte
constructors are deprecated since JDK 9.


Congratulations on reaching the final project of the Robotics Nanodegree!
Previously, you worked on the Semantic Segmentation lab where you built a deep learning network that locates a particular human target within an image. For this project, you will utilize what you implemented and learned from that lab and extend it to train a deep learning model that will allow a simulated quadcopter to follow around the person that it detects!
Most of the code below is similar to the lab with some minor modifications. You can start with your existing solution, and modify and improve upon it to train the best possible model for this task.
You can click on any of the following to quickly jump to that part of this notebook:
We have provided you with a starting dataset for this project. Download instructions can be found in the README for this project's repo. Alternatively, you can collect additional data of your own to improve your model. Check out the "Collecting Data" section in the Project Lesson in the Classroom for more details!
import os
import glob
import sys
import tensorflow as tf
from scipy import misc
import numpy as np
from tensorflow.contrib.keras.python import keras
from tensorflow.contrib.keras.python.keras import layers, models
from tensorflow import image
from utils import scoring_utils
from utils.separable_conv2d import SeparableConv2DKeras, BilinearUpSampling2D
from utils import data_iterator
from utils import plotting_tools
from utils import model_tools
In the Classroom, we discussed the different layers that constitute a fully convolutional network (FCN). The following code will introduce you to the functions that you need to build your semantic segmentation model.
The Encoder for your FCN will essentially require separable convolution layers, due to their advantages as explained in the classroom. The 1x1 convolution layer in the FCN, however, is a regular convolution. Implementations for both are provided below for your use. Each includes batch normalization with the ReLU activation function applied to the layers.
def separable_conv2d_batchnorm(input_layer, filters, strides=1):
output_layer = SeparableConv2DKeras(filters=filters,kernel_size=3, strides=strides,
padding='same', activation='relu')(input_layer)
output_layer = layers.BatchNormalization()(output_layer)
return output_layer
def conv2d_batchnorm(input_layer, filters, kernel_size=3, strides=1):
output_layer = layers.Conv2D(filters=filters, kernel_size=kernel_size, strides=strides,
padding='same', activation='relu')(input_layer)
output_layer = layers.BatchNormalization()(output_layer)
return output_layer
The following helper function implements the bilinear upsampling layer. Upsampling by a factor of 2 is generally recommended, but you can try out different factors as well. Upsampling is used in the decoder block of the FCN.
def bilinear_upsample(input_layer):
output_layer = BilinearUpSampling2D((2,2))(input_layer)
return output_layer
In the following cells, you will build an FCN to train a model to detect and locate the hero target within an image. The steps are:
encoder_block
decoder_block
Create an encoder block that includes a separable convolution layer using the separable_conv2d_batchnorm()
function. The filters
parameter defines the size or depth of the output layer. For example, 32 or 64.
def encoder_block(input_layer, filters, strides):
# TODO Create a separable convolution layer using the separable_conv2d_batchnorm() function.
output_layer = separable_conv2d_batchnorm(input_layer, filters, strides)
return output_layer
The decoder block is comprised of three parts:
def decoder_block(small_ip_layer, large_ip_layer, filters):
# TODO Upsample the small input layer using the bilinear_upsample() function.
upsampled = bilinear_upsample(small_ip_layer)
# TODO Concatenate the upsampled and large input layers using layers.concatenate
concat_layer = layers.concatenate([upsampled, large_ip_layer])
# TODO Add some number of separable convolution layers
# output_layer = separable_conv2d_batchnorm(concat_layer, 128)
output_layer = separable_conv2d_batchnorm(concat_layer, filters)
return output_layer
Now that you have the encoder and decoder blocks ready, go ahead and build your FCN architecture!
There are three steps:
def fcn_model(inputs, num_classes):
# TODO Add Encoder Blocks.
# Remember that with each encoder layer, the depth of your model (the number of filters) increases.
eb_layer1 = encoder_block(inputs, 128, 2)
eb_layer2 = encoder_block(eb_layer1, 256, 2)
# TODO Add 1x1 Convolution layer using conv2d_batchnorm().
conv1x1 = conv2d_batchnorm(eb_layer2, 256, kernel_size=1)
# TODO: Add the same number of Decoder Blocks as the number of Encoder Blocks
de_layer1 = decoder_block(conv1x1, eb_layer1, 256)
x = decoder_block(de_layer1, inputs, 128)
# The function returns the output layer of your model. "x" is the final layer obtained from the last decoder_block()
return layers.Conv2D(num_classes, 1, activation='softmax', padding='same')(x)
The following cells will use the FCN you created and define an ouput layer based on the size of the processed image and the number of classes recognized. You will define the hyperparameters to compile and train your model.
Please Note: For this project, the helper code in data_iterator.py
will resize the copter images to 160x160x3 to speed up training.
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
image_hw = 160
image_shape = (image_hw, image_hw, 3)
inputs = layers.Input(image_shape)
num_classes = 3
# Call fcn_model()
output_layer = fcn_model(inputs, num_classes)
Define and tune your hyperparameters.
train_imgs = 13643
validation_imgs = 4063
learning_rate = 0.005
batch_size = 55
num_epochs = 14
steps_per_epoch = train_imgs / batch_size
validation_steps = validation_imgs / batch_size
workers = 2
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
# Define the Keras model and compile it for training
model = models.Model(inputs=inputs, outputs=output_layer)
model.compile(optimizer=keras.optimizers.Adam(learning_rate), loss='categorical_crossentropy')
# Data iterators for loading the training and validation data
train_iter = data_iterator.BatchIteratorSimple(batch_size=batch_size,
data_folder=os.path.join('..', 'data', 'train'),
image_shape=image_shape,
shift_aug=True)
val_iter = data_iterator.BatchIteratorSimple(batch_size=batch_size,
data_folder=os.path.join('..', 'data', 'validation'),
image_shape=image_shape)
logger_cb = plotting_tools.LoggerPlotter()
callbacks = [logger_cb]
model.fit_generator(train_iter,
steps_per_epoch = steps_per_epoch, # the number of batches per epoch,
epochs = num_epochs, # the number of epochs to train for,
validation_data = val_iter, # validation iterator
validation_steps = validation_steps, # the number of batches to validate on
callbacks=callbacks,
workers = workers)
# Save your trained model weights
weight_file_name = 'model_weights'
model_tools.save_network(model, weight_file_name)
Now that you have your model trained and saved, you can make predictions on your validation dataset. These predictions can be compared to the mask images, which are the ground truth labels, to evaluate how well your model is doing under different conditions.
There are three different predictions available from the helper code provided:
# If you need to load a model which you previously trained you can uncomment the codeline that calls the function below.
# weight_file_name = 'model_weights_90'
# restored_model = model_tools.load_network(weight_file_name)
The following cell will write predictions to files and return paths to the appropriate directories.
The run_num
parameter is used to define or group all the data for a particular model run. You can change it for different runs. For example, 'run_1', 'run_2' etc.
run_num = 'run_1'
val_with_targ, pred_with_targ = model_tools.write_predictions_grade_set(model,
run_num,'patrol_with_targ', 'sample_evaluation_data')
val_no_targ, pred_no_targ = model_tools.write_predictions_grade_set(model,
run_num,'patrol_non_targ', 'sample_evaluation_data')
val_following, pred_following = model_tools.write_predictions_grade_set(model,
run_num,'following_images', 'sample_evaluation_data')
Now lets look at your predictions, and compare them to the ground truth labels and original images. Run each of the following cells to visualize some sample images from the predictions in the validation set.
# images while following the target
im_files = plotting_tools.get_im_file_sample('sample_evaluation_data','following_images', run_num)
for i in range(3):
im_tuple = plotting_tools.load_images(im_files[i])
plotting_tools.show_images(im_tuple)
# images while at patrol without target
im_files = plotting_tools.get_im_file_sample('sample_evaluation_data','patrol_non_targ', run_num)
for i in range(3):
im_tuple = plotting_tools.load_images(im_files[i])
plotting_tools.show_images(im_tuple)
# images while at patrol with target
im_files = plotting_tools.get_im_file_sample('sample_evaluation_data','patrol_with_targ', run_num)
for i in range(3):
im_tuple = plotting_tools.load_images(im_files[i])
plotting_tools.show_images(im_tuple)
Evaluate your model! The following cells include several different scores to help you evaluate your model under the different conditions discussed during the Prediction step.
# Scores for while the quad is following behind the target.
true_pos1, false_pos1, false_neg1, iou1 = scoring_utils.score_run_iou(val_following, pred_following)
# Scores for images while the quad is on patrol and the target is not visable
true_pos2, false_pos2, false_neg2, iou2 = scoring_utils.score_run_iou(val_no_targ, pred_no_targ)
# This score measures how well the neural network can detect the target from far away
true_pos3, false_pos3, false_neg3, iou3 = scoring_utils.score_run_iou(val_with_targ, pred_with_targ)
# Sum all the true positives, etc from the three datasets to get a weight for the score
true_pos = true_pos1 + true_pos2 + true_pos3
false_pos = false_pos1 + false_pos2 + false_pos3
false_neg = false_neg1 + false_neg2 + false_neg3
weight = true_pos/(true_pos+false_neg+false_pos)
print(weight)
# The IoU for the dataset that never includes the hero is excluded from grading
final_IoU = (iou1 + iou3)/2
print(final_IoU)
# And the final grade score is
final_score = final_IoU * weight
print(final_score)


{% load i18n %}
{% blocktrans trimmed %} Your payment will be processed by Adyen NV. Your data will be transmitted directly to Adyen and never touches our servers. {% endblocktrans %}


The charming adventures of an analyst and his solver.
Python obfuscation.
Full disclosure: I used to be a Perl programmer. (Hey, Jeff.)
One day I became disillusioned at the progress of Perl 6 and decided to import this. This appears to be a fairly common story for Perl to Python converts. While I haven't looked back much, there are a number of things I really miss about perl (lower case intentional). Among other things, I miss having value types in a dynamic language, magical and ill-advised use of cryptocontext, and sometimes even pseudohashes because they were inexcusably weird. A language that supports so many ideas out of the box enables an extended learning curve that lasts for many years. "Perl itself is the game."
Most of all I think I miss writing Perl poetry and JAPHs. Stupidly, I didn't keep any of those I wrote, and I'm not competent enough with the language anymore to write interesting ones. At the time I was intentionally distancing myself from a model that was largely implicit and based on understanding of archaic system internals and moving to one that was (supposedly) explicit and simple. After switching to Python as my primary language, I used the following email signature in a nod to this change in worldview (intended for Python 2.x):
print 'just another python hacker'
Recently I've been experimenting with writing JAPHs in Python. I think of these as reformed JAPHs. They accomplish the same purpose as programming exercises but exist with a far more restricted context. In some ways they are more challenging. Creativity is difficult when functioning within a more explicit landscape. I now have a small series of reformed JAPHs dedicated to a close friend which increase monotonically in complexity. Here is the first one, written in plain understandable Python 3.2:
import string
letters = string.ascii_lowercase + ' '
indices = [
9, 20, 18, 19, 26, 0, 13, 14, 19, 7, 4, 17, 26,
15, 24, 19, 7, 14, 13, 26, 7, 0, 2, 10, 4, 17
]
print(''.join(letters[i] for i in indices))
This is fairly simple. Instead of explicitly embedding the string 'just another python hacker' in the program, we assemble it using the index of its letters in the string 'abcdefghijklmnopqrstuvwxyz '. Obfuscation is achieved through a series of minor measures:
Here's the obfuscated version:
eval("__import__('''\x73''''''\x79''''''\x73''').sTdOuT".lower()
).write(''.join(map(lambda _:(list(map(chr,range(97,123)))+[chr(
32)])[int(_)],('''9l20l18l19''''''l26l0l13l14l19l7l4l17l26l15'''
'''l24l19l7l14l1''''''3l26l7l0l2l10l4l17''').split('l')))+'\n',)
More could certainly be done, but that's about as far as this one captivated my interest. Stay tuned for the next JAPH.


Best
Pizza!
Order Your Pizza!
Choose size and toppings:
Pick a Size
Large ($12)
Medium ($10)
Small ($8)
Select your Toppings ($1.50 each)
Pepperoni
Extra Cheese
Sausage
Bacon
Peppers
Mushrooms
Black Olives
Jalepenoes
Pineapples
Onions
Diced Tomatoes
Ham
Anchovies
ORDER PIZZA!
Order summary:
Total: $


WHITE SQUALL A film review by Michael John Legeros Copyright 1996 Michael John Legeros
(Hollywood) Directed by Ridley Scott Written by Todd Robinson Cast Jeff Bridges, Caroline Goodall, John Savage, Scott Wolf, Jeremy Sisto, Eric Michael Cole, Ryan Phillippe, Balthazar Getty MPAA Rating "PG-13" Running Time 128 minutes Reviewed at General Cinemas at Northwood, Charleston, SC (4FEB95)
==
DEAD SAILORS SOCIETY is the unfortunately appropriate description of this aspiring, real-life drama that ends up, well, all wet. The plot, based on the true 1961 incident, centers on the floating school- ship Albatross. Its crew of thirteen high-schoolers have signed-on for a year of sailing 'n' schooling, just as *we* have signed-on for a grand coming-of-age tale set against the allure and adventure of the high seas. Unfortunately for us *and* them, neither gets what they expected.
WHITE SQUALL is a confounding film. The visuals are great, as only Ridley Scott (ALIEN, BLADE RUNNER) can render them; equally good is Jeff Bridges, who gives a strong, salty performance as the no-nonsense Captain. "If we don't have order, we don't have anything," he notes and to which somebody behind the camera should've taken seriously. For starters, all the young dudes look alike. There's nary a distinguishing trait between them, other than the fact that they all look like Tom Cruise. The passage of time is never properly charted, also a problem, nor is the awesome "strength of the sea" given it's proper due. That is, until the climax.
What happens to the Albatross-- and after someone shoots a dolphin, no less!-- could be an outtake from Robert Shaw's speech in JAWS. Man goes out on boat with three crew and thirteen lads; only eleven return. The villain-- impressively rendered inside an indoor tank-- is a freak meteorological phenom called a "white squall," which hits near the end of the film. Water water everywhere and soon the surviving captain and crew are blubbering and bonding before a condemning Coast Guard tribunal.  Arrggh.
Grade: C+
--
Mike Legeros - Raleigh, NC
<EMAIL_ADDRESS>(h) -<EMAIL_ADDRESS>(w)
MOVIE HELL is on the Web!
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