Archiving the Future
Yahoo recently announced that they would be closing down their message board service on March 31, 2013. This might not seem like much of a tragedy to a generation of internet users whose main venues for social interaction are sites like Facebook or Twitter. But the Yahoo message boards have been around for fifteen years, and they contain millions of messages posted on a wide range of subjects. As such, they represent a tremendous archive for future historians of the internet. And not just historians: such repositories are potentially valuable to anyone working on any subject covered in the millions of messages, or even anthropologists studying internet culture—something I would like to see more of.
Yet Yahoo chose to not make these archives available. They are closing the message boards down for good, and no one will be able to view them in the future—from a historian’s perspective, certainly an enormous waste of precious digital archival material. Some began archiving it on their own, but Yahoo! has not cooperated, and started limiting the access of individual connections to their servers. The solution: distributed computing. The good folks at ArchiveTeam.org have dealt with this situation before. They specialize in salvaging data from what they call “sickly, dying or dead” web sites. They are now taking on the archiving of the Yahoo message boards. Due to Yahoo’s bandwidth limitation, they cannot do it alone. You can help by becoming an Archive Team Warrior.
To donate some of your bandwidth to the cause of archiving fifteen years of internet history, you can download a program that will use your internet connection to automatically download and archive thousands of messages. It is a worthy cause, and the message boards will shut down on March 31st—so log in and help out. Archive Team also has many other such projects, and in the past they have saved the archives of big web services, like GeoCities and Friendster.
Yahoo is shutting down this service without doing much to preserve it for a generation to whom “Yahoo!” might be “Ya Who?”
Google, on the other hand, has taken a completely different approach in preserving messages from Usenet. Starting in the 1980s, Usenet became a large internet discussion system, the forerunner to today’s message boards. Google purchased the archives of the old Usenet from services like Deja News and received donations of older messages from the University of Western Ontario, with messages dating back to 1981. They integrated it to their current message board system, Google Groups, keeping the old Usenet alive and available: you can go there to read some of the earliest message boards on the internet. You can even join in and respond to messages posted thirty years ago! Here are some interesting examples:
- May 1981 - First mention of Microsoft
- Jul 1982 - First mention of a compact disc
- Dec 1982 - First thread about AIDS
- Nov 1982 - Early reference to emoticons
Some have also taken on the archiving of old software (especially games) no longer sold or supported by their original creators. These are often referred to as abandonware. I must admit I have visited abandonware websites in the past to find games from my childhood as a PC gamer in the 90s–the ultimate in digital nostalgia. Any fans of Indiana Jones and the Fate of Atlantis out there?
But perhaps one of the most impressive of such projects is the Internet Archive. Besides holding an enormous collection of all sorts of media, such as public domain books, videos and audio, they also offer a web site archive, called the Way Back Machine. In it, you can type the adress of any web site and you will get a list of dates when that web site was saved, so you can visit it and see what it looked like then. Wondering what google.com looked like in 1998? or how about aol.com in 1996? Visit the Way Back Machine and find out!


Typically, you define a key (for example escape) that switches the GUI on and off. The GUI can be a StartScreen, OptionsScreen, CharacterCreationScreen, etc. While the GUI is up, you pause the running game, and then overlay the GUI. You also must switch to a different set of user inputs while the game is paused, so the player can use the mouse pointer and keyboard to interact with the GUI.
You can also project the GUI as a texture onto a mesh texture (but then you cannot click to select). On this page, we look at the overlay variant, which is more commonly used in games.
This code shows you how to overlay anything on the screen with the GUI. This is the most common usecase.
NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay( assetManager, inputManager, audioRenderer, guiViewPort); /** Create a new NiftyGUI object */ Nifty nifty = niftyDisplay.getNifty(); /** Read your XML and initialize your custom ScreenController */ nifty.fromXml("Interface/tutorial/step2/screen.xml", "start"); // nifty.fromXml("Interface/helloworld.xml", "start", new MySettingsScreen(data)); // attach the Nifty display to the gui view port as a processor guiViewPort.addProcessor(niftyDisplay); // disable the fly cam flyCam.setDragToRotate(true);
Currently you do not have a ScreenController – we will create one in the next exercise. As soon as you have a screen controller, you will use the commented variant of the XML loading method:
nifty.fromXml("Interface/helloworld.xml", "start", new MySettingsScreen());
The MySettingsScreen
class is a custom de.lessvoid.nifty.screen.ScreenController in which you will implement your GUI behaviour.
Now that you have layed out and integrated the GUI in your app, you want to respond to user input and display the current game. Time to create a ScreenController!


Showcase
Incredible Types is a curated collection and showcase of outstanding typography and design from around the world. We currently have 426 pieces of inspirational design in our showcase, from 432 creatives and studios from 51 different countries.
Follow us on Twitter, Facebook and Pinterest or subscribe to our RSS Feed
The Counter Press Business Cards
The Hour
Pablo & Rusty’s
Cult
Stay Hungry
The Recorder


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
CanmetMINING
Mailing Address:
555 Booth StOTTAWA, Ontario
K1A 0G1
Location Address:
555 Booth StOTTAWA, Ontario
K1A 0G1
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Company Profile
CanmetMINING, an S&T branch of the Minerals and Metals sector of Natural Resources Canada with facilities in Ottawa, Val-d’Or, Sudbury and Smithers, is a world class leader in the development and deployment of green mining innovation technologies.
CanmetMINING aligns its research activities under the following three business lines: extraction, processing and environment. CanmetMINING conducts R&D on a wide range of processes and technologies involved in extracting ore from the ground and transforming it into a concentrate, mineral product or metal. These activities contribute to improve the competitiveness of the Canadian mining industry through research, innovation and commercialization efforts.
Much of CanmentMINING's research is done in partnership with industry, provincial governments, other federal departments, universities and international agencies. CanmetMINING offers opportunities in many current fields of interest, including R&D, specialized services, personnel interchanges, field trials and certified reference materials technology transfer.
Full profile
Full profile
Contact information
Company description
541620 - Environmental Consulting Services
541710 - Research and Development in the Physical, Engineering and Life Sciences
Product / Service / Licensing
CCRMP also operates the Proficiency Testing Program for Mineral Analysis Laboratories (PTP-MAL) in cooperation with the Task Group Laboratories Mineral Analysis Laboratories Working Group of the Standards Council of Canada (SCC). They are responsible for defining the metals of interest and the concentration range for each, as well as establishing the criteria and target values for assessing laboratory proficiency.
PTP-MAL is a means by which a mineral analysis laboratory can assess its performance for one or more analytical methods independently of internal quality control. Moreover, participation in the program is obligatory if a laboratory is to be accredited or is to retain its accreditation for mineral analysis activities by SCC to ISO/IEC 17025 "General requirements for the competence of calibration and testing laboratories."
CanmetMINING has developed a range of expertise through R&D activities:
Acidic drainage: prediction, prevention and treatment
Reactive and radioactive mine waste disposal
Sludge characterization, stabilization and disposal options
Hydrochemistry and geochemistry
Decommissioning and rehabilitation feasibility studies
CanmetMINING has developed a range of expertise through R&D activities:
Effluent treatment processes
Process microbiology
Bioleaching
Use of inhibitors to prevent acid mine drainage
Microbial enumeration
Metals removal/recovery
Iron removal from effluents
Optimization of lime treatment systems
Cyanide recycling technologies
The Advanced Extraction Technologies Program, where the R&D&I covers synthetic ropes for mine hoisting, explosive-free rock breakage, and alternative energy vehicles for underground.
The Alternative Energy Technologies Program, which conducts R&D&I in the areas of mine ventilation and diesel engine research.
Market profile
Industry sector market interests:
- Environment
- Mining/Petroleum/Gas
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
541620 - Environmental Consulting Services
541710 - Research and Development in the Physical, Engineering and Life Sciences
Products, services and licensing
Product / Service / Licensing
CCRMP also operates the Proficiency Testing Program for Mineral Analysis Laboratories (PTP-MAL) in cooperation with the Task Group Laboratories Mineral Analysis Laboratories Working Group of the Standards Council of Canada (SCC). They are responsible for defining the metals of interest and the concentration range for each, as well as establishing the criteria and target values for assessing laboratory proficiency.
PTP-MAL is a means by which a mineral analysis laboratory can assess its performance for one or more analytical methods independently of internal quality control. Moreover, participation in the program is obligatory if a laboratory is to be accredited or is to retain its accreditation for mineral analysis activities by SCC to ISO/IEC 17025 "General requirements for the competence of calibration and testing laboratories."
CanmetMINING has developed a range of expertise through R&D activities:
Acidic drainage: prediction, prevention and treatment
Reactive and radioactive mine waste disposal
Sludge characterization, stabilization and disposal options
Hydrochemistry and geochemistry
Decommissioning and rehabilitation feasibility studies
CanmetMINING has developed a range of expertise through R&D activities:
Effluent treatment processes
Process microbiology
Bioleaching
Use of inhibitors to prevent acid mine drainage
Microbial enumeration
Metals removal/recovery
Iron removal from effluents
Optimization of lime treatment systems
Cyanide recycling technologies
The Advanced Extraction Technologies Program, where the R&D&I covers synthetic ropes for mine hoisting, explosive-free rock breakage, and alternative energy vehicles for underground.
The Alternative Energy Technologies Program, which conducts R&D&I in the areas of mine ventilation and diesel engine research.
Market
Market profile
Industry sector market interests:
- Environment
- Mining/Petroleum/Gas


Installation the library.
Creating a FlashAPI23 instance.
Creating a light sequence using LightSequenceMaker.
Executing a sequence using SequenceExecutor.
lib
test


Interprets classes and annotations, and manipulates objects.
Programmer's Note: Manipulating subclasses through a parent's reflection is allowed.
@TODO Allow column aliasing.
Public Properties | |
| const | SCALARS |
Maps annotated/native scalar types to storage types acceptable for settype() More... | |
Protected Properties | |
| ReflectionClass | $class |
| string[] | $columns |
| DB | $db |
| array | $defaults = [] |
| ReflectionProperty[] | $properties = [] |
| const | RX_EAV = '/\*\h*@eav\h+(?<table>\w+)/i' |
| const | RX_EAV_VAR = '/\*\h*@var\h+(?<type>\w+)\[\]/i' |
| const | RX_FOREIGN = '/\*\h*@foreign\h+(?<column>\w+)\h+(?<class>\S+)/i' |
| const | RX_IS_COLUMN = '/\*\h*@col(umn)?\b/i' |
| const | RX_JUNCTION = '/\*\h*@junction\h+(?<table>\w+)/i' |
| const | RX_NULL = '/(\bnull\|)|(\|null\b)/i' |
| const | RX_RECORD = '/\*\h*@record\h+(?<table>\w+)/i' |
| const | RX_UNIQUE = '/^\h*\*\h*@unique\h*$/im' |
| const | RX_UNIQUE_GROUP = '/^\h*\*\h*@unique\h+(?<ident>[a-z_]+)\h*$/im' |
| const | RX_VAR = '/\*\h*@var\h+(?<type>\S+)/i' |
Public Static Methods | |
| magic static self | factory (DB $db, string|object $class) |
Public Methods | |
| __construct (DB $db, $class) | |
| string[] | getColumns () |
| EAV[] | getEav () |
| string[] | getForeignClasses () |
| Classes keyed by column. More... | |
| string | getJunctionTable () |
| string | getRecordTable () |
| string | getType (string $property) |
| Scalar storage type, or FQN of a complex type. More... | |
| string[] | getUnique () |
| Columns with their own individual unique constraints. More... | |
| string[][] | getUniqueGroups () |
| Table-level (multi-column) constraints are grouped under an arbitrary shared identifier. More... | |
| mixed | getValue (object $object, string $property) |
| Gets and returns a value through reflection. More... | |
| bool | isColumn (string $property) |
| bool | isNullable (string $property) |
Whether a property allows NULL as a value. More... | |
| bool | isUnique (string $column) |
| bool | isUniqueMulti (string $column, &$ident=null) |
| object | newProto () |
| void | setValue (object $object, string $property, $value) |
| Sets a value through reflection. More... | |
| const SCALARS |
Maps annotated/native scalar types to storage types acceptable for settype()
| __construct | ( | DB | $db, |
| $class | |||
| ) |
| DB | $db | |
| string | object | $class |
Reimplemented in Serializer.
|
final |
| string [] getForeignClasses | ( | ) |
Classes keyed by column.
| string getJunctionTable | ( | ) |
| string getRecordTable | ( | ) |
| string getType | ( | string | $property | ) |
Scalar storage type, or FQN of a complex type.
| string | $property |
| string [] getUnique | ( | ) |
Columns with their own individual unique constraints.
| string [][] getUniqueGroups | ( | ) |
Table-level (multi-column) constraints are grouped under an arbitrary shared identifier.
[ shared identifier => [ col, ... ], ... ]
| mixed getValue | ( | object | $object, |
| string | $property | ||
| ) |
Gets and returns a value through reflection.
| object | $object | |
| string | $property |
| bool isColumn | ( | string | $property | ) |
| string | $property |
| bool isNullable | ( | string | $property | ) |
Whether a property allows NULL
as a value.
| string | $property |
| bool isUnique | ( | string | $column | ) |
| string | $column |
| bool isUniqueMulti | ( | string | $column, |
| & | $ident = null |
||
| ) |
| string | $column | |
| void | $ident | Updated to the group identifier. |
| object newProto | ( | ) |
| void setValue | ( | object | $object, |
| string | $property, | ||
| $value | |||
| ) |
Sets a value through reflection.
| object | $object | |
| string | $property | |
| mixed | $value |


AffineTransform
public struct AffineTransform : Hashable
An affine transformation matrix is used to rotate, scale, translate, or skew the objects you draw
in a graphics context. The AffineTransform
type provides functions for creating, concatenating,
and applying affine transformations.
Affine transforms are represented by a 3 by 3 matrix:
/ a b 0 \
| c d 0 |
\ tx ty 1 /
Because the third column is always (0,0,1)
, the AffineTransform
structure contains values for only
the first two columns.
Conceptually, an affine transform multiplies a row vector representing each point (x,y)
in your drawing
by this matrix, producing a vector that represents the corresponding point (x’,y’)
:
/ a b 0 \
(x’ y’ 1) = (x y 1) × | c d 0 |
\ tx ty 1 /
Given the 3 by 3 matrix, the following equations are used to transform a point (x, y)
in one
coordinate system into a resultant point (x’,y’)
in another coordinate system.
x’ = a * x + c * y + tx
y’ = b * x + d * y + ty
The matrix thereby “links” two coordinate systems — it specifies how points in one coordinate system map to points in another.
Note that you do not typically need to create affine transforms directly.
If you want only to draw an object that is scaled or rotated, for example, it is not necessary
to construct an affine transform to do so. The most direct way to manipulate your drawing —
whether by movement, scaling, or rotation — is to call the functions translateBy(x:y:)
, scaleBy(x:y:)
,
or rotate(by:)
, respectively.
-
The entry at position [1,1] in the matrix.
Declaration
Swift
public var a: Float
-
The entry at position [1,2] in the matrix.
Declaration
Swift
public var b: Float
-
The entry at position [2,1] in the matrix.
Declaration
Swift
public var c: Float
-
The entry at position [2,2] in the matrix.
Declaration
Swift
public var d: Float
-
The entry at position [3,1] in the matrix.
Declaration
Swift
public var tx: Float
-
The entry at position [3,2] in the matrix.
Declaration
Swift
public var ty: Float
-
Creates a new affine transformation using the matrix with provided values.
Declaration
Swift
public init(a: Float, b: Float, c: Float, d: Float, tx: Float, ty: Float)
Parameters
a
The entry at position [1,1] in the matrix.
b
The entry at position [1,2] in the matrix.
c
The entry at position [2,1] in the matrix.
d
The entry at position [2,2] in the matrix.
tx
The entry at position [3,1] in the matrix.
ty
The entry at position [3,2] in the matrix.
-
Creates an affine transformation matrix constructed from a rotation value you provide.
This function creates a
AffineTransform
structure, which you can use (and reuse, if you want) to rotate a coordinate system. The matrix takes the following form:/ cos(angle) sin(angle) 0 \ | -sin(angle) cos(angle) 0 | \ 0 0 1 /
These are the resulting equations used to apply the rotation to a point
(x, y)
:x’ = x * cos(angle) - y * sin(angle) y’ = x * sin(angle) + y * sin(angle)
Declaration
Swift
@inlinable public init(rotationAngle angle: Float)
Parameters
angle
The angle, in radians, by which this matrix rotates the coordinate system axes.
-
Creates an affine transformation matrix constructed from scaling values you provide.
This function creates a
AffineTransform
structure, which you can use (and reuse, if you want) to scale a coordinate system. The matrix takes the following form:/ sx 0 0 \ | 0 sy 0 | \ 0 0 1 /
These are the resulting equations used to scale the coordinates of a point
(x,y)
:x’ = x * sx y’ = y * sy
Declaration
Swift
@inlinable public init(scaleX sx: Float, y sy: Float)
Parameters
sx
The factor by which to scale the x-axis of the coordinate system.
sy
The factor by which to scale the y-axis of the coordinate system.
-
Returns an affine transformation matrix constructed from translation values you provide.
This function creates a
AffineTransform
structure, which you can use (and reuse, if you want) to move a coordinate system. The matrix takes the following form:/ 1 0 0 \ | 0 1 0 | \ tx ty 1 /
These are the resulting equations used to apply the translation to a point
(x,y)
:x’ = x + tx y’ = y + ty
Declaration
Swift
@inlinable public init(translationX tx: Float, y ty: Float)
Parameters
tx
The value by which to move the x-axis of the coordinate system.
ty
The value by which to move the y-axis of the coordinate system.
-
Checks whether an affine transform is the identity transform.
Declaration
Swift
@inlinable public var isIdentity: Bool { get }
-
The identity transform:
/ 1 0 0 \ | 0 1 0 | \ 0 0 1 /
Declaration
Swift
public static let identity: AffineTransform
-
Returns an affine transformation matrix constructed by combining two existing affine transforms.
Concatenation combines two affine transformation matrices by multiplying them together. You might perform several concatenations in order to create a single affine transform that contains the cumulative effects of several transformations.
Note that matrix operations are not commutative—the order in which you concatenate matrices is important. That is, the result of multiplying matrix
t1
by matrixt2
does not necessarily equal the result of multiplying matrixt2
by matrixt1
.Declaration
Swift
@inlinable public func concatenating(_ other: AffineTransform) -> AffineTransform
Parameters
other
The affine transform to concatenate to this affine transform.
Return Value
A new affine transformation matrix. That is,
t’ = self * other
. -
Returns an affine transformation matrix constructed by inverting an existing affine transform.
Inversion is generally used to provide reverse transformation of points within transformed objects. Given the coordinates
(x,y)
, which have been transformed by a given matrix to new coordinates(x’,y’)
, transforming the coordinates(x’,y’)
by the inverse matrix produces the original coordinates(x,y)
.Declaration
Swift
@inlinable public func inverted() -> AffineTransform
Return Value
A new affine transformation matrix. If the affine transform cannot be inverted, it is returned unchanged.
-
Returns an affine transformation matrix constructed by rotating
self
.You use this function to create a new affine transformation matrix by adding a rotation value to an existing affine transform. The resulting structure represents a new affine transform, which you can use (and reuse, if you want) to rotate a coordinate system.
Declaration
Swift
@inlinable public func rotated(byAngle angle: Float) -> AffineTransform
Parameters
angle
The angle, in radians, by which to rotate the affine transform.
Return Value
A new affine transformation matrix.
-
Returns an affine transformation matrix constructed by scaling
self
.You use this function to create a new affine transformation matrix by adding scaling values to an existing affine transform. The resulting structure represents a new affine transform, which you can use (and reuse, if you want) to scale a coordinate system.
Declaration
Swift
@inlinable public func scaled(byX x: Float, y: Float) -> AffineTransform
Parameters
x
The value by which to scale x values of the affine transform.
y
The value by which to scale y values of the affine transform.
Return Value
A new affine transformation matrix.
-
Returns an affine transformation matrix constructed by translating an existing affine transform.
You use this function to create a new affine transform by adding translation values to an existing affine transform. The resulting structure represents a new affine transform, which you can use (and reuse, if you want) to move a coordinate system.
Declaration
Swift
@inlinable public func translated(byX tx: Float, y ty: Float) -> AffineTransform
Parameters
tx
The value by which to move x values with the affine transform.
ty
The value by which to move y values with the affine transform.
Return Value
A new affine transformation matrix.
-
Multiplies two matrices.
This is analogous to calling
lhs.concatenating(rhs)
.Note that matrix operations are not commutative—the order in which you concatenate matrices is important. That is, the result of multiplying matrix
lhs
by matrixrhs
does not necessarily equal the result of multiplying matrixrhs
by matrixlhs
.Declaration
Swift
@inlinable public static func * (lhs: AffineTransform, rhs: AffineTransform) -> AffineTransform
Parameters
lhs
The left operand.
rhs
The right operand.
Return Value
A new affine transformation matrix.
-
Declaration
Swift
public var debugDescription: String { get }
-
Declaration
Swift
public var description: String { get }


class Solution: def minReorder(self, n, connections): # Your solution goes here adlis = defaultdict(list) for u, v in connections: adlis[u].append((v, 1)) adlis[v].append((u, 0)) def dfs(x, par): ret = 0 for v, w in adlis[x]: if v == par: continue ret += w + dfs(v, x) return ret return dfs(0, 0)


The Kent Food Bank and Emergency Services is a non-profit organization offering food, clothing and emergency financial assistance to low income families and individuals living within the Kent School District. The Kent Food Bank service area covers 73 square miles with 40 schools. Kent Food Bank operates two food distribution locations in Kent each week.
The Kent Food Bank and Emergency Services exists to serve the citizens of the Kent area. In order to fulfill it's mission the Kent Food Bank will: Operate a center to supply food, clothing and referrals to persons in need living within the service area. Furnish financial assistance in an emergency situation for emergency needs. Work in conjunction with government agencies, churches and other organizations to serve the surrounding people. Operate primarily as a volunteer agency, obtaining the majority of its support and donations from the community.


The Blair Witch Project (1999) Reviewed by Eugene Novikov http://www.ultimate-movie.com Member: Online Film Critics Society
*** out of four
"Turn that f***ing camera off!"
Starring Heather Donahue, Michael C. Williams, Joshua Leonard. Rated R.
The Blair Witch Project will go down in the books as one of independent filmmaking's biggest triumphs because of the extent which it has broken through to the mainstream. Not only has it gotten an inordinate amount of unabashedly positive reviews from critics but in its first few weeks of limited release it has also achieved commercial success of gargantuan proportions. Whether this $20,000 project can attain box-office bliss by studio standards remains to be seen, but, if nothing else, it's already a cult hit.
Popularity is fine, but is the movie any good? That's unrelated to its Hollywood status and it demands more thoughtful discussion. It's certainly original -- I've never seen anything like it. But does it have any cinematic merit? Is it junky fun or is it a serious movie? This is one of those films, I think, where the answers to all of these questions are solely in the eye of the beholder -- and that's okay. What seemed to me clearly true, however, is that this is no masterpiece of American cinema: it is far too flawed to attain that status even though many fans and even some critics, who have gone off the deep end, insist the opposite.
Three student filmmakers -- Heather, Josh and Mike go on a hike into Maryland woods to film a documentary on the Blair Witch, a local urban legend. They disappear. A year later their footage is found. The Blair Witch Project is that footage and nothing but that footage. They film the whole trip, from the interviews they do with people in a Maryland town to the hike. When one of them loses the all-important map they are lost in the middle of nowhere with something mysterious and frightening on their tail.
Inevitable tensions escalate within the group. Josh and Mike are furious at Heather for refusing to turn the camera off and and focusing on their dire situation. Heather and Josh are furious at Mike for apparently kicking the map into a creek. Their desperation and refusal to cooperate with each other threatens to destroy them. So, evidently, does the Blair Witch.
The Blair Witch Project is constantly creepy and occasionally unnerving but up until the gut-wrenching climax its format prevents it from being genuinely scary and even then it seems to dilute it somewhat. It's a grand idea -- making a movie solely filmed with a hand-held camera by its characters -- but it has its drawbacks. All too often it's slightly hard to tell what's going on because, understandably, the camera doesn't stay steady when the people behind it are in hysterics. It's very difficult to argue that being sure of what's happening is scarier than a menace unknown, which is why something like The Game or the best of Hitchcock's stuff is always more frightening than any slasher movie. Tense anticipation makes the "boo" moment anticlimactic. Still, when the viewer is utterly confused (which, luckily, happens only in a few instances here) horror films tend to have less effect.
The dialogue, much of it improvised (the directors sent the actors alone into the woods to film the movie), surprisingly comes off as realistic. It's not particularly witty but it seems to resemble what real people would utter in that kind of situation; it never feels fabricated or manipulative. Profanity abounds but hey -- would you expect anything less from three mightily pissed-off young college students?
Some will insist that even adequate execution of such brilliantly original idea is enough to make this movie a milestone in cinema; especially horror cinema. I disagree strenuously. It's enjoyable stuff but folks, it's nothing to write home about. The climax approaches terrifying and it contains many suspenseful, well-made sequences but by the same token The Blair Witch Project is inconsistent, confusing and unevenly paced. In a word (three, actually, but never mind): hit and miss.
This nifty little film gets off to a slow start (to the extent that is possible in a film running barely over 80 minutes) and drags through some of its first half. But when it's going, it's good. Crafty, visionary and enjoyable, this may not be a masterpiece, but it's a refreshing digression from the pretension that indie filmmaking tends to represent and from the horror movie clichés that make this movie's companions so dull. ©1999 Eugene Novikov
Sent via Deja.com http://www.deja.com/ Share what you know. Learn what you don't.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Login
UserName
Password
Remember me
Login
Not member ?
Register
User Name
Password
Confirm password
Create an account
Already member ?


Since 1976, Rocket Elevators started from a family business and grew to one of the largest elevator company in America.
Please fill out the online form to receive a custom quote. One of our representatives will contact you within 48 hours. * Indicates a required field.
Recommended number of Elevator:
PLEASE CHOOSE ONE OF OUR PRODUCT RANGE PLAN:


Blocks, Procs, and lambda
Blocks, procs, and lambdas are three ways of passing blocks of code to a method. When blocks are passed to a method, they are not executed unless the method has a yield in it where the block will be executed, and then the rest of the method will continue. It is good if you are just going to call the block of code for that particular method. However, if you want to reuse that block of code later with another method you would not be able to do so without retyping the whole thing. Both procs and lambdas can be used as variables to store a block of code. Then they can be reused with multiple methods. Lambdas and Procs are similar in that they not only need to be passed as parameters to a method, but the method needs to use the call method of the respective lambda or proc in order to have them run. lambdas differ from procs in how they handle parameters and how they handle returns. lambdas are declared with a certain number of parameters. If they are called by a method without the exact number of parameters that they had been declared with, they will raise an argument error. procs are also declared with a certain number of parameters. However, when they are called if the number of parameters is less than those that were declared in the proc, the remaining parameters will have a value of nil. As for returns, lambdas will ignore returns that are called within a method call and will run to the end of the method that called the lambda. Procs will stop running after a return is called. So, any code below the return when executing a Proc will not run.


| PostgreSQL 9.0.10 Documentation | ||||
|---|---|---|---|---|
| Prev | Up | Chapter 6. Data Manipulation | Next |
The modification of data that is already in the database is referred to as updating. You can update individual rows, all the rows in a table, or a subset of all rows. Each column can be updated separately; the other columns are not affected.
To update existing rows, use the UPDATE command. This requires three pieces of information:
The name of the table and column to update
The new value of the column
Which row(s) to update
Recall from Chapter 5 that SQL does not, in general, provide a unique identifier for rows. Therefore it is not always possible to directly specify which row to update. Instead, you specify which conditions a row must meet in order to be updated. Only if you have a primary key in the table (independent of whether you declared it or not) can you reliably address individual rows by choosing a condition that matches the primary key. Graphical database access tools rely on this fact to allow you to update rows individually.
For example, this command updates all products that have a price of 5 to have a price of 10:
UPDATE products SET price = 10 WHERE price = 5;
This might cause zero, one, or many rows to be updated. It is not an error to attempt an update that does not match any rows.
Let's look at that command in detail. First is the key word UPDATE followed by the table name. As usual, the table name can be schema-qualified, otherwise it is looked up in the path. Next is the key word SET followed by the column name, an equal sign, and the new column value. The new column value can be any scalar expression, not just a constant. For example, if you want to raise the price of all products by 10% you could use:
UPDATE products SET price = price * 1.10;
As you see, the expression for the new value can refer to the existing value(s) in the row. We also left out the WHERE clause. If it is omitted, it means that all rows in the table are updated. If it is present, only those rows that match the WHERE condition are updated. Note that the equals sign in the SET clause is an assignment while the one in the WHERE clause is a comparison, but this does not create any ambiguity. Of course, the WHERE condition does not have to be an equality test. Many other operators are available (see Chapter 9). But the expression needs to evaluate to a Boolean result.
You can update more than one column in an UPDATE command by listing more than one assignment in the SET clause. For example:
UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;


This is Words and Buttons Online — a collection of interactive #tutorials, #demos, and #quizzes about #mathematics, #algorithms and #programming.
This continues Outperforming LAPACK with C metaprogramming, and Vastly outperforming LAPACK with C++ metaprogramming. These two posts describe language tricks to make compilers generate highly-performant code for you. But do you need compilers at all?
The alternative would be writing programs in plain assembly. Although the horrors of it are vastly exaggerated, this approach has two major flaws.
Thankfully, we all live in the XXI century, and both of these problems have already been addressed.
The solution to the first one would be LLVM. Initially, it meant “Low Level Virtual Machine” and that is exactly what we want to ensure portability. Simply put, it takes some code written in very low-level hardware agnostic language and returns some highly optimized native code for the specific hardware platform. With LLVM we have both the power of low-level programming and the automation of hardware-oriented micro-optimizations.
And the solution to the second problem is any “scripting” language you want. Scheme, Python, Perl, even bash or AWK will do. They are all meant to eliminate tedious work. Everything you use daily for automation you can use to generate highly-performant code.
Let's repeat the same experiment I did with C and C++ in the posts from before. Let's generate a fully inlined fully unrolled solution and embed it into the benchmarking code. The plan then is as follows.
That's how it looks in a Makefile:
all: generate_llvm generate_s generate_elf test .PHONY: generate_llvm generate_llvm: clang benchmark.c -march=native -S -emit-llvm -o benchmark.bc python substitute_solver_call.py benchmark.bc .PHONY: generate_s generate_s: llc -O2 benchmark.bc -o benchmark.s .PHONY: generate_elf generate_elf: as benchmark.s -o benchmark.o clang -o benchmark benchmark.o |
We need a linear solver in Python just like we had with C and C++. Here it is:
# this generates n-solver in LLVM code with LLVMCode objects. # No LLVM stuff yet, just completely Pythonic solution def solve_linear_system(a_array, b_array, x_array, n_value): def a(i, j, n): if n == n_value: return a_array[i * n_value + j] return a(i, j, n+1)*a(n, n, n+1) - a(i, n, n+1)*a(n, j, n+1) def b(i, n): if n == n_value: return b_array[i] return a(n, n, n+1)*b(i, n+1) - a(i, n, n+1)*b(n, n+1) def x(i): d = b(i,i+1) for j in range(i): d -= a(i, j, i+1) * x_array[j] return d / a(i, i, i+1) for k in range(n_value): x_array[k] = x(k) return x_array |
When we run this on numbers, we have numbers. But we want the code. So let's make an object that pretends to be numbers only to spy on the algorithm. The object that writes down every operation the algorithm wants it to perform in ready to assemble LLVM intermediate language.
# this is basically the whole LLVM layer I = 0 STACK = [] class LLVMCode: # the only constructor for now is by double* instruction def __init__(self, io, code = ''): self.io = io self.code = code def __getitem__(self, i): global I, STACK copy_code = "%" + str(I+1) copy_code += " = getelementptr inbounds double, double* " copy_code += self.io +", i64 " + str(i) + "\n" copy_code += "%" + str(I+2) copy_code += " = load double, double* %" + str(I+1) copy_code += ", align 8\n" I += 2 STACK += [I] return LLVMCode(self.io, copy_code) def __setitem__(self, i, other_llvcode): global I, STACK self.code += other_llvcode.code self.code += "%" + str(I+1) self.code += " = getelementptr inbounds double, double* " self.code += self.io +", i64 " + str(i) + "\n" self.code += "store double %" + str(I) self.code += ", double* %" + str(I+1) + ", align 8\n" I += 1 STACK = STACK[:-1] return self def general_arithmetics(self, operator, other_llvcode): global I, STACK self.code += other_llvcode.code; self.code += "%" + str(I+1) + " = f" + operator self.code += " double %" + str(STACK[-2]) + ", %" self.code += str(STACK[-1]) + "\n"; I += 1 STACK = STACK[:-2] + [I] return self def __add__(self, other_llvcode): return self.general_arithmetics('add', other_llvcode) def __sub__(self, other_llvcode): return self.general_arithmetics('sub', other_llvcode) def __mul__(self, other_llvcode): return self.general_arithmetics('mul', other_llvcode) def __div__(self, other_llvcode): return self.general_arithmetics('div', other_llvcode) |
Now when we run the solver with this kind of objects, we get a fully functional linear solver written in LLVM intermediate language. Then we put it into the benchmark code to see how fast it is.
Instruction in LLVM are numbered and we want to preserve this enumeration, so the function that inserts our code into our benchmark is not trivial. But it's not very complicated either.
# this replaces the function call # and updates all the instructions' indices def replace_call(text, line, params): global I, STACK # '%12 ' -> 12 I = int(''.join( [xi for xi in params[2] if xi.isdigit()] )) first_instruction_to_replace = I + 1 STACK = [] replacement = solve_linear_system( LLVMCode(params[0]), LLVMCode(params[1]), LLVMCode(params[2]), 5).code delta_instruction = I - first_instruction_to_replace + 1 for i in xrange(first_instruction_to_replace, sys.maxint): not_found = sum( [text.find('%' + str(i) + c) == -1 for c in POSSIBLE_CHARS_NUMBER_FOLLOWS_WITH] ) if not_found == 4: # the last instruction has already been substituted break new_i = i + delta_instruction for c in POSSIBLE_CHARS_NUMBER_FOLLOWS_WITH: # substitute instruction number text = text.replace('%' + str(i) + c, '%' + str(new_i) + c) return text.replace(line, replacement) |
The whole piece of code that implements the solver, provides the Python-to-LLVM layer, and does the code insertion is only 100 lines long! You can see it in one piece on GitHub.
The benchmark itself is in C. When we run the Makefile, its call for solve_5 gets replaced by the LLVM code generated from Python by Python.
|
The most noteworthy is how the ultra-verbose intermediate code generated by the Python script turns into some very compact and very effective code for the hardware. It is highly super-scalarized too. But is it good enough to compete with C and C++ solutions?
Here are some approximate numbers for the three cases: C with tricks, C++ with a trick, and Python with LLVM.
Of course, this speed-up is not something you would kill for. But it shows that you can write programs in Python that outperform their counterparts written in C or C++. You don't have to learn some special language to create high-performant applications or libraries.
I think that the dichotomy between fast compiling languages and slow scripting languages is a bluff. Native code generation may very well be not a core feature but something like a pluggable option. Like a library or an embedded language. Like Numba for Python or Terra for Lua. Think about the benefits: you can do your research and rapid prototyping in one language, and then generate highly-performant code... in the same language.
High-performance computing has no reason to remain a privilege of compiling languages. A compiler is just a soft machine for code generation. You can generate code in any language you want. I believe you can teach Matlab to generate ultra-fast LLVM code if you want to.
All the measurements conducted on Intel(R) Core(TM) i7-7700HQ CPU @ 2.80GHz, the code is compiled with clang version 3.8.0-2ubuntu4 and g++ 5.4.0 with -march=native -O2. The source code for the benchmark is available on Github.
| Index #programming #demos | ← there's more. |
+
So You Think You Know C (free book) + Geometry for Programmers (paid book) + Github & RSS |


{% extends "simple_page.html" %} {% block title %}Tutoring{% endblock %} {% block pagetitle %}Tutoring{% endblock %} {% block page_content %}
Need help with your classes? Officers of the CSUA provide free tutoring services in 311 Soda.
If you cannot make it to any tutoring appointments, you are always welcome to come to our office in 311 Soda (just outside the 3rd floor entrance). Most officers are willing to help you with your classes, just come in and say hi!
Click here to book a tutoring / advising appointment
If you are interested in becoming a tutor, please fill out this form, and send an email to<EMAIL_ADDRESS>{% endblock %} {# vim:set et sw=4: #}


The datetime package is a LATEX2ε package that provides various different formats for \today, and provides commands for displaying the current time. If you only want the time commands but not the date changing commands, you can pass the option nodate to the package.
Since version 2.4, the datetime package has been separated into two packages: datetime and fmtcount. When I originally created this package, I defined the commands, \ordinal etc which could be used in the definition of \today. Since then, I have extended the number of commands available that can be used to display the value of a LATEX counter, however it seems more appropriate to define all these counter-related commands in a separate package. The fmtcount package is now distributed separately from the datetime package, and will also need to be installed.
As from version 2.42, the datetime package is now compatible with babel, however you must load the datetime package after the babel package. For example:
There are various declarations that change the effect of \today. The change can be localised by placing the declaration within a group.
As from version 2.43, the numerical date formats (such as \ddmmyyyydate) use the command
to separate the numbers. So, for example, if you want to hyphens instead of slashes, you can do:
This declaration will redefine \today to produce the current date displayed in the form 2000/03/08. (You can redefine \dateseparator to - to change to 2000-03-08.)
This declaration will redefine \today to produce the current date displayed in the form Wednesday 8th March, 2000 if the package option dayofweek is used, or 8th March, 2000 if the package option nodayofweek is used.
This declaration will redefine \today to produce the current date displayed in the form Wed 8th Mar, 2000 if the package option dayofweek is used, or 8th Mar, 2000 if the package option nodayofweek is used.
This declaration will redefine \today to produce the current date displayed in the form 08/03/2000.
This declaration will redefine \today to produce the current date displayed in the form 8/3/2000.
This declaration will redefine \today to produce the current date displayed in the form 08/03/00.
This declaration will redefine \today to produce the current date displayed in the form 8/3/00.
This declaration will redefine \today to produce the current date displayed in the form: Wednesday the Eighth of March, Two Thousand if the package option dayofweek is used, or Eighth of March, Two Thousand if the package option nodayofweek is used. Note that \textdate is defined for use with English, it won’t look right if it is used when another language has been selected1. If you want to define a similar command for another language, you will first need to check that the fmtcount package supports that language.
This declaration will redefine \today to produce the current date displayed in the form March 8, 2000. (As TEX and LATEX do by default.)
This declaration will redefine \today to produce the current date displayed in the form 03/08/2000.
This declaration will redefine \today to produce the current date displayed in the form 3/8/2000.
This declaration will redefine \today to produce the current date displayed in the form 03/08/00.
This declaration will redefine \today to produce the current date displayed in the form 3/8/00.
In addition to the above, the declarations \date⟨lang⟩ are available for all languages defined either by calling babel prior to datetime or by passing the language name as an option to datetime. See §5 Defining New Date Formats if you want to define your own customised date format.
The current time is displayed using the command
A specific time can be displayed using the command
where ⟨hour⟩ is a number from 0 to 23, and ⟨minute⟩ and ⟨second⟩ are numbers from 0 to 59.
The format can be changed using the declaration
where ⟨style⟩ is the name of the format. Predefined formats are:
New time formats can be defined using the command:
where ⟨name⟩ is the name of the new format (used in \settimeformat), and ⟨format⟩ is how to format the time. Within ⟨format⟩ you can use the counters HOUR (number of hours after midnight), MINUTE (number of minutes past the hour), SECOND (number of seconds) HOURXII (number of hours after midnight/midday), TOHOUR (the next hour) and TOMINUTE (number of minutes to the next hour), and the corresponding commands: \THEHOUR, \THEMINUTE, \THESECOND, \THEHOURXII, \THETOHOUR and \THETOMINUTE.
For example, to define a new time format that uses a dot instead of a colon:
You then need to switch to this new format before you can use it:
As from version 2.43, if you only want to change the separator, you can simply redefine
instead of defining a new time format. For example:
The xxivtime format will now work like the dottime format defined above.
This command2 prints the date in the format required for PDF files, e.g. if the date is 1 May 2004 and time is 22:02, \pdfdate will print<PHONE_NUMBER>0200. The reason this date format is separate from all the others is because the other form doesn’t get properly expanded by PDFTEX. (This command is defined regardless of whether the package option nodate is called.) Example:
Note that PDFTEX introduced the new primitive \pdfcreationdate in version 1.30.0, so \pdfdate isn’t required with newer versions of PDFTEX. (\pdfcreationdate is better than \pdfdate as it also stores the time zone.)
There are two commands that print the name of the current month:
prints the current month name in full, e.g. August, and
prints the abbreviated month name, e.g. Aug. Both \monthname and \shortmonthname take an optional argument (a number from 1 to 12) if the name of a specific month is required. For example, \monthname[6] will produced the output: June.
The day of the week is computed using the algorithm documented at http://userpages.wittenburg.edu/bshelburne/Comp150/DayOfWeek.htm. This algorithm works for any date between 1st Jan, 1901 and 31st Dec, 2099. The following macros display the day of week for a given date:
prints the day of week for the specified date. For example,
will produce the output: Thursday.
prints the abbreviated name for the day of week for the specified date. For example
will produce the output: Thu.
This TEX conditional can be used to determine whether or not the option dayofweek has been passed to the package. For example:
will only display the day of week if the dayofweek option was passed to datetime. Alternatively, you can use David Carlisle’s ifthen package:
The command
displays ⟨number⟩ as a date-type ordinal. If the current language is English, this will simply pass the argument to \ordinalnum (defined in the fmtcount package), if the current language is Breton, Welsh or French, a superscript will only be added if ⟨number⟩ is 1, otherwise only ⟨number⟩ will be displayed.
The macro3
formats the specified date according to the current format of \today4. (Arguments must all be integers.) For example, in combination with \longdate, the command
will produce the output: Monday 27th September, 2004.
You can ensure that a number is displayed with at least two digits using the command
New date formats can be defined using the command:
where ⟨name⟩ is the name of the new format, and ⟨format⟩ is how to format the date. Within the argument ⟨format⟩ you can use the commands \THEDAY, \THEMONTH and \THEYEAR to represent the relevant day, month and year, or you can use the counters DAY, MONTH and YEAR if you want to use \ordinal etc. Once you have defined the new date format, you can then switch to it using the declaration \⟨name⟩ (i.e. the name you specified preceded by a backslash), and subsequent calls to \today and \formatdate will use your new format.
For example, suppose you want to define a new date format called, say, mydate, that will typeset the date in the form: 8-3-2002, then you can do:
\newdateformat will then define the declaration \mydate which can be used to switch to your new format. In the following example, two new date formats are defined, and they are then selected to produce two different formats for the current date:
If the current date is, say, 8th March, 2002, the above code will produce the following: Dash: 08-03-2002. US: March 8th, 2002.
Note that \THEDAY etc and DAY etc have no real meaning outside \newdateformat (this is why they are in uppercase). Incidentally, the dashdate format is not really necessary, as you can achieve this format using:
Another note: in the above code, \ordinal was used to illustrate the use of the DAY counter. It is better to use \ordinaldate instead:
It is possible to save a date for later use using the command: 5
This date can later be displayed using the same format as that used by \formatdate using the command:
Individual elements of the date can be extracted using the commands:
The following commands are defined by the datetime package:
The following options may be passed to this package:
The default options are: long, raise, dayofweek and 24hr.
If you use the ngerman package, you must use datetime’s ngerman package option if you want the date displayed in the same form as ngerman.  Similarly for the german package.
 This is because the babel \date⟨lang⟩ commands redefine \today, whereas the datetime package redefines \today to use \formatdate, and the date formatting commands (such as \longdate) redefine \formatdate rather than \today. This ensures consistent formatting of the dates whether you use \today or \formatdate. Therefore, the datetime package has to redefine all the \date⟨lang⟩ commands accordingly. Thus the multilingual date support is mostly limited to that provided by babel. Additional support, such as the day of week names and abbreviations, are only supplied for those languages that I know, or that other people have been able to supply for me.
As from v2.56, the package options supplied to datetime override babel’s date format. For example:
will use ddmmyyyy date format regardless of language. Note that if you use a declaration instead of a package option, for example:
the date format will be switched back to \datefrench or \datespanish whenever the language is set. You can use
to always use {⟨declaration⟩} whenever the language is set. For example:
The commands \monthname and \shortmonthname, will produce the month name in the current language. If you want the month name in a specific language, you can use the command \monthname⟨lang⟩. For example, \monthnamefrench[6] will produce the output: juin. Note that \textdate is formatted for English dates, and won’t look right if used with another language setting. If you want a textual date, the fmtcount package (which is loaded by datetime) defines some commands which display a number or ordinal as a word, but it only has very limited multilingual support. See the fmtcount documentation for further details.
TEX provides \day, \month and \year registers. In addition, datetime provides the registers: \currenthour, \currentminute and \currentsecond. Note that old distributions of TEX will always have \currentsecond set to zero.
As from Version 2.4, the datetime package will read in settings from the configuration file datetime.cfg, if it exists, which will override the default package options. For example, suppose you prefer a short date without the day of week by default, you will need to create a file called datetime.cfg that contains the line:
The file datetime.cfg should then go somewhere on the TEX path. Now all you need to do is:
without having to specify the short and nodayofweek options.
You can also use this file to define and set your own date styles. For example, you could create a configuration file that has the following lines:
Whenever you use the datetime package, it will now use this format by default.
Version 2.43 and above of the datetime bundle supplies the LaTeX2HTML style file datetime.perl. This file should be placed in a directory searched by LaTeX2HTML. The following limitations apply to the LaTeX2HTML styles:
This, I agree, is an unpleasant cludge.
There is a datetime FAQ available at: http://www.dickimaw-books.com/faqs/datetimefaq.html.
A
B
babel package 7, 8, 9, 10, 11, 12, 13
C
\currenthour 14
\currentminute 15
\currentsecond 16
\currenttime 17
D
\dateseparator 18, 19, 20
datetime package 21, 22
datetime2 package 23
DAY (counter) 24, 25, 26
\day 27
\dayofweekname 28
\ddmmyydate 29
\ddmmyyyydate 30, 31
\displaydate 32
\dmyydate 33
\dmyyyydate 34
F
fmtcount package 35, 36, 37, 38, 39, 40, 41
\formatdate 42, 43, 44, 45, 46
\formattime 47
G
german package 48
\getdateday 49
\getdatemonth 50
\getdateyear 51
H
\halfpast 52
HOUR (counter) 53
HOURXII (counter) 54
I
\ifshowdow 55
ifthen package 56
L
\longdate 57, 58, 59, 60, 61
M
\mdyydate 62
\mdyyyydate 63
\midnight 64
MINUTE (counter) 65
\mmddyydate 66
\mmddyyyydate 67
MONTH (counter) 68
\month 69
\monthname 70, 71
N
\newdate 72
\newdateformat 73, 74, 75
\newtimeformat 76
ngerman package 77, 78, 79
\noon 80
O
\oclockstring 81
\ordinal 82, 83, 84
\ordinaldate 85, 86
\ordinalnum 87
P
package options:
12hr 88
24hr 89, 90
dayofweek 91, 92, 93, 94, 95, 96, 97
ddmmyy 98
ddmmyyyy 99, 100
dmyy 101
dmyyyy 102
hhmmss 103, 104
iso 105
level 106
long 107, 108
mdyy 109
mdyyyy 110
mmddyy 111
mmddyyyy 112
ngerman 113
nodate 114, 115, 116
nodayofweek 117, 118, 119, 120, 121
oclock 122
raise 123, 124
short 125, 126
text 127
us 128
yyyymmdd 129
\pdfdate 130
\pmname 131, 132
\pmstring 133, 134
Q
\quarterpast 135
\quarterto 136
S
SECOND (counter) 137
seminar package 138
\setdefaultdate 139
\settimeformat 140, 141
\shortdate 142, 143
\shortdayofweekname 144
\shortmonthname 145, 146
T
\textdate 147, 148, 149
\THEDAY 150, 151
\THEHOUR 152
\THEHOURXII 153
\THEMINUTE 154
\THEMONTH 155
\THESECOND 156
\THETOHOUR 157
\THETOMINUTE 158
\THEYEAR 159
\timeseparator 160, 161
\today 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178
TOHOUR (counter) 179
TOMINUTE (counter) 180
\twodigit 181
U
\usdate 182
1in fact, you may get an error from the fmtcount package if you are using a language that it doesn’t support.
2thanks to Ulrich Dirr for asking about this
3Note the name change since version 1.1. The command name was changed from \thedate to \formatdate to avoid a name clash when using the seminar class file.
4To be more precise, \today is defined to be \formatdate{\day}{\month}{\year} where \longdate etc change the definition of \formatdate
5Thanks to Denis Bitouzé for asking about this


monospace
Internal links: HomePage
Page separator:
Bulleted/indented text (tabs or 8 spaces ok):
*------>> follow me >>------* | | | | *-------------<<--------------*Combine indenting and preformatted text like this:
this is indented
Lua code block:
-- the foo function function foo(x) print('input is '..tostring(x)) local foo = 1 + 1.234e56 end
Section headers:
| table |
| table |
This is a paragraph.
| table |
table |
| col1 |
col2 |
This is a paragraph.
| head1 |
head2 |
head3 |
| col1 |
col2 |
col3 |
| fish and cow |
fish and cow |
fish and cow |
| 123 |
0.5 |
.66 |
| col1 |
col2 |
col3 |


{% include _head.html %}
{% include _browser-upgrade.html %} {% include _navigation.html %} {% if page.image.feature %}When you walk around the village you will see something different on the faces of the Christians. They have a joy they didn't have before. -- MathewWelcome to the Christhia Seva Mission website. We are located in the district of Chikbalapur (Wikipedia) in the state of Karnataka, India. The mission was established in 1980 by Mathew and Mary Mathai. Since then it has grown to over 300 villages reaching more than 4,000 people.


0" class="comments-head">Comments
{{comment.username}}
{{comment.created_at | date:'MMM d h:mma'}}{{comment.comment}}


---
layout: post
title: Surely it can't be so hard to be a better (Emacs and Docbook) geek?
tags:
- ego
- Linux
- Open Source Software
- Work Practices
status: publish
type: post
published: true
meta:
_edit_last: '451289'
---
I recently decided, despite using nothing but Linux on my laptop, that I had become a suite using purely graphical Office tools (Evolution for calendar, email etc, OpenOffice to write documents and presentations and so on). I was becoming a very rusty geek!
Time for Plan A. Migrate email, task management etc to emacs, start using Docbook for presentations and document creation (in Emacs of course) with git to protect my precious work.
However so far it all feels a bit hard... There is no consensus on the best way to configure Emacs for laptop email using IMAP services (mix and match any of Dovecot, fetchmail, Gnus, RM, procmail, etc etc); and getting a decent fop processor working is harder than it should be (I got going instead with dblatex in the end) -- now writing Docbook documents seems hard as well -- all that XML *sigh*. I'm not even feeling at home with git yet :-(.
Update 29/Aug/08: Sacha Chua has some great advice to share on using Gnus for email
Anyone have some tips or encouragement to share?


In this project, you're going to create a block pushing game using a JavaScript canvas.
1. Add a canvas element to your page, and make JavaScript variables for it and its 2d context.
2. Make a new constructor function for a "spriteSquare" object that will keep track of the x, y, width, height and color of a square in the game. You can read more about constructor functions here.
3. Make two spriteSquares, one for the player and one for the ball.
4. Make a new array to hold all of your spriteSquares. Make sure to push your spriteSquare into this array.
5. Add an event listener that will make the player square move to the mouse's x and y whenever the mouse moves, then clear the canvas and redraw all of your squares. (If you don't clear your canvas, all of the old squares will still show up!)
6. Make a function that will check whether two squares are colliding.
7. Every time the mouse moves, call this function to check if the player and ball are colliding, and move the ball dependent upon how they are colliding.
8. Add in an endzone square.
9. When the ball and endzone collide, make the game stop.
10. Make the window alert the player that they have won!


---
layout: post
title: Combining Flex and Scala using Liftweb and BlazeDS
date: 2009-01-18 18:05:03.000000000 +01:00
type: post
published: true
status: publish
categories:
- Technology
tags:
- flex
- scala
meta:
_edit_last: '2'
dsq_thread_id: '3768853862'
_jetpack_related_posts_cache: a:0:{}
author:
login: admin
email<EMAIL_ADDRESS>display_name: gerbrand
first_name: Gerbrand
last_name: van Dieijen
---
I wanted to setup a sample project that uses Flex and Scala. I followed the excellent tutorial on FlexOnRails: Integrating Flex, BlazeDS, and Scala/Lift. The tutorial helps a lot explaining how to set up your sample project. Unfortunately the tutorial is a bit outdated with regard to latest versions. Fortunately I could solve all problems! I'll list the problems I had. Also, I'll post my project. I won't redo the tutorial, as I certainly couldn't to a better job then Derek Wischusen.
- First problem I had, was getting my backend compiled. The liftweb has changed slightly, as a result the class Boot.scala didn't work anymore. I could solve it by downloading the latest Liftweb framework, version 0.9. I copied & pasted the Boot.scala from the sites/examples dir. After a few tweaks (removing code I didn't need), the project compiled successfully!
- Then I wanted to setup the flex project. That was quite easy, using the latest version of Flexbuilder (version <IP_ADDRESS>193).
I setup flexbuilder to deploy in the backend/webapp directly, as is explained in the tutorial.
- I ran the project by running the following maven commands in the backend subdir:
mvn package
mvn jetty:run
- While running the example, I got a AbstractMethodError. I wasn't the first person to get that error, as I found on the Liftmailinglist. I could fix the problem by using Scala version 2.7.1 for my own project. All in all, when using bleeding-edge technologies, having the latest version isn't good always!
- After that I ran the project again. Now I get a NullPointerException, seems the line val msgBroker = MessageBroker.getMessageBroker(null) returns Null.
Turned out I forgot to update the web.xml, the Flex servlet and other configuration has to be added.
I named the sample project Elegante. Download the source here: elegante.zip. For explanation see the original tutorial.


My First Home Made HiFi Audio Decoder and Amplifier
Recently I developed my first in-house hi-fi audio decoder + amplifier project. Having tested it with my own ears I was very much surprised by the outstanding sound quality. Considering the fact that this project has costed me less than 300 HKD (thanks to cheap PCBs from Shenzhen), I am sooooo happy with the result! It has a name: “JAudio Decoder Amp”
The Design
To realise this project with simple techniques and low budget, I selected a number of good-quality yet easy-to-use chips to base my design on.
I used PCM2707 computer interface chip + decoder + DAC. PCM2707 is a USB audio interface that enables music playback through USB. In addition to that it also has a built-in DAC that can convert 16-bit 44 kHz sound source with down to 0.006% THD into line. 16-bit 44kHz is standard CD-quality sound source, which I believe is the highest quality sound source that I can get most of the time. So I would not bother myself to use higher-quality DAC chips, which costs more and makes the design more complicated.
The built-in DAC of PCM 2707 can directly drive headphones with 32 ohm impedance, but the THD would be higher this way. Wanting to further improve sound quality, I used TPA6120 audio amplifier as output buffer. The amplifier is supplied with +5V ~ -5V, and the gain is set to 1.5V/V.
To generate the -5V required to drive TPA6120, a switch mode voltage converter, LM2594, was employeed to convert +5V (from USB Vbus) to -5V.
All 3 devices come from IT. Check data sheets for details and application information.
The complete and most updated schematic is shown in Fig.1, alone with some layout considerations.
The PCB
The PCB layout was created based on the schematic in Fig.1. It’s a 2-layer PCB, and it features separated ground panels for digital and analog circuitries, which helps reduce cross-over noise. According to the data sheet of TPA60120, for stable operation and optimum performance, there should be no ground panel underneath the output and feed-back pins of the IC. This recommendation was very well implemented. In addition, the output and feed-back paths were made as short as possible.
The design of the PCB is shown in Fig.2 and Fig.3.
The Final Product
After a few hours of assembly and some hardware debugging, my computer finally successfully recognized the chip, and sound flowed out like water. It has a crystal clear high-frequency, and rich mid-frequency, and decent low-frequency. The response is quite flat, being totally loyal to the original recording. When the music is off, there is no noise what so ever. I made a 5-minute comparison between my laptop’s audio output and this decoder. There is subtle differences, and the later offers clearer sound. From first impression I like my decoder better.
I used my Beyerdynamics DT880 headphone (32ohm version) for the above testings.
Haven’t washed the PCB yet, still covered with flux. But here is the final product (Fig.4 and 5).
There are minor problems with the board. First, sometimes my computer fails to recognize PCM2707, because of power supply instability at power-up. PCM2707 is supplied with 5V USB bus voltage, and its internal voltage regulator generates the 3.3V voltage needed for its internal operations. The internal voltage regulator, however, occasionally exhibits instability at power-up, causing the device to malfunction. The cause of the instability is the inadequate value of decoupling capacitor. I added as much as I could, and the device could function normally 90% of the time. Second, the power and status indicator LEDs have different brightnesses, which is kind of annoying.
I made a cute little case for my decoder and amplifier, using a Snoopy pencil case. Look very nice, feel better to the touch!
Leave a Comment


Element providing an extensible figure box solution.
Basic Usage

 	 Header content

 		Small text for example, to be showed inside the box.

 		some links?

An `figure-box` looks like this:
Seamless with class="full-width"
Advanced
Made with ♥ by Octávio Turra © 2014. Under MIT License.


Let's play!
Rules of the game
Ping pong ought to count to your number in ascending order from 1 wand will make the following exceptions:
- Numbers that are divisible by 3 become 'ping'
- Numbers that are divisible by 5 become 'pong'
- Numbers that are divisible by 3 and 5 become 'PingPong'


Cryptography is the study of the principles and techniques by which information can be concealed
in ciphertexts and later revealed by legitimate users employing the secret key.
The following are some of the implimintations the students in this section have done.
Check Them Out!


Given the following recursive function write down the missing recursive call such that this function determines the minimum element in an array of integers.


Marcy Sutton
@marcysutton
a11ywins.tumblr.com
Technical Accessibility
- you can use your technical skills to break down barriers
- using pragmatic a11y development for good
-
#developForGood
- Accessible controls
- focus management
- dialogs
- Also - using the command line
- Debugging in the browser
- Test coverage
- Promises
Test coverage provides a developer contract for a how a feature should work and prevents regression from going out the door. Break the build if a test failed
Create healthier software development
Test coverage
- unit tests
- integration tests
- end to end tests
- Protractor & Selenium Web Driver
Demos
New York Times
- Major a11y problems
- buttons aren’t operable
- using Divs instead of buttons
- Buttons become Focusable
Karma
- JS Test runner
- Grunt - task runner
- Jasmine - write test and describe what they should do
Write tests to make sure accessible elements are being used.
Use a dialog element for modal
http://caniuse.com/#feat=dialog
Requires Polyfill
Removing barriers
- use real buttons
- wire the esc key
- dialog focus management
- inert Polyfill
- write testable code


Symbol Index for "Natural Progression"
Symbol Index for diagram
"Natural Progression"
Natural Progression (Class)
NP/Source (Generalization Node)
Property Natural Progression (Class)
Subject Natural Progression (Class)


API Documentation¶
Automatic Reloading¶
-
class
mighty_patcher.watch.
AutoReloader
(path)¶ An automatic code watcher and reloader. When a reloader is created, it watches the directory provided to it for file changes (in
*.py
files)Once a change is detected, the reloader re-imports the related module and then does an in-place replacement of this module (so code dependent on the changes also begin pointing to the new code).
The path that is provided to the reloader is considered a package root
-
__init__
(path)¶ - Parameters
path – The directory to watch for changes. When python files in this directory changes, they will get reloaded
-


I Won a Joke Contest
Soooo, I won a joke contest. Chris Coyier of CSS Tricks put out a request for original jokes relating to development, and I’m one of the winners. Here’s the winning joke:
A designer, a copywriter, and a developer were having a few drinks after work one night. The designer mused, “With such beauty in the world, God must be a designer.”
The copywriter scoffed and said, “No, no. The story of mankind is the greatest story ever told. God is clearly a writer.”
The developer chuckled quietly and said, “Come on, guys. God’s a developer.
For my cleverness, I won two t-shirts: a Codepen T-shirt in gray and a Treehouse T-shirt in green. Not a bad haul!


Contents
PDF Merge is a simple tool for merging or extracting pages from one or more PDF Document(s) into a new PDF Document. This page will teach you how to use it for most use cases.
To combine a number of PDF documents into one:
Add PDF Document(s)...
. A window will open to select your files.Error
, press on Remove
next to it to remove it. See Limitations below for more details.Merge Documents
. The merged file will download automatically and be available in your 'Downloads' folder.You can use the Range feature to extract pages from a PDF document:
Add PDF Document(s)...
. A window will open to select your files.Error
, press on Remove
next to it to remove it. You will unfortunately not be able to extract pages from that document. See Limitations below for more details.Extract Pages into New Document
. The new file will download automatically and be available in your "Downloads" folder.You can use the Range feature to re-order the pages of a document by adding the same document multiple times. For example, let's assume you have a document called "invoice.pdf" that has 5 pages. Now let's say that you want pages 4 and 5 to be placed before pages 1, 2 and 3. Here's how you would proceed :
Add PDF Document(s)...
. A window will open to select your files.Range
text box next to this document, enter 4-5
.Add PDF Document(s)...
and, once again, select "invoice.pdf".Range
text box next to that document, enter 1-3
.Merge Documents
. The new file containing your re-ordered pages will download automatically and be available in your 'Downloads' folder.The Range feature allows you to specify which pages to copy from a PDF document. You can enter the range in two different ways:
You can specify a number of individual pages to include in your merged PDF. Simply enter the number of the pages that you want to keep separated by commas. For example, if you want pages 5, 8, 13 and 16 of a document you would enter the following range: 5,8,13,16
.
You can also specify a range of pages to include in the merged PDF. Simply enter the start and the end pages to include separated by an hyphen. Note that both the indicated start and end pages will be included as well. For example, if you want pages 10, 11, 12, 13 and 14 of a document you would enter the following range: 10-14
.
Finally, you can combine the two above methods in any way you want. For example, the following range: 5,18,21-23,34,65-70
would give you the pages 5, 18, 21, 22, 23, 34, 65, 66, 67, 68, 69 and 70 in the new document.
PDF Merge has been designed to work directly inside your web browser locally on your computer. None of your PDF Documents will be uploaded on the internet or leave your computer in any way. In fact, you could completely disconnect your internet right now and it would still work perfectly fine.
In order to respect and protect your privacy, PDF Merge does not use cookies of any kind and does not show any advertisements. Finally, the complete source code of this product, should you want to inspect it, is available here.
PDF Merge uses the following third-party libraries:
PDF Merge is Copyright 2020 by Jean-François Desrochers. MIT License.


Upload a photo and answer a few questions, and we’ll prescribe the right ointment, cream or oral medication.


Home
Contact
portfolios
Contact Us
Hi, you can also contact me direct at email :
<EMAIL_ADDRESS>Send


Rake 0.4.14 Released
Changes
Version 0.4.14 is a compatibility fix to allow Rake’s test task to work under Ruby 1.8.2. A change in the Test::Unit autorun feature prevented Rake from running any tests. This release fixes the problem.
Rake 0.4.14 is the recommended release for anyone using Ruby 1.8.2.
What is Rake
Rake is a build tool similar to the make program in many ways. But instead of cryptic make recipes, Rake uses standard Ruby code to declare tasks and dependencies. You have the full power of a modern scripting language built right into your build tool.
Availability
| Home Page: | rake.rubyforge.org/ |
| Download: | rubyforge.org/project/showfiles.php?group_id=50 |


High Priest Agripel:
First, the totem!
What can I help you with?
"Tell me about the true nature of the doll."


As, what I would consider, a pretty ordinary internet user, I save a lot of stuff from the web. I've tried many services and tools that allow you to save and organize all that stuff in visual collection, but not many have been able to give me exactly what I want and need. My favorite, GimmeBar - which was perfect, by the way - has since been left unsupported by it's creators and no longer works properly. My main needs are a easy-to-browse, visual layout, complete access to all of the raw files, and an open organizational system that I can define. GimmeBar had a solid visual layout, backed up to Dropbox, and employed a tag based structure that fit the bill perfectly. But alas, it's gone, so I set out to create a more sustainable, self-hosted solution for myself.
Folio is a simple Jekyll theme made for organizing images. Tags are used to dynamically populate navigation and it can be run locally to give immediate access to files and also makes for a pretty fast a fluid experience.
In it's current state, I use it mostly for moodboards and brand research projects, but it could work reasonably well as a small portfolio or gallery.
Taking a look yourself will do it better justice than any images I could add here. Please check out the demo if you haven't already


Share your updates on the seedlings here. How are they growing? Are they happy?
Upload your pictures!Some quick example text to build on the card title and make up the bulk of the card's content.
Some quick example text to build on the card title and make up the bulk of the card's content.


{% extends "base_generic.html" %} {% block content %}
Speaker: {{ speech.speaker }}
Speech Date: {{ speech.speech_date }}
Speech: {{ speech.speeech }}


Vodafone Idea, Airtel lose over 49 lakh users in September; Jio, BSNL gain: Trai
by PTIHighlights
- Bharti Airtel lost 23.8 lakh users in September to take its total user base to 32.55 crore; while, Vodafone Idea lost 25.7 lakh users in the month to take its total user base to 37.24 crore
- Reliance Jio added 69.83 lakh users in September, taking its total user base to 35.52 crore
NEW DELHI: Vodafone Idea and Bharti Airtel lost over 49 lakh users in September this year, while rival Reliance Jio added 69.83 lakh new users to its network, as per data from sectoral regulator Trai. Total wireless subscribers (GSM, CDMA and LTE) increased to 117.37 crore at the end of September 2019 from from 117.1 crore at the end of August, a monthly growth of 0.23 per cent, the Telecom Regulatory Authority of India (Trai) said.
Wireless subscription in urban areas declined to 65.91 crore at the end of September, while that in rural areas increased to 51.45 crore, it added.
As per the data, Bharti Airtel lost 23.8 lakh users in September to take its total user base to 32.55 crore. Similarly, Vodafone Idea lost 25.7 lakh users in the month to take its total user base to 37.24 crore.
However, Reliance Jio added 69.83 lakh users in September, taking its total user base to 35.52 crore.
As on September 30, 2019, Vodafone Idea had a subscriber market share of 31.73 per cent, Reliance Jio had a market share of 30.26 per cent, and Bharti Airtel of 27.74 per cent.
State-run MTNL saw 8,717 users move out (33.93 lakh user base), while BSNL added 7.37 lakh users to take its total base to 11.69 crore.
The wireless teledensity in India increased from 88.77 at the end of August to 88.90 at the end of September, Trai said.


Rectangles
问题描述 :
There is a big N * M rectangle consists of N * M unit squares, and each unit square has an integer value 0 or 1 on it. N and M may be very large, but the number of unit squares which have value 1 on it, is not more than 100.
You task is to calculate how many different rectangles (which consist of some complete unit squares) satisfy that the values on its unit squares are all 0.
We say two rectangles are different if and only if they have different size or they are in different location.
You task is to calculate how many different rectangles (which consist of some complete unit squares) satisfy that the values on its unit squares are all 0.
We say two rectangles are different if and only if they have different size or they are in different location.
输入:
There is an integer T (1 <= T <= 200) in the first line, which indicates that there are T test cases in total.
For each test case, there are three integers N (1 <= N <=<PHONE_NUMBER>), M (1 <= M <=<PHONE_NUMBER>), K (0 <= K <= 100, K <= N * M). N and M have the same meanings as above. K means there are exactly K unit squares which have value 1 on it, surely that the other unit squares have value 0 on it. Then there are following K lines and each line has two integer x (1 <= x <= N), y (1 <= y <= M), means that the unit square in row x and column y has value 1 on it. You can assume that no two pairs of x and y are the same.
There are at most 10 test cases that satisfy N > 100 or M > 100 or K > 15.
For each test case, there are three integers N (1 <= N <=<PHONE_NUMBER>), M (1 <= M <=<PHONE_NUMBER>), K (0 <= K <= 100, K <= N * M). N and M have the same meanings as above. K means there are exactly K unit squares which have value 1 on it, surely that the other unit squares have value 0 on it. Then there are following K lines and each line has two integer x (1 <= x <= N), y (1 <= y <= M), means that the unit square in row x and column y has value 1 on it. You can assume that no two pairs of x and y are the same.
There are at most 10 test cases that satisfy N > 100 or M > 100 or K > 15.
输出:
There is an integer T (1 <= T <= 200) in the first line, which indicates that there are T test cases in total.
For each test case, there are three integers N (1 <= N <=<PHONE_NUMBER>), M (1 <= M <=<PHONE_NUMBER>), K (0 <= K <= 100, K <= N * M). N and M have the same meanings as above. K means there are exactly K unit squares which have value 1 on it, surely that the other unit squares have value 0 on it. Then there are following K lines and each line has two integer x (1 <= x <= N), y (1 <= y <= M), means that the unit square in row x and column y has value 1 on it. You can assume that no two pairs of x and y are the same.
There are at most 10 test cases that satisfy N > 100 or M > 100 or K > 15.
For each test case, there are three integers N (1 <= N <=<PHONE_NUMBER>), M (1 <= M <=<PHONE_NUMBER>), K (0 <= K <= 100, K <= N * M). N and M have the same meanings as above. K means there are exactly K unit squares which have value 1 on it, surely that the other unit squares have value 0 on it. Then there are following K lines and each line has two integer x (1 <= x <= N), y (1 <= y <= M), means that the unit square in row x and column y has value 1 on it. You can assume that no two pairs of x and y are the same.
There are at most 10 test cases that satisfy N > 100 or M > 100 or K > 15.
样例输入:
3 1 1 0 2 2 0 2 3 2 1 1 2 3
样例输出:
1 9 7HintFor Sample 3, the yellow unit squares in Figure 1 show you the 7 rectangles.
题意：根据给定的垂直和水平的线段，求能组成的矩形有多少个。
题解：因为题目给的只有垂直和水平的线段，且总线段不超过100.所以我们可以暴力。
1、任选两根水平的线段，若无水平线段可选，结束。否则，转2
2、从所有的垂直线段里，找到和这两根水平线段相交的线段，假设有tmp条。转3
3、对于1步选的两条水平线段，因为有tmp跟垂直线段与其相交，根据推算，可以得知，其能组成的矩形就是（tmp – 1）*tmp / 2 个，将其加进总和里即可。转1
代码：
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAX_ = 101; typedef long long LL; struct line { int x[2],y[2]; } hor[MAX_], ver[MAX_]; int ans; int main() { int Case, n, h,v, tmp, maxh,minh, maxv,minv; int x1,y1,x2,y2; scanf("%d",&Case); while(Case--) { scanf("%d",&n); ans = 0; h = v = 0; for(int i = 0; i < n; i++) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); if(y1 == y2) { hor[h].x[0] = min(x1,x2); hor[h].y[0] = y1; hor[h].x[1] = max(x1,x2); hor[h++].y[1] = y2; } else { ver[v].x[0] = x1; ver[v].y[0] = min(y1,y2); ver[v].x[1] = x2; ver[v++].y[1] = max(y1,y2); } } for(int i = 0; i < h - 1; i++) { for(int j = i+1; j < h; j++) { if(hor[i].x[1] < hor[j].x[0] || hor[i].y[0] == hor[j].y[0]) { continue; } maxh = min(hor[i].x[1], hor[j].x[1]); minh = max(hor[i].x[0], hor[j].x[0]); maxv = max(hor[i].y[0], hor[j].y[0]); minv = min(hor[i].y[0], hor[j].y[0]); tmp = 0; for(int k = 0; k < v; k++) { if(ver[k].x[0] >= minh && ver[k].x[0] <= maxh && ver[k].y[0] <= minv && ver[k].y[1] >= maxv){ tmp++; } } ans += (tmp - 1) * tmp /2; } } printf("%d\n",ans); } return 0; }
版权声明：本文为博主原创文章，未经博主允许不得转载。
参考：http://blog.csdn.net/ljd4305/article/details/12234583
(adsbygoogle = window.adsbygoogle || []).push({});
233333


This is a choropleth map depicting the median age of males by county in the State of Oregon. There is not a large spatial pattern being exhibited. However, there is a slight trend of lower ages near the metropolitan areas of the state.
This is a proportional symbol map depicting the number of Professional/Scientific employees by county in the state of Oregon. The larger circles in the NW region of the state are near where Portland and other larger cities are. Going south from there are major university towns of Corvalis and Eugene, which is where Oregon State University and University of Oregon are located, respectively.
This is a bivariate choropleth map depicting the relationship between median household income and percentage of white population. There is a general spatial pattern showing higher median income levels in the metropolitan areas, with lower values in rural areas. There are also lower levels of white population in the metropolitan areas, but they do not mirror exactly the distribution seen with income levels.
This is an isarithmic map depicting precipitation amounts in Iowa.
This is a small multiples choropleth map showing where there are concentrations of different groups in Multnomah County Oregon.
Final Project consisting of a series of animated choropleth maps showing spatial and temporal climate trends in Iowa.


Match Play. Red leads White 5-2 to 7. How should Red play 66?
pips Red=139 White=100
(CorrectAnswer= 0/0, ErrorScore= 0)
After this roll Red no longer has the timing to hold his 2-pt game and must therefore play 23/17(2) with two sixes.
Those two checkers can be slight hindrance to White, especially if he rolls 33! 23/17(2), 13/7, 8/2 are 23/17(2), 13/7(2) are tied as the best play. I actually played 23/11(2) and won the race with ease!
Those two checkers can be slight hindrance to White, especially if he rolls 33! 23/17(2), 13/7, 8/2 are 23/17(2), 13/7(2) are tied as the best play. I actually played 23/11(2) and won the race with ease!
1. Cubeful 2-ply 23/17(2) 13/7(2) Eq.: -0.617 0.194 0.001 0.000 - 0.806 0.004 0.000 2. Cubeful 2-ply 23/17(2) 13/7 8/2 Eq.: -0.627 (-0.009) 0.190 0.001 0.000 - 0.810 0.005 0.000 3. Cubeful 2-ply 23/17(2) 13/1 Eq.: -0.637 (-0.019) 0.186 0.001 0.000 - 0.814 0.006 0.000 4. Cubeful 2-ply 23/11(2) Eq.: -0.639 (-0.022) 0.180 0.000 0.000 - 0.820 0.000 0.000 5. Cubeful 2-ply 23/17(2) 8/2 7/1 Eq.: -0.639 (-0.022) 0.184 0.001 0.000 - 0.816 0.006 0.000


Baking a cake is a very fun activity. It is very easy and requires no experience.
Click me to get started!


|
| MobileDragon based game is supposed have access to
it’s persistent resources like images, sounds, 3d models and user’s custom
data files. MobileDragon way is to store all those files compressed in
single packed file. Such a file can be created using supplied command-line
utility packdir.exe Access to this compressed storage provided through PackDir class interface. Instance of PackDir object is created by the MobileDragon core, it opens the compressed storage file and prepares it for reading, and pointer to that PackDir instance is stored in the system object, all this is done before MDGame::Init() method is called. Name of the packdir file to open is set in MDGamePreferences structure [ see MobileDragon Basic Application Structure] . Working with this packed resource is very simple. API allows you to check if there is specified file in packdir, allows to determine that file size and to load that whole file into memory. Suppose you have mdragon::System * system variable pointing to valid MobileDragon system object therefore you can obtain pointer to PackDir object by calling PackDir * pd = system->GetPackDir(); Let’s for example load the file “data.bin” from the PackDir //
Obtain pointer to the PackDir object //
Determine that file size, allocate memory for it and load. /* ... some data processing stuff here */ //release
memory
/* ... some data processing stuff here */
packdir utility packs directory contents including subdirectories.
To load file “sample.txt” residing in subdirectory “dir” you need supply
it’s full name The Resource class represents a binary resource in memory. Using it simplifies parsing your binary data, it allow simple retrieving of data of all basic numeric types and string. Note that you must use this API only when loading your custom data files, all MobileDragon objects like Sound, Music, Image, Texture, etc. loaders interrogate with PackDir themselves.
Copyright 2005-2006 Herocraft Hitech Co. Ltd. |


Hockey-Scraper¶
Contents¶
Purpose¶
This package is designed to allow people to scrape the Play by Play and Shift data off of the National Hockey League (NHL) API and website for all preseason, regular season, and playoff games since the 2007-2008 season.
Prerequisites¶
You are going to need to have python installed for this. This should work for both python 2.7 and 3 (I recommend having from at least version 3.6.0 but earlier versions should be fine).
If you don’t have python installed on your machine, I’d recommend installing it through the anaconda distribution.
Installation¶
To install all you need to do is open up your terminal and type in:
pip install hockey_scraper
Usage¶
Scrape data on a season by season level:
import hockey_scraper
# Scrapes the 2015 & 2016 season with shifts and stores the data in a Csv file
hockey_scraper.scrape_seasons([2015, 2016], True)
# Scrapes the 2008 season without shifts and returns a dictionary containing the pbp Pandas DataFrame
scraped_data = hockey_scraper.scrape_seasons([2008], False, data_format='Pandas')
Scrape a list of games:
import hockey_scraper
# Scrapes the first game of 2014, 2015, and 2016 seasons with shifts and stores the data in a Csv file
hockey_scraper.scrape_games([2014020001,<PHONE_NUMBER>,<PHONE_NUMBER>], True)
# Scrapes the first game of 2007, 2008, and 2009 seasons with shifts and returns a Dictionary with the Pandas DataFrames
scraped_data = hockey_scraper.scrape_games([2007020001,<PHONE_NUMBER>,<PHONE_NUMBER>], True, data_format='Pandas')
Scrape all games in a given date range:
import hockey_scraper
# Scrapes all games between 2016-10-10 and 2016-10-20 without shifts and stores the data in a Csv file
hockey_scraper.scrape_date_range('2016-10-10', '2016-10-20', False)
# Scrapes all games between 2015-1-1 and 2015-1-15 without shifts and returns a Dictionary with the pbp Pandas DataFrame
scraped_data = hockey_scraper.scrape_date_range('2015-1-1', '2015-1-15', False, data_format='Pandas')
The dictionary returned by setting the default argument “data_format” equal to “Pandas” is structured like:
{
# Both of these are always included
'pbp': pbp_df,
'errors': scraping_errors,
# This is only included when the argument 'if_scrape_shifts' is set equal to True
'shifts': shifts_df
}
Scraped files can also be saved in a separate directory if wanted. This allows one to re-scrape games quicker as we don’t need to retrieve them. This is done by specifying the keyword argument ‘docs_dir’ with the directory you want the files deposited in (it must exist beforehand).
import hockey_scraper
# Path to the given directory
USER_PATH = /....
# Scrapes the 2015 & 2016 season with shifts and stores the data in a Csv file
# Also includes a path for an existing directory for the scraped files to be placed in or retrieved from.
hockey_scraper.scrape_seasons([2015, 2016], True, docs_dir=USER_PATH)
# Once could chose to re-scrape previously saved files by making the keyword argument rescrape=True
hockey_scraper.scrape_seasons([2015, 2016], True, docs_dir=USER_PATH, rescrape=True)
The full documentation can be found here.
Contact¶
Please contact me for any issues or suggestions. For any bugs or anything related to the code please open an issue. Otherwise you can email me at Harryshomer@gmail.com.