Landing Page
Special Projects
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.
12/6/2018
It’s almost the end of the year, which means it’s time to start thinking about the best movies of 2018. The year was big for studio blockbusters, and the quality in the superhero genre improved dramatically. Though there weren’t many standouts from 2018, it’s still good to reflect on the movies that made us cheer.
Before we get into the list, here are some things to keep in mind: I did not include movies I haven’t seen. That includes Bo Burnham’s Eighth Grade and Luca Guadagnino's remake of Suspiria. As of publishing time, Alfonso Cuarón’s Roma and Mary Poppins Returns starring Emily Blunt and Lin-Manuel Miranda have not been released.
So, with that in mind, here are the best films of 2018 so far:
Riley Scott | ILLUSTRATION
Hereditary was hailed as one of the best horror movies of recent times and for good reason. The film starts at a high level of intensity but still finds ways to take it up a couple notches. Though it’s not the best horror film to come out this year — stay tuned for number three on this list — the effects and weird plot make it memorable. Hereditary is sure to gain a cult following that will watch it for years to come.
Call Me By Your Name gave us Timothée Chalamet, and for that we are so thankful. But the film set in Italy presented a beautiful coming-of-age story centered around Elio (Chalamet)’s relationship with an older man. The film is tender and beautiful to watch, and was nominated for four Academy Awards.
Pixar fans waited 14 years for the follow-up to 2004’s The Incredibles. The film picked up right where the first left off, but it had a more modern approach. Instead of Mr. Incredible taking the top-notch job saving the world, it’s Elastigirl's turn. The film has a lot of nuances about what it’s like to be a man and a woman in the current age. There are even some political jabs in the movie, making it a more-than-average, sophisticated animated film.
Chalamet makes another appearance, but this film is far from romantic. Beautiful Boy tells the true story of Nic Sheff (Chalamet) and his methamphetamine addiction. Steve Carell assumes the role of his dad and provides another perspective on the country’s drug epidemic. The performances from Chalamet and Carell make the film one of the best of the year.
Black Panther was the box office hit of the year, accumulating more than $700 million in the U.S. Marvel has brought depth to superhero movies, and this origin story is no different. The film marks the first superhero film to showcase a predominantly black cast, but it also features a slew of strong, complex female characters. Black Panther also had one of the most complex villains to date. Killmonger (Michael B. Jordan)’s internal struggles were evident, and some audiences even wanted to see him succeed. Black Panther shows how commercial success does not equal a shallow movie.
Spike Lee is known for making socially conscious movies, and BlackKklansman is no different.  What makes BlackKklansman stand out is the complexities of the story. Lee doesn’t present one side to the story — he shows conversations and different perspectives in a beautiful and gut-wrenching way that will make every viewer think about what they just watched.
John Krasinski’s directorial debut was a showstopper. He created a film that employs one of the most effective horror film techniques: silence. The film starring his real life wife, Emily Blunt, was not only a treat for avid horror film watchers, but also for people who just love movies. The film has a beautiful story and it keeps it simple. But a lot of its success has to be given to Krasinski, who defied expectations.
Infinity War was the spectacle everyone was waiting for, and though the special effects didn’t disappoint, there was more to the film than just fighting. Similar to Black Panther, the latest installment in the Avengers franchise has a complex villain who battles with himself. The die hard Marvel fans shed tears as the characters they know and love fought their final battles. It takes a lot to craft a series of films that allow audiences to attach to them, but it takes even more to accomplish that effect with superhero films.
Bradley Cooper is another established actor who had his directorial debut this year, and man was it great. But that’s not all people are talking about with A Star Is Born. The film marked Lady Gaga’s first feature role, and there’s talk that she’s a shoo-in to take home the Best Actress statue at the Academy Awards. The performances from Cooper and Gaga make the film a great movie, but the story about how toxic fame can be is what pushes the film to another level. A Star Is Born is a near-flawless movie and one everyone should see.
Landing Page
This story is part of a series of specially designed stories that represents some of the best journalism The Post has to offer. Check out the rest of the special projects here.


This area shows the list of files for which the Ignore option has been selected in the Resolve Changelist Conflict dialog or in the editor stripe.


Fork / Contribute
LevelGraph
Playground
a graph database for Node.js and browsers
Input:
JSON-LD
N3/Turtle
Output:
JSON-LD
N3/Turtle
base
overwrite
put
delete
put
Load From Results
Load From Results
Triples
{{table.length}}
subject
predicate
object
empty
Filter
Add
{{spo.subject}}
{{spo.predicate}}
{{spo.object}}


--- layout: project title: Specifying and Synthesizing Human-Robot Object Handovers shorttitle: Specifying and Synthesizing Human-Robot Object Handovers location: Cornell University, USA type: robotics image: hr_handover_alap_1.png category: projects published: true year: 2018 duration: January 2018 - November 2019 collaborators: Alap Kshirsagar (Cornell), Hadas Kress-Gazit (Cornell), and Guy Hoffman (Cornell). --- {% include JB/setup %}
In this project, we investigate human-robot handover controllers that are automatically synthesized from high-level specifications. In contrast to existing controllers, this approach can provide formal guarantees on the timing of each of the handover phases. Using synthesis also allows end-users to specify and dynamically change the robot’s behaviors using high-level requirements of goals and constraints rather than by tuning low-level controller parameters.


number_chars/2
number_chars/2 – convert between a number and the list of characters which represent the
number
number_codes/2 – convert between a number and the list of character codes which represent
the number
FORMS
number_chars(Number,CharList)
number_codes(Number,CodeList)
DESCRIPTION
If CharList is bound to a list of characters then it is parsed according to the syntax
rules for numbers. Should the parse be successful, the resulting value is
unified with Number in a call to number_chars/2.
If CodeList is bound to a list of character codes then it is is parsed according to the
syntax rules for numbers. Should the parse be successful, the resulting value
is unified with Number in a call to number_codes/2.
In Number is bound to a number in either number_chars/2 (or number_codes/2), after first ascertaining that CharList (or CodeList) is bound to a ground list, then CharList (or CodeList) will be bound to a list of characters (character codes) that would result as
output from write_canonical(Number).
EXAMPLES
?- number_chars(-2.3,L).
L = [-,'2',.,'3']
yes.
?- number_codes(N,"123").
N = 123
yes.
?- number_codes(N,"<PHONE_NUMBER>0000000").
N = 123.4
yes.
?- number_chars(123.4,['1',A,B,.,C]).
A = '2'
B = '3'
C = '4'
yes.
?- number_codes(N,"0xffe").
N = 4094
yes.
?- number_codes(N,"foobar").
Error: Syntax error.
- Goal: builtins:number_codes(_A,"foobar")
- Throw pattern: error(syntax_error,[builtins:number_codes(_A,*)])
ERRORS
Number and CharList are variables (number_chars/3)
––––> instantiation_error.
Number and CodeList are variables (number_codes/3)
––––> instantiation_error.
Number is neither a number nor a variable
––––> type_error(number,Number)
CharList is neither a variable nor a list of characters
––––> domain_error(character_list,List)
CodeList is neither a variable nor a list of character codes
––––> domain_error(character_code_list,List)
CharList (or CodeList) is not parsable as a number
––––> syntax_error
SEE ALSO
read_term/3, write_canonical/2.


Home
Profile
Settings
Login
Dashboard
(current)
Orders
Laboratory
Inventory
Shipments
Reports
Support
Saved reports
Current month
Last quarter
Team engagement
Year-end production
Manufacturing Dashboard
Real-Time View


Fetured Items
Shop for items based on what we featured in this week
THE BRAND
OF LUXERIOUS FASHION
Shop for items based on what we featured in this week
Free Delivery
Worldwide delivery on all. Authorit tively morph next-generation innov tion with extensive models.
Sales & discounts
Worldwide delivery on all. Authorit tively morph next-generation innov tion with extensive models.
Quality assurance
Worldwide delivery on all. Authorit tively morph next-generation innov tion with extensive models.
Subscribe
FOR OUR NEWLETTER AND PROMOTION


Yes, but can Liberals batter down doors anymore?
Last night, dealing with a bought of insomnia, I read this important take on BoJo (not to be confused with BoJack) and the conservative wave sweeping across not just the UK but most of the world. While there might be a few points of contention, I think overall it was a good state of the union on liberalism and what I like to think is a bit of a disease among educated liberals: the refusal and lack of confidence in pushing our agenda.
* * *
Born at the tail end of the Berlin Wall and the Soviet Union, my generation was very liberal and expected the generations that followed us to be even more so. The online communities where we came of age were incredibly inclusive, liberal, and "woke". And yet, woke culture itself overextended and exposed the flanks, leading to the almost unthinkable scenario of an incredibly right-leaning younger generation, and the liberal and free thinking communities of our youth turned to the right as a reaction to the seeming authoritarianism of the new left.
The yoofs were also very much multiculturally aware, having grown up with access to different lived experiences via the internet, and very much sensitive to what it saw as liberal intolerances of differing opinions, as well as seeming mollycoddling of the more bigoted minorities within minorities. To the kids growing up on Gangam Style, it was no longer western values at stake but an overarching global value structure1 which was threatened not by the traditional scapegoat of crusty and rich old conservatives2, but by increasingly intolerant, tone deaf, preachy ivory tower PC liberals.
* * *
Long story short: Even though there is a lot of hope left in the world and its youth (in the form of e.g. Greta Thunberg, CAA protestors in Indian universities, and the younger remain voters at the Brexit polls), it is still disheartening to see some in such an educated and informed generation turn towards reactionism over progressivism.
For the libs, it is time to regroup and look inward. We must reflect on the past decade, the victories (MARRIAGE EQUALITY!) and the bitter defeats, and consider what we value the most, what our core inviolable principles are. Lines might have to be drawn where our usual support for personal preferences and freedoms infringe on the rights of the other and the collective3. It is time to raise those voices in battle cries, as the rich keep becoming richer, and use their money and influence to sow division among the working man to further their own ends. We don't have much time—the greed of our race has set the planet on fire. The rich will burrow underneath and survive, but what of us poor proles?
* * *
It is time to step away from books and back into society. It's time to make welfare great again, fight for unionisation and the rights of the worker and the downtrodden. Come to the understanding that humanity isn't perfect, but that we must struggle to make this planet and our society better, more equitable and more inclusive.
It's time to bring back civil discourse, please, and thank you. No one likes being talked down to, or being called racist because they were simply well-meaning but ignorant. Bring back the humanity, bring back the fight, bring back Travellers on the Discovery Channel. Shout from the rooftops how awesome science is, and how excited we are about exploring outer space, reforesting our planet, or curing disease. Stand against bigotry, while also acknowledging that bigotry is bigotry regardless of the source. As the great Imtiaz Bakeer Markar once said:
Think not in terms of who is right and who is wrong, but what is right and what is wrong.
-
I would argue this dates back to enlightenment thinking and classical liberalism. ↩
-
Still very much the actual villain—see Prince Andrew. ↩
-
I personally do not believe it is a zero sum game. Living in a republic is based on a social contract, and some individualistic excesses might have to be forgone in the service of cohesion. ↩


visible nodes: 0
Rewriting
potree
point cloud renderer from scratch using
three.js
Orbit Controls:
left mouse button: rotate object
right mouse button: pan the screen
scrool wheel: zoom in and out


|
Panda3D
|
Physics don't get much higher-level than this. More...
Public Member Functions | |
| __init__ () | |
| Default Constructor. More... | |
| __init__ (const PhysicsManager) | |
| addAngularForce (AngularForce f) | |
| Adds a global angular force to the physics manager. More... | |
| addLinearForce (LinearForce f) | |
| Adds a global linear force to the physics manager. More... | |
| attachAngularIntegrator (AngularIntegrator i) | |
| Hooks an angular integrator into the manager. More... | |
| attachLinearIntegrator (LinearIntegrator i) | |
| Hooks a linear integrator into the manager. More... | |
| attachPhysical (Physical p) | |
| Registers a Physical class with the manager. More... | |
| attachPhysicalnode (PhysicalNode p) | |
| Please call attach_physical_node instead. More... | |
| attachPhysicalNode (PhysicalNode p) | |
| Registers a physicalnode with the manager. More... | |
| clearAngularForces () | |
| Resets the physics manager force vector. More... | |
| clearLinearForces () | |
| Resets the physics manager force vector. More... | |
| clearPhysicals () | |
| Resets the physics manager objects vector. More... | |
| debugOutput (Ostream out, int indent) | |
| Write a string representation of this instance to <out>. More... | |
| doPhysics (float dt) | |
| This is the main high-level API call. More... | |
| doPhysics (float dt, Physical p) | |
| This is the main high-level API call. More... | |
| float | getViscosity () |
| Get the global viscosity. More... | |
| initRandomSeed () | |
| One-time config function, sets up the random seed used by the physics and particle systems. More... | |
| output (Ostream out) | |
| Write a string representation of this instance to <out>. More... | |
| removeAngularForce (AngularForce f) | |
| takes an angular force out of the physics list More... | |
| removeLinearForce (LinearForce f) | |
| takes a linear force out of the physics list More... | |
| removePhysical (Physical p) | |
| takes a physical out of the object list More... | |
| removePhysicalNode (PhysicalNode p) | |
| Removes a physicalnode from the manager. More... | |
| setViscosity (float viscosity) | |
| Set the global viscosity. More... | |
| write (Ostream out, int indent) | |
| Write a string representation of this instance to <out>. More... | |
| writeAngularForces (Ostream out, int indent) | |
| Write a string representation of this instance to <out>. More... | |
| writeLinearForces (Ostream out, int indent) | |
| Write a string representation of this instance to <out>. More... | |
| writePhysicals (Ostream out, int indent) | |
| Write a string representation of this instance to <out>. More... | |
Physics don't get much higher-level than this.
Attach as many Physicals (particle systems, etc..) as you want, pick an integrator and go.
| __init__ | ( | ) |
Default Constructor.
NOTE: EulerIntegrator is the standard default.
| __init__ | ( | const | PhysicsManager | ) |
| addAngularForce | ( | AngularForce | f | ) |
Adds a global angular force to the physics manager.
| addLinearForce | ( | LinearForce | f | ) |
Adds a global linear force to the physics manager.
| attachAngularIntegrator | ( | AngularIntegrator | i | ) |
Hooks an angular integrator into the manager.
| attachLinearIntegrator | ( | LinearIntegrator | i | ) |
Hooks a linear integrator into the manager.
| attachPhysicalnode | ( | PhysicalNode | p | ) |
Please call attach_physical_node instead.
| attachPhysicalNode | ( | PhysicalNode | p | ) |
Registers a physicalnode with the manager.
| clearAngularForces | ( | ) |
Resets the physics manager force vector.
| clearLinearForces | ( | ) |
Resets the physics manager force vector.
| clearPhysicals | ( | ) |
Resets the physics manager objects vector.
| debugOutput | ( | Ostream | out, |
| int | indent | ||
| ) |
Write a string representation of this instance to <out>.
| doPhysics | ( | float | dt | ) |
This is the main high-level API call.
Performs integration on every attached Physical.
| doPhysics | ( | float | dt, |
| Physical | p | ||
| ) |
This is the main high-level API call.
Performs integration on a single physical. Make sure its associated forces are active.
| float getViscosity | ( | ) |
Get the global viscosity.
| initRandomSeed | ( | ) |
One-time config function, sets up the random seed used by the physics and particle systems.
For synchronizing across distributed computers
| output | ( | Ostream | out | ) |
Write a string representation of this instance to <out>.
| removeAngularForce | ( | AngularForce | f | ) |
takes an angular force out of the physics list
| removeLinearForce | ( | LinearForce | f | ) |
takes a linear force out of the physics list
| removePhysical | ( | Physical | p | ) |
takes a physical out of the object list
| removePhysicalNode | ( | PhysicalNode | p | ) |
Removes a physicalnode from the manager.
| setViscosity | ( | float | viscosity | ) |
Set the global viscosity.
| write | ( | Ostream | out, |
| int | indent | ||
| ) |
Write a string representation of this instance to <out>.
| writeAngularForces | ( | Ostream | out, |
| int | indent | ||
| ) |
Write a string representation of this instance to <out>.
| writeLinearForces | ( | Ostream | out, |
| int | indent | ||
| ) |
Write a string representation of this instance to <out>.
| writePhysicals | ( | Ostream | out, |
| int | indent | ||
| ) |
Write a string representation of this instance to <out>.


An ALUOp is an arithmetic or logic operation.
type ALUOp uint16
ALU binary operation types.
const ( ALUOpAdd ALUOp = iota << 4 ALUOpSub ALUOpMul ALUOpDiv ALUOpOr ALUOpAnd ALUOpShiftLeft ALUOpShiftRight ALUOpMod ALUOpXor )
ALUOpConstant executes A = A <Op> Val.
type ALUOpConstant struct { Op ALUOp Val uint32 }
func (a ALUOpConstant) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a ALUOpConstant) String() string
String returns the instruction in assembler notation.
ALUOpX executes A = A <Op> X
type ALUOpX struct { Op ALUOp }
func (a ALUOpX) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a ALUOpX) String() string
String returns the instruction in assembler notation.
An Extension is a function call provided by the kernel that performs advanced operations that are expensive or impossible within the BPF virtual machine.
Extensions are only implemented by the Linux kernel.
TODO: should we prune this list? Some of these extensions seem either broken or near-impossible to use correctly, whereas other (len, random, ifindex) are quite useful.
type Extension int
Extension functions available in the Linux kernel.
const ( // ExtLen returns the length of the packet. ExtLen Extension = 1 // ExtProto returns the packet's L3 protocol type. ExtProto Extension = 0 // ExtType returns the packet's type (skb->pkt_type in the kernel) // // TODO: better documentation. How nice an API do we want to // provide for these esoteric extensions? ExtType Extension = 4 // ExtPayloadOffset returns the offset of the packet payload, or // the first protocol header that the kernel does not know how to // parse. ExtPayloadOffset Extension = 52 // ExtInterfaceIndex returns the index of the interface on which // the packet was received. ExtInterfaceIndex Extension = 8 // ExtNetlinkAttr returns the netlink attribute of type X at // offset A. ExtNetlinkAttr Extension = 12 // ExtNetlinkAttrNested returns the nested netlink attribute of // type X at offset A. ExtNetlinkAttrNested Extension = 16 // ExtMark returns the packet's mark value. ExtMark Extension = 20 // ExtQueue returns the packet's assigned hardware queue. ExtQueue Extension = 24 // ExtLinkLayerType returns the packet's hardware address type // (e.g. Ethernet, Infiniband). ExtLinkLayerType Extension = 28 // ExtRXHash returns the packets receive hash. // // TODO: figure out what this rxhash actually is. ExtRXHash Extension = 32 // ExtCPUID returns the ID of the CPU processing the current // packet. ExtCPUID Extension = 36 // ExtVLANTag returns the packet's VLAN tag. ExtVLANTag Extension = 44 // ExtVLANTagPresent returns non-zero if the packet has a VLAN // tag. // // TODO: I think this might be a lie: it reads bit 0x1000 of the // VLAN header, which changed meaning in recent revisions of the // spec - this extension may now return meaningless information. ExtVLANTagPresent Extension = 48 // ExtVLANProto returns 0x8100 if the frame has a VLAN header, // 0x88a8 if the frame has a "Q-in-Q" double VLAN header, or some // other value if no VLAN information is present. ExtVLANProto Extension = 60 // ExtRand returns a uniformly random uint32. ExtRand Extension = 56 )
An Instruction is one instruction executed by the BPF virtual machine.
type Instruction interface { // Assemble assembles the Instruction into a RawInstruction. Assemble() (RawInstruction, error) }
func Disassemble(raw []RawInstruction) (insts []Instruction, allDecoded bool)
Disassemble attempts to parse raw back into Instructions. Unrecognized RawInstructions are assumed to be an extension not implemented by this package, and are passed through unchanged to the output. The allDecoded value reports whether insts contains no RawInstructions.
Jump skips the following Skip instructions in the program.
type Jump struct { Skip uint32 }
func (a Jump) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a Jump) String() string
String returns the instruction in assembler notation.
JumpIf skips the following Skip instructions in the program if A <Cond> Val is true.
type JumpIf struct { Cond JumpTest Val uint32 SkipTrue uint8 SkipFalse uint8 }
func (a JumpIf) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a JumpIf) String() string
String returns the instruction in assembler notation.
JumpIfX skips the following Skip instructions in the program if A <Cond> X is true.
type JumpIfX struct { Cond JumpTest SkipTrue uint8 SkipFalse uint8 }
func (a JumpIfX) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a JumpIfX) String() string
String returns the instruction in assembler notation.
A JumpTest is a comparison operator used in conditional jumps.
type JumpTest uint16
Supported operators for conditional jumps. K can be RegX for JumpIfX
const ( // K == A JumpEqual JumpTest = iota // K != A JumpNotEqual // K > A JumpGreaterThan // K < A JumpLessThan // K >= A JumpGreaterOrEqual // K <= A JumpLessOrEqual // K & A != 0 JumpBitsSet // K & A == 0 JumpBitsNotSet )
LoadAbsolute loads packet[Off:Off+Size] as an integer value into register A.
type LoadAbsolute struct { Off uint32 Size int // 1, 2 or 4 }
func (a LoadAbsolute) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a LoadAbsolute) String() string
String returns the instruction in assembler notation.
LoadConstant loads Val into register Dst.
type LoadConstant struct { Dst Register Val uint32 }
func (a LoadConstant) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a LoadConstant) String() string
String returns the instruction in assembler notation.
LoadExtension invokes a linux-specific extension and stores the result in register A.
type LoadExtension struct { Num Extension }
func (a LoadExtension) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a LoadExtension) String() string
String returns the instruction in assembler notation.
LoadIndirect loads packet[X+Off:X+Off+Size] as an integer value into register A.
type LoadIndirect struct { Off uint32 Size int // 1, 2 or 4 }
func (a LoadIndirect) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a LoadIndirect) String() string
String returns the instruction in assembler notation.
LoadMemShift multiplies the first 4 bits of the byte at packet[Off] by 4 and stores the result in register X.
This instruction is mainly useful to load into X the length of an IPv4 packet header in a single instruction, rather than have to do the arithmetic on the header's first byte by hand.
type LoadMemShift struct { Off uint32 }
func (a LoadMemShift) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a LoadMemShift) String() string
String returns the instruction in assembler notation.
LoadScratch loads scratch[N] into register Dst.
type LoadScratch struct { Dst Register N int // 0-15 }
func (a LoadScratch) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a LoadScratch) String() string
String returns the instruction in assembler notation.
NegateA executes A = -A.
type NegateA struct{}
func (a NegateA) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a NegateA) String() string
String returns the instruction in assembler notation.
A RawInstruction is a raw BPF virtual machine instruction.
type RawInstruction struct { // Operation to execute. Op uint16 // For conditional jump instructions, the number of instructions // to skip if the condition is true/false. Jt uint8 Jf uint8 // Constant parameter. The meaning depends on the Op. K uint32 }
func Assemble(insts []Instruction) ([]RawInstruction, error)
Assemble converts insts into raw instructions suitable for loading into a BPF virtual machine.
Currently, no optimization is attempted, the assembled program flow is exactly as provided.
func (ri RawInstruction) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (ri RawInstruction) Disassemble() Instruction
Disassemble parses ri into an Instruction and returns it. If ri is not recognized by this package, ri itself is returned.
A Register is a register of the BPF virtual machine.
type Register uint16
const ( // RegA is the accumulator register. RegA is always the // destination register of ALU operations. RegA Register = iota // RegX is the indirection register, used by LoadIndirect // operations. RegX )
RetA exits the BPF program, returning the value of register A.
type RetA struct{}
func (a RetA) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a RetA) String() string
String returns the instruction in assembler notation.
RetConstant exits the BPF program, returning a constant value.
type RetConstant struct { Val uint32 }
func (a RetConstant) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a RetConstant) String() string
String returns the instruction in assembler notation.
A Setter is a type which can attach a compiled BPF filter to itself.
type Setter interface { SetBPF(filter []RawInstruction) error }
StoreScratch stores register Src into scratch[N].
type StoreScratch struct { Src Register N int // 0-15 }
func (a StoreScratch) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a StoreScratch) String() string
String returns the instruction in assembler notation.
TAX copies the value of register A to register X.
type TAX struct{}
func (a TAX) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a TAX) String() string
String returns the instruction in assembler notation.
TXA copies the value of register X to register A.
type TXA struct{}
func (a TXA) Assemble() (RawInstruction, error)
Assemble implements the Instruction Assemble method.
func (a TXA) String() string
String returns the instruction in assembler notation.
A VM is an emulated BPF virtual machine.
type VM struct {
// contains filtered or unexported fields
}
func NewVM(filter []Instruction) (*VM, error)
NewVM returns a new VM using the input BPF program.
▹ Example
func (v *VM) Run(in []byte) (int, error)
Run runs the VM's BPF program against the input bytes. Run returns the number of bytes accepted by the BPF program, and any errors which occurred while processing the program.


{% extends "base.html" %} {% block body %} sorry! you aren't following {{ streamer }} on twitch! go back {% endblock %}


001 /* 002 * Copyright (c) 2007-2014 Concurrent, Inc. All Rights Reserved. 003 * 004 * Project and contact information: http://www.cascading.org/ 005 * 006 * This file is part of the Cascading project. 007 * 008 * Licensed under the Apache License, Version 2.0 (the "License"); 009 * you may not use this file except in compliance with the License. 010 * You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, software 015 * distributed under the License is distributed on an "AS IS" BASIS, 016 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 017 * See the License for the specific language governing permissions and 018 * limitations under the License. 019 */ 020 021 package cascading.operation; 022 023 import cascading.flow.FlowProcess; 024 import cascading.tuple.TupleEntry; 025 026 /** 027 * An Aggregator takes the set of all values associated with a unique grouping and returns 028 * zero or more values. {@link cascading.operation.aggregator.MaxValue}, {@link cascading.operation.aggregator.MinValue}, 029 * {@link cascading.operation.aggregator.Count}, and {@link cascading.operation.aggregator.Average} are good examples. 030 * <p/> 031 * Aggregator implementations should be reentrant. There is no guarantee an Aggregator instance will be executed in a 032 * unique vm, or by a single thread. The {@link #start(cascading.flow.FlowProcess, AggregatorCall)} 033 * method provides a mechanism for maintaining a 'context' object to hold intermediate values. 034 * <p/> 035 * Note {@link TupleEntry} instances are reused internally so should not be stored. Instead use the TupleEntry or Tuple 036 * copy constructors to make safe copies. 037 * <p/> 038 * Since Aggregators can be chained, and Cascading pipelines all operation results, any Aggregators 039 * coming ahead of the current Aggregator must return a value before the {@link #complete(cascading.flow.FlowProcess, AggregatorCall)} 040 * method on this Aggregator is called. Subsequently, if any previous Aggregators return more than one Tuple result, 041 * this complete() method will be called for each Tuple emitted. 042 * <p/> 043 * Thus it is a best practice to implement a {@link Buffer} when emitting more than one, or zero Tuple results. 044 * 045 * @see AggregatorCall 046 * @see OperationCall 047 */ 048 public interface Aggregator<Context> extends Operation<Context> 049 { 050 /** 051 * Method start initializes the aggregation procedure and is called for every unique grouping. 052 * <p/> 053 * The AggregatorCall context should be initialized here if necessary. 054 * <p/> 055 * The first time this method is called for a given 'process', the AggregatorCall context will be null. This method should 056 * set a new instance of the user defined context object. When the AggregatorCall context is not null, it is up to 057 * the developer to create a new instance, or 'recycle' the given instance. If recycled, it must be re-initialized to 058 * remove any previous state/values. 059 * <p/> 060 * For example, if a Map is used to hold the intermediate data for each subsequent 061 * {@link #aggregate(cascading.flow.FlowProcess, AggregatorCall)} call, 062 * new HashMap() should be set on the AggregatorCall instance when {@link cascading.operation.AggregatorCall#getContext()} is null. 063 * On the next grouping, start() will be called again, but this time with the old Map instance. In this case, 064 * map.clear() should be invoked before returning. 065 * 066 * @param flowProcess of type FlowProcess 067 * @param aggregatorCall of type AggregatorCall 068 */ 069 void start( FlowProcess flowProcess, AggregatorCall<Context> aggregatorCall ); 070 071 /** 072 * Method aggregate is called for each {@link TupleEntry} value in the current grouping. 073 * <p/> 074 * TupleEntry entry, or entry.getTuple() should not be stored directly in the context. A copy of the tuple 075 * should be made via the {@code new Tuple( entry.getTuple() )} copy constructor. 076 * 077 * @param flowProcess of type FlowProcess 078 * @param aggregatorCall of type AggregatorCall 079 */ 080 void aggregate( FlowProcess flowProcess, AggregatorCall<Context> aggregatorCall ); 081 082 /** 083 * Method complete will be issued last after every {@link TupleEntry} has been passed to the 084 * {@link #aggregate(cascading.flow.FlowProcess, AggregatorCall)} 085 * method. Any final calculation should be completed here and passed to the outputCollector. 086 * 087 * @param flowProcess of type FlowProcess 088 * @param aggregatorCall of type AggregatorCall 089 */ 090 void complete( FlowProcess flowProcess, AggregatorCall<Context> aggregatorCall ); 091 }


14 Count Outcome Regression - Ex:
library(tidyverse)
library(haven) # read in SPSS dataset
library(furniture) # nice table1() descriptives
library(stargazer) # display nice tables: summary & regression
library(texreg) # Convert Regression Output to LaTeX or HTML Tables
library(psych) # contains some useful functions, like headTail
library(car) # Companion to Applied Regression
library(sjPlot) # Quick plots and tables for models
library(glue) # Interpreted String Literals
library(DescTools) # Tools for Descriptive Statistics
library(texreghelpr) # Helper Functions for generalized models
library(pscl) # Political Science Computational Laboratory (ZIP)
14.1 Background
This dataset comes from John Hoffman’s textbook: Regression Models for Categorical, Count, and Related Variables: An Applied Approach (2004) Amazon link, 2014 edition
14.1.1 Raw Dataset
data_gss <- haven::read_spss("https://raw.githubusercontent.com/CEHS-research/data/master/Hoffmann_datasets/gss.sav") %>%
haven::as_factor()
data_gss %>%
dplyr::select(volteer, female, nonwhite, educate, income) %>%
head()
# A tibble: 6 x 5
volteer female nonwhite educate income
<dbl> <fct> <fct> <dbl> <dbl>
1 0 female non-white 12 10
2 0 male white 17 2
3 0 female non-white 8 NA
4 1 female white 12 NA
5 1 male white 12 12
6 0 female white NA NA
14.2 Exploratory Data Analysis
14.2.1 Entire Sample
--------------------------------------
volteer Freq CumFreq Percent CumPerc
0 2376 2376 81.85% 81.85%
1 286 2662 9.85% 91.70%
2 133 2795 4.58% 96.28%
3 64 2859 2.20% 98.48%
4 19 2878 0.65% 99.14%
5 11 2889 0.38% 99.52%
6 7 2896 0.24% 99.76%
7 6 2902 0.21% 99.97%
9 1 2903 0.03% 100.00%
--------------------------------------
volteer
Min. :0.0000
1st Qu.:0.0000
Median :0.0000
Mean :0.3334
3rd Qu.:0.0000
Max. :9.0000
14.2.2 By Sex
data_gss %>%
dplyr::group_by(female) %>%
furniture::table1(factor(volteer),
digits = 4,
total = TRUE)
--------------------------------------------------------
female
Total male female
n = 2903 n = 1285 n = 1618
factor(volteer)
0 2376 (81.8%) 1057 (82.3%) 1319 (81.5%)
1 286 (9.9%) 132 (10.3%) 154 (9.5%)
2 133 (4.6%) 50 (3.9%) 83 (5.1%)
3 64 (2.2%) 26 (2%) 38 (2.3%)
4 19 (0.7%) 10 (0.8%) 9 (0.6%)
5 11 (0.4%) 4 (0.3%) 7 (0.4%)
6 7 (0.2%) 5 (0.4%) 2 (0.1%)
7 6 (0.2%) 1 (0.1%) 5 (0.3%)
9 1 (0%) 0 (0%) 1 (0.1%)
--------------------------------------------------------
data_gss %>%
dplyr::group_by(female) %>%
furniture::table1(volteer,
digits = 4,
total = TRUE,
test = TRUE)
-----------------------------------------------------------------
female
Total male female P-Value
n = 2903 n = 1285 n = 1618
volteer 0.365
0.3334 (0.8858) 0.3167 (0.8493) 0.3467 (0.9139)
-----------------------------------------------------------------
14.3 Poisson Reression
14.3.1 Single Predictor: Sex
<IP_ADDRESS> Fit the model
glm_possion_1 <- glm(volteer ~ female,
data = data_gss,
family = poisson(link = "log"))
summary(glm_possion_1)
Call:
glm(formula = volteer ~ female, family = poisson(link = "log"),
data = data_gss)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8327 -0.8327 -0.7959 -0.7959 6.4273
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.14970 0.04957 -23.19 <2e-16 ***
femalefemale 0.09048 0.06511 1.39 0.165
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 3658.1 on 2902 degrees of freedom
Residual deviance: 3656.2 on 2901 degrees of freedom
AIC: 4924.1
Number of Fisher Scoring iterations: 6
Note: The deviance residuals range as high as 6.47!!!
<IP_ADDRESS> Marginal Estimates
Note: Results are given on the log (not the response) scale
female emmean SE df asymp.LCL asymp.UCL
male -1.15 0.0496 Inf -1.25 -1.053
female -1.06 0.0422 Inf -1.14 -0.976
Results are given on the log (not the response) scale.
Confidence level used: 0.95
Note: These means are on the original scale (number of volunteer activities in the past year). These standard errors are called “delta-method standard errors”
# Hoffmann Example 6.4 (continued...)
ggeffects::ggpredict(model = glm_possion_1,
terms = c("female")) %>%
data.frame()
# A tibble: 2 x 6
x predicted std.error conf.low conf.high group
<fct> <dbl> <dbl> <dbl> <dbl> <fct>
1 male 0.317 0.0496 0.287 0.349 1
2 female 0.347 0.0422 0.319 0.377 1
<IP_ADDRESS> Pairwise Post Hoc Test
contrast estimate SE df z.ratio p.value
male - female -0.0905 0.0651 Inf -1.390 0.1647
Results are given on the log (not the response) scale.
<IP_ADDRESS> Parameter Estimates
Coefficients are in terms of the LOG of the number of times a person volunteers per year.
(Intercept) femalefemale
-1.14970081 0.09047562
Exponentiating the coefficients (betas) returns the values to the original scale (number of times a person volunteers per year) and is refered to as the incident rate ratio IRR.
(Intercept) femalefemale
0.3167315 1.0946948
# Hoffmann Example 6.4
texreg::knitreg(list(glm_possion_1,
texreghelpr::extract_glm_exp(glm_possion_1,
include.aic = FALSE,
include.bic = FALSE,
include.loglik = FALSE,
include.deviance = FALSE,
include.nobs = FALSE)),
custom.model.names = c("b (SE)", "RR [95% CI]"),
custom.coef.map = list("(Intercept)" ="Intercept",
femalefemale = "Female vs. Male"),
caption = "GLM: Simple Possion Regression",
single.row = TRUE,
digits = 3)
| b (SE) | RR [95% CI] | |
|---|---|---|
| Intercept | -1.150 (0.050)*** | 0.317 [0.287; 0.349]* |
| Female vs. Male | 0.090 (0.065) | 1.095 [0.964; 1.244]* |
| AIC | 4924.135 | |
| BIC | 4936.082 | |
| Log Likelihood | -2460.068 | |
| Deviance | 3656.198 | |
| Num. obs. | 2903 | |
| p < 0.001; p < 0.01; p < 0.05 (or Null hypothesis value outside the confidence interval). |
14.3.2 Multiple Predictors
<IP_ADDRESS> Fit the model
# Hoffmann Example 6.5
glm_possion_2 <- glm(volteer ~ female + nonwhite + educate + income,
data = data_gss,
family = poisson(link = "log"))
summary(glm_possion_2)
Call:
glm(formula = volteer ~ female + nonwhite + educate + income,
family = poisson(link = "log"), data = data_gss)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.3061 -0.8864 -0.7597 -0.6064 5.8489
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.15830 0.24479 -12.902 < 2e-16 ***
femalefemale 0.26132 0.07785 3.357 0.000789 ***
nonwhitenon-white -0.28038 0.10838 -2.587 0.009681 **
educate 0.10280 0.01443 7.123 1.05e-12 ***
income 0.05683 0.01566 3.628 0.000286 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 2566.8 on 1943 degrees of freedom
Residual deviance: 2465.5 on 1939 degrees of freedom
(959 observations deleted due to missingness)
AIC: 3380.9
Number of Fisher Scoring iterations: 6
<IP_ADDRESS> Parameter Estimates
Coefficients are in terms of the LOG of the number of times a person volunteers per year.
(Intercept) femalefemale nonwhitenon-white educate
-3.15830174 0.26132182 -0.28037733 0.10280183
income
0.05682778
Exponentiating the coefficients (betas) returns the values to the original scale (number of times a person volunteers per year) and is refered to as the incident rate ratio IRR.
(Intercept) femalefemale nonwhitenon-white educate
0.04249785 1.29864553 0.75549861 1.10827176
income
1.05847350
texreg::knitreg(list(glm_possion_2,
texreghelpr::extract_glm_exp(glm_possion_2,
include.aic = FALSE,
include.bic = FALSE,
include.loglik = FALSE,
include.deviance = FALSE,
include.nobs = FALSE)),
custom.model.names = c("b (SE)", "IRR [95% CI]"),
custom.coef.map = list("(Intercept)" ="Intercept",
femalefemale = "Female vs. Male",
"nonwhitenon-white" = "Non-white vs. White",
educate = "Education, Years",
income = "Income"),
caption = "GLM: Multiple Possion Regression",
single.row = TRUE,
digits = 3)
| b (SE) | IRR [95% CI] | |
|---|---|---|
| Intercept | -3.158 (0.245)*** | 0.042 [0.026; 0.068]* |
| Female vs. Male | 0.261 (0.078)*** | 1.299 [1.115; 1.513]* |
| Non-white vs. White | -0.280 (0.108)** | 0.755 [0.608; 0.930]* |
| Education, Years | 0.103 (0.014)*** | 1.108 [1.077; 1.140]* |
| Income | 0.057 (0.016)*** | 1.058 [1.027; 1.092]* |
| AIC | 3380.860 | |
| BIC | 3408.722 | |
| Log Likelihood | -1685.430 | |
| Deviance | 2465.514 | |
| Num. obs. | 1944 | |
| p < 0.001; p < 0.01; p < 0.05 (or Null hypothesis value outside the confidence interval). |
<IP_ADDRESS> Interpretation
female
: Adjusting for the effects of rate/ethnicity, education, and income, FEMALES are expected to volunteer about 30% MORE activities per year than males, exp(b) = 1.29, p = .001.nonwhite
: Adjusting for the effects of sex, education, and income, NON-WHITES are expected to volunteer for about 24% LESS activities per year than males, exp(b) = 0.76, p = .010.educate
: Each one-year increase in education is associated with an 11% increase in the number of volunteer activities per year, adjusting for the effects of sex, race/ethnicity, and income, exp(b) = 1.11, p <.001.
<IP_ADDRESS> Predictions
Note: These means are on the original scale (number of volunteer activities in the past year). These standard errors are called “delta-method standard errors” in Stata, but they are not calculated in R.
ggeffects::ggemmeans(model = glm_possion_2,
terms = c("female"),
condition = c(nonwhite = "white",
educate = 12,
income = 5))
# A tibble: 2 x 6
x predicted std.error conf.low conf.high group
<fct> <dbl> <dbl> <dbl> <dbl> <fct>
1 male 0.194 0.109 0.157 0.240 1
2 female 0.252 0.0952 0.209 0.303 1
Interpretation: The expected number of volunteer activities among females is 31.5% higher ((0.25 - 0.19)/0.19) than among males, for white high school graduates with low income.
Note:
income
= 5 is the 10th percentile of the income distribution.
Alternative: * 0.25/0.19 = 1.315 * (1.315 - 1)x100% = 31.5%
<IP_ADDRESS> Assess Model Fit
McFadden
0.02918402
McFadden McFaddenAdj CoxSnell Nagelkerke AldrichNelson
0.029 0.026 0.051 0.061 0.050
VeallZimmermann Efron McKelveyZavoina Tjur AIC
0.077 0.020 NA NA 3380.860
BIC logLik logLik0 G2
3408.722 -1685.430 -1736.096 101.333
<IP_ADDRESS> Residual Diagnostics
These residuals do NOT look good, especially the Q-Q plot for normality.
<IP_ADDRESS> Marginal Plot
# A tibble: 2 x 8
vars n mean sd min max range se
<int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 2894 13.4 2.93 0 20 20 0.0544
2 2 1947 9.86 2.99 1 12 11 0.0677
educate income
Min. : 0.00 Min. : 1.000
1st Qu.:12.00 1st Qu.: 9.000
Median :13.00 Median :11.000
Mean :13.36 Mean : 9.862
3rd Qu.:16.00 3rd Qu.:12.000
Max. :20.00 Max. :12.000
NA's :9 NA's :956
ggeffects::ggemmeans(model = glm_possion_2,
terms = "educate",
condition = c(female = "male",
nonwhite = "white")) %>%
data.frame %>%
ggplot(aes(x = x,
y = predicted)) +
geom_line() +
labs(x = "Years of Formal Education",
y = "Predicted Number of Volunteer Activities")
effects::Effect(focal.predictors = c("female", "nonwhite", "educate", "income"),
mod = glm_possion_2,
xlevels = list(educate = seq(from = 0, to = 20, by = .1),
income = c(8, 10, 12))) %>%
data.frame() %>%
dplyr::mutate(income = factor(income) %>%
forcats::fct_recode("Lower Income (8)" = "8",
"Middle Income (10)" = "10",
"Higher Income (12)" = "12")) %>%
ggplot(aes(x = educate,
y = fit)) +
geom_ribbon(aes(ymin = fit - se, # bands = +/- 1 SEM
ymax = fit + se,
fill = female),
alpha = .2) +
geom_line(aes(linetype = female,
color = female),
size = 1) +
theme_bw() +
labs(x = "Education, Years",
y = "Predicted Mean Number of Volunteer Activities",
color = NULL,
fill = NULL,
linetype = NULL) +
theme(legend.position = c(0, 1),
legend.justification = c(-.1, 1.1),
legend.background = element_rect(color = "black"),
legend.key.width = unit(2, "cm")) +
facet_grid(nonwhite ~ income)
effects::Effect(focal.predictors = c("female", "nonwhite", "educate", "income"),
mod = glm_possion_2,
xlevels = list(educate = seq(from = 0, to = 20, by = .1),
income = c(5, 8, 12))) %>%
data.frame() %>%
dplyr::mutate(income = factor(income)) %>%
ggplot(aes(x = educate,
y = fit)) +
geom_line(aes(linetype = fct_rev(income),
color = fct_rev(income)),
size = 1) +
theme_bw() +
labs(x = "Education, Years",
y = "Predicted Mean Number of Volunteer Activities",
color = "Income:",
fill = "Income:",
linetype = "Income:") +
theme(legend.position = c(0, 1),
legend.justification = c(-.1, 1.1),
legend.background = element_rect(color = "black"),
legend.key.width = unit(2, "cm")) +
facet_grid(nonwhite ~ female) +
scale_linetype_manual(values = c("solid", "longdash", "dotted"))
effects::Effect(focal.predictors = c("female", "nonwhite", "educate", "income"),
mod = glm_possion_2,
xlevels = list(educate = seq(from = 0, to = 20, by = .1),
income = c(8, 10, 12))) %>%
data.frame() %>%
dplyr::mutate(income = factor(income) %>%
forcats::fct_recode("Lower Income (8)" = "8",
"Middle Income (10)" = "10",
"Higher Income (12)" = "12")) %>%
ggplot(aes(x = educate,
y = fit)) +
geom_ribbon(aes(ymin = fit - se, # bands = +/- 1 SEM
ymax = fit + se,
fill = nonwhite),
alpha = .2) +
geom_line(aes(linetype = nonwhite,
color = nonwhite),
size = 1) +
theme_bw() +
labs(x = "Education, Years",
y = "Predicted Mean Number of Volunteer Activities",
color = NULL,
fill = NULL,
linetype = NULL) +
theme(legend.position = c(0, .5),
legend.justification = c(-.05, 1.1),
legend.background = element_rect(color = "black"),
legend.key.width = unit(2, "cm")) +
facet_grid(female ~ income) +
scale_color_manual(values = c("darkgreen", "orange")) +
scale_fill_manual(values = c("darkgreen", "orange"))
effects::Effect(focal.predictors = c("female", "educate"),
mod = glm_possion_2,
xlevels = list(educate = seq(from = 0,
to = 20,
by = .1),
income = 11)) %>% #Median Income
data.frame() %>%
ggplot(aes(x = educate,
y = fit)) +
geom_ribbon(aes(ymin = fit - se, # bands = +/- 1 SEM
ymax = fit + se,
fill = female),
alpha = .2) +
geom_line(aes(linetype = female,
color = female),
size = 1) +
theme_bw() +
labs(x = "Education, Years",
y = "Predicted Mean Number of Volunteer Activities",
color = NULL,
fill = NULL,
linetype = NULL) +
theme(legend.position = c(0, 1),
legend.justification = c(-.1, 1.1),
legend.background = element_rect(color = "black"),
legend.key.width = unit(2, "cm"))
14.4 Negative Binomial Regression
14.4.1 Multiple Predictors
<IP_ADDRESS> Fit the model
glm_negbin_1 <- MASS::glm.nb(volteer ~ female + nonwhite + educate + income,
data = data_gss)
summary(glm_negbin_1)
Call:
MASS::glm.nb(formula = volteer ~ female + nonwhite + educate +
income, data = data_gss, init.theta = 0.2559648877, link = log)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.8798 -0.6897 -0.6141 -0.5211 2.7019
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -3.24738 0.37283 -8.710 < 2e-16 ***
femalefemale 0.28441 0.12312 2.310 0.0209 *
nonwhitenon-white -0.31107 0.16203 -1.920 0.0549 .
educate 0.11200 0.02321 4.825 1.4e-06 ***
income 0.05193 0.02264 2.293 0.0218 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for Negative Binomial(0.256) family taken to be 1)
Null deviance: 1068.5 on 1943 degrees of freedom
Residual deviance: 1024.3 on 1939 degrees of freedom
(959 observations deleted due to missingness)
AIC: 2851.6
Number of Fisher Scoring iterations: 1
Theta: 0.2560
Std. Err.: 0.0251
2 x log-likelihood: -2839.5640
Note: the deviance residuals all have absolute values less than 3-4’ish…better than before
Theta in R = 1/alpha in Stata
# Hoffmann Example 6.5
texreg::knitreg(list(glm_possion_2,
texreghelpr::extract_glm_exp(glm_possion_2,
include.aic = FALSE,
include.bic = FALSE,
include.loglik = FALSE,
include.deviance = FALSE,
include.nobs = FALSE)),
custom.model.names = c("b (SE)", "IRR [95% CI]"),
custom.coef.map = list("(Intercept)" ="Intercept",
femalefemale = "Female vs. Male",
"nonwhitenon-white" = "Non-white vs. White",
educate = "Education, years",
income = "Income, 1000's"),
caption = "GLM: Multiple Possion Regression",
single.row = TRUE,
digits = 3)
| b (SE) | IRR [95% CI] | |
|---|---|---|
| Intercept | -3.158 (0.245)*** | 0.042 [0.026; 0.068]* |
| Female vs. Male | 0.261 (0.078)*** | 1.299 [1.115; 1.513]* |
| Non-white vs. White | -0.280 (0.108)** | 0.755 [0.608; 0.930]* |
| Education, years | 0.103 (0.014)*** | 1.108 [1.077; 1.140]* |
| Income, 1000’s | 0.057 (0.016)*** | 1.058 [1.027; 1.092]* |
| AIC | 3380.860 | |
| BIC | 3408.722 | |
| Log Likelihood | -1685.430 | |
| Deviance | 2465.514 | |
| Num. obs. | 1944 | |
| p < 0.001; p < 0.01; p < 0.05 (or Null hypothesis value outside the confidence interval). |
<IP_ADDRESS> Predictions
Note: These means are on the original scale (number of volunteer activities in the past year). These standard errors are called “delta-method standard errors”
effects::Effect(focal.predictors = c("female"),
mod = glm_negbin_1,
xlevels = list(nonwhite = "non-white",
educate = 5,
income = 12)) %>%
data.frame()
# A tibble: 2 x 5
female fit se lower upper
<fct> <dbl> <dbl> <dbl> <dbl>
1 male 0.289 0.0257 0.243 0.344
2 female 0.384 0.0322 0.326 0.453
ggeffects::ggemmeans(model = glm_negbin_1,
terms = c("female"),
condition = c(nonwhite = "white",
educate = 12,
income = 5))
# A tibble: 2 x 6
x predicted std.error conf.low conf.high group
<fct> <dbl> <dbl> <dbl> <dbl> <fct>
1 male 0.193 0.157 0.142 0.263 1
2 female 0.257 0.137 0.196 0.336 1
Compare to the Poisson:
ggeffects::ggemmeans(model = glm_possion_2,
terms = c("female"),
condition = c(nonwhite = "white",
educate = 12,
income = 5))
# A tibble: 2 x 6
x predicted std.error conf.low conf.high group
<fct> <dbl> <dbl> <dbl> <dbl> <fct>
1 male 0.194 0.109 0.157 0.240 1
2 female 0.252 0.0952 0.209 0.303 1
Note: The predictions are very similar for Poisson and Negative Binomial…therefor the overdisperssion does not affect the sex difference much, but it may affect other things…
<IP_ADDRESS> Parameter Estimates
Coefficients are in terms of the LOG of the number of times a person volunteers per year.
(Intercept) femalefemale nonwhitenon-white educate
-3.24738340 0.28440826 -0.31107286 0.11199528
income
0.05193102
Exponentiating the coefficients (betas) returns the values to the original scale (number of times a person volunteers per year) and is refered to as the incident rate ratio IRR.
(Intercept) femalefemale nonwhitenon-white educate
0.0388758 1.3289754 0.7326605 1.1185076
income
1.0533031
texreg::knitreg(list(glm_negbin_1,
texreghelpr::extract_glm_exp(glm_negbin_1,
include.aic = FALSE,
include.bic = FALSE,
include.loglik = FALSE,
include.deviance = FALSE,
include.nobs = FALSE)),
custom.model.names = c("b (SE)", "IRR [95% CI]"),
custom.coef.map = list("(Intercept)" ="Intercept",
femalefemale = "Female vs. Male",
"nonwhitenon-white" = "Non-white vs. White",
educate = "Education, Years",
income = "Income"),
caption = "GLM: Negitive Binomial Regression",
single.row = TRUE,
digits = 3)
| b (SE) | IRR [95% CI] | |
|---|---|---|
| Intercept | -3.247 (0.373)*** | 0.039 [0.018; 0.081]* |
| Female vs. Male | 0.284 (0.123)* | 1.329 [1.043; 1.696]* |
| Non-white vs. White | -0.311 (0.162) | 0.733 [0.533; 1.008]* |
| Education, Years | 0.112 (0.023)*** | 1.119 [1.067; 1.173]* |
| Income | 0.052 (0.023)* | 1.053 [1.008; 1.101]* |
| AIC | 2851.564 | |
| BIC | 2884.999 | |
| Log Likelihood | -1419.782 | |
| Deviance | 1024.343 | |
| Num. obs. | 1944 | |
| p < 0.001; p < 0.01; p < 0.05 (or Null hypothesis value outside the confidence interval). |
<IP_ADDRESS> Residual Diagnostics
These still don’t look very good :(
<IP_ADDRESS> Compare models
# A tibble: 2 x 10
Model Type AIC BIC R2_Nagelkerke RMSE SCORE_LOG SCORE_SPHERICAL BF
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 glm_~ negb~ 2852. 2885. 0.0531 0.726 -0.808 0.0210 5.31e113
2 glm_~ glm 3381. 3409. 0.0693 1.13 -0.867 0.0210 1.00e 0
# ... with 1 more variable: Performance_Score <dbl>
14.5 Zero Inflated Poisson
<IP_ADDRESS> Fit the model
glm_zip_1 <- pscl::zeroinfl(volteer ~ female + nonwhite + educate + income | educate,
data = data_gss)
summary(glm_zip_1)
Call:
pscl::zeroinfl(formula = volteer ~ female + nonwhite + educate + income |
educate, data = data_gss)
Pearson residuals:
Min 1Q Median 3Q Max
-0.5778 -0.4416 -0.3908 -0.3382 9.4776
Count model coefficients (poisson with log link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.09676 0.34808 -3.151 0.00163 **
femalefemale 0.20623 0.09452 2.182 0.02912 *
nonwhitenon-white -0.20099 0.13444 -1.495 0.13491
educate 0.05649 0.02140 2.639 0.00832 **
income 0.04888 0.01882 2.597 0.00940 **
Zero-inflation model coefficients (binomial with logit link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) 2.01175 0.41193 4.884 1.04e-06 ***
educate -0.07180 0.02769 -2.594 0.0095 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Number of iterations in BFGS optimization: 12
Log-likelihood: -1434 on 7 Df
count_(Intercept) count_femalefemale count_nonwhitenon-white
0.3339504 1.2290310 0.8179193
count_educate count_income zero_(Intercept)
1.0581113 1.0500956 7.4763533
zero_educate
0.9307151
Compares two models fit to the same data that do not nest via Vuong’s non-nested test.
Vuong Non-Nested Hypothesis Test-Statistic:
(test-statistic is asymptotically distributed N(0,1) under the
null that the models are indistinguishible)
-------------------------------------------------------------
Vuong z-statistic H_A p-value
Raw 8.000316 model1 > model2 6.6613e-16
AIC-corrected 7.936582 model1 > model2 9.9920e-16
BIC-corrected 7.759003 model1 > model2 4.3299e-15
14.6 Zero Inflated Negative Binomial
<IP_ADDRESS> Fit the model
glm_zinb_1 <- pscl::zeroinfl(volteer ~ female + nonwhite + educate + income | educate,
data = data_gss,
dist = "negbin")
summary(glm_zinb_1)
Call:
pscl::zeroinfl(formula = volteer ~ female + nonwhite + educate + income |
educate, data = data_gss, dist = "negbin")
Pearson residuals:
Min 1Q Median 3Q Max
-0.5146 -0.4122 -0.3704 -0.3222 8.8088
Count model coefficients (negbin with log link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.79283 0.54745 -3.275 0.00106 **
femalefemale 0.26245 0.11745 2.235 0.02544 *
nonwhitenon-white -0.28519 0.15603 -1.828 0.06758 .
educate 0.06817 0.03317 2.055 0.03986 *
income 0.05292 0.02159 2.451 0.01426 *
Log(theta) 0.05055 0.46241 0.109 0.91295
Zero-inflation model coefficients (binomial with logit link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.28315 0.71437 1.796 0.0725 .
educate -0.07208 0.04684 -1.539 0.1239
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Theta = 1.0518
Number of iterations in BFGS optimization: 27
Log-likelihood: -1416 on 8 Df
count_(Intercept) count_femalefemale count_nonwhitenon-white
0.1664876 1.3001178 0.7518694
count_educate count_income zero_(Intercept)
1.0705453 1.0543420 3.6079992
zero_educate
0.9304589
Vuong Non-Nested Hypothesis Test-Statistic:
(test-statistic is asymptotically distributed N(0,1) under the
null that the models are indistinguishible)
-------------------------------------------------------------
Vuong z-statistic H_A p-value
Raw 1.3486684 model1 > model2 0.088722
AIC-corrected 0.5592184 model1 > model2 0.288006
BIC-corrected -1.6403877 model2 > model1 0.050462
Vuong Non-Nested Hypothesis Test-Statistic:
(test-statistic is asymptotically distributed N(0,1) under the
null that the models are indistinguishible)
-------------------------------------------------------------
Vuong z-statistic H_A p-value
Raw -2.428631 model2 > model1 0.007578
AIC-corrected -2.428631 model2 > model1 0.007578
BIC-corrected -2.428631 model2 > model1 0.007578
The ‘best’ model is the zero-inflated negative binomial


--- layout: default ---
I want to better understand the blockchain stories coming out of major tech blogs, to understand the waves of claims being made, so I am working to pull an index of all stories.
I will be adding more to this page when I have it available. Once I have everything indexed I'll started pulling company names, industries, and other relevant information.


Python
- Fitzhugh-Nagumo — Labyrinthine Patterns
- Conway’s Game of Life, acorn initial condition
- Least squares fit of nonlinear function
- Fun with histograms
- Fancy subplot grid
- Streamplot
- The time dependent Ginzburg-Landau equation
- The double pendulum
- The Hilbert curve
- A hysteresis mechanism
- Contour plot
- Least action principle on the beach
- This website’s logo
- Bars
Python is a great language for scientific computing, most of the programming done by our group is in python. We provide below some links for learning this language, and below we offer many python code examples. You are invited to download these codes, tweak with them, break them, hack them as you wish!
Most codes focus on plotting, but other algorithms such as numerical integration and Fourier transforms can also be found.
Some useful links for learning python:
- Python Data Science Handbook
- Learn Python the Hard Way
- A Crash Course in Python for Scientists
- Software Carpentry
- Fun with Lists
- Python | Codecademy
- Scipy Lecture Notes
- A gallery of interesting IPython Notebooks
- Think Python: How to Think Like a Computer Scientist
- The Python Graph Gallery
This might be overwhelming, so I suggest you to follow this:
My advice on learning Python:
— Jake VanderPlas (@jakevdp) September 10, 2017
Don't set out to "learn Python". Choose a problem you're interested in and learn to solve it with Python.
Start by downloading Anaconda, a package manager application that will help you get started with python in all platforms.
Make sure you are acquainted with ipython (interactive python, try it here), and with Jupyter notebook.
I recommend Sublime Text for writing code, and you can install the Anaconda package to it to have a smooth IDE. [not the same anaconda as mentioned above! Yes, it’s confusing, I know.]
Fitzhugh-Nagumo — Labyrinthine Patterns
Main features: how to make a movie, time-integration methods (semi-spectral and Euler)
Conway’s Game of Life, acorn initial condition
This is a (slightly) modified version of Glowing Python’s code. I make it available here because it features a few nice things:
- how to make a movie using matplotlib.animation
- how to write a generator (function with yield)
- how to plot a sparce array (spy)
Main features:
matplotlib.animation, yield, with, matplotlib.pyplot.spy
Least squares fit of nonlinear function
Main features:
LaTeX text, scipy.optimize.curve_fit, matplotlib.patches
Fun with histograms
Main features:
np.histogram, plt.hist, plt.bar, plt.barh, gridspec, least squares fit of nonlinear function, plt.hist2d
Fancy subplot grid
Highly customizable subplot structure. Also, figure contains several axis configurations and labeling options.
Main features:
gridspec subplots; numpy-compatible heaviside; label, ticks and axis manipulations; log scale
Streamplot
Streamplot of a two-dimensional linear system, with eigenvectors and nullclines. Python shows LaTeX equations beautifully.
Main features:
meshgrid, streamplot, contour, legend, LaTeX
The time dependent Ginzburg-Landau equation
Numerical integration of a parabolic partial differential equation, using finite differences: Euler step to advance time, and a 5-point stencil to approximate the Laplacian.
Main features:
imshow, colorbar, set_data
The double pendulum
Numerical integration of the equations of motion of the double pendulum. This time, scipy’s ode itegrator was used. Nice example of how to make a movie.
Main features:
scipy.integrate.ode, set_data, set_aspect('equal'), remove plot, movie
The Hilbert curve
Construction of the Hilbert curve as a Lindenmayer system (L-system).
Main features:
string operations, movie
A hysteresis mechanism
Hysteresis mechanism created by the bistability of states. System goes to minimum points u in the energy functional $f=u^4-2u^2+hu$. The parameter $h$ is ramped down and up during this simulation.
Main features:
sympy analytical calculations, numpy dtypes, movie
Contour plot
Contour plot with many customizable options. Also, a nice way to truncate a colormap so it gives the color range that you want.
Main features:
truncate_colormap, contour, contourf (fill), clabel (contour label)
Least action principle on the beach
How should lifeguard run in order to save a drowning person in minimal time? Answer: by using Snell’s law of refraction!
This is a nice example how to use spines (x and y axis form a cross), instead of rectangular figures as usual. Also, “annotations” are used, where things can be labeled with the help of arrows.
Main features:
spines, matplotlib.patches.Rectangle, annotate
This website’s logo
Simple example of how to make a figure without any visible axes.
Main features:
set_axis_off, fill_between, matplotlib inline plot on Jupyter
Bars
Horizontal and vertical bars, with numeric legends. Unicode support.
Main features:
unicode, bar, barh, grid
some text here
# random piece of code
import numpy as np
for i in range(5):
print(f"{i**2:e}")


Edit Leave
Personnel Name and Surname
Enter leave start date
Enter leave end date
End date should be after start date!
You should enter both start and end dates!
Ad Leave
Chose Personnel
Enter leave start date
Enter leave end date
End date should be after start date!
You should enter both start and end dates!
You enter dublicate leave !


Trump hopes release of Western professors leads to ceasefire in Afghanistan
by Khaama PressThe U.S. President Donald Trump welcomed the release of the two Western professors and expressed hopes that their release would lead to ceasefire in Afghanistan.
“We join families of Kevin King & Tim Weeks in celebrating their release from Taliban captivity. Thanks to President Ghani for his courageous support,” Trump said in a Twitter post.
He added “Let’s hope this leads to more good things on the peace front like a ceasefire that will help end this long war. Proud of my team!”
The Taliban group released the two kidnapped professors of the American University of Afghanistan on Tuesday, hours after three senior leaders of Haqqani network arrived in Qatar after being released by the Afghan government.
The prisoner swap took place amid ongoing efforts to revive peace talks which President Trump called off following a series of deadly attacks in Kabul in September.
Author
-
The Khaama Press News Agency is the leading and largest English news service for Afghanistan with over 3 million hits a month. Independent authors/columnists and experts are welcomed to contribute stories, opinions and editorials. Send stories to news@khaama.com.


Related JIRA Ticket: SOHO-5863. IDS Enterprise Controls Guidelines state that there should be very few buttons present in the Toolbar Control, ideally no more than three including the spillover button. However, in some cases this guideline needs to be bent. This test makes sure the option that allows for this works properly.


1) if you're operating at a loss, there is no point at which it's a good plan to literally give part of your earnings away
2) if you can't cover your electric mining an algorithm that your cards do not excel at, then you should be mining an algorithm that your cards do excel at (e.g., nvidia=equihash)
3) if you can't accept that I know how much 3.5x my electric bill is, then you can't accept the fact that you're wrong


- SessionRegister - Class in models.domain
-
SessionRegister Entity
Describes student's status in an activity's session (absences)
- SessionRegister() - Constructor for class models.domain.SessionRegister
-
Default constructor
- SessionRegister(User, ActivitySession, RegistrationStatus, String) - Constructor for class models.domain.SessionRegister
-
Constructor
- SessionRegisterTest - Class in models.domain
-
- SessionRegisterTest() - Constructor for class models.domain.SessionRegisterTest
-
- SessionStatus - Enum in models.persistence
-
Custom enumerated type for session status
- setActivity(Activity) - Method in class models.domain.ActivitySession
-
sets the the activity this session is part of
- setActivity(Activity) - Method in class models.domain.Membership
-
sets the activity involved in this membership
- setBirthDate(Date) - Method in class models.domain.Person
-
sets the birth date of the person
- setComment(String) - Method in class models.domain.Report
-
sets the comment of the report
- setCurrentEntityManager(EntityManager) - Static method in class models.persistence.JPAUtil
-
- setDate(Date) - Method in class models.domain.ActivitySession
-
sets the date for this sessions
- setDescription(String) - Method in class models.domain.Activity
-
sets the description of the activity
- setFirstName(String) - Method in class models.domain.Person
-
sets the first name of the person
- setGrade(double) - Method in class models.domain.Report
-
sets the grade of the report
- setLastName(String) - Method in class models.domain.Person
-
sets the last name of the person
- setMemberships(Set<Membership>) - Method in class models.domain.Activity
-
sets the set of memberships linked to the activity
- setMemberships(Set<Membership>) - Method in class models.domain.User
-
sets the set of memberships for this user
- setName(String) - Method in class models.domain.Activity
-
sets the name of the activity
- setNotes(String) - Method in class models.domain.SessionRegister
-
sets the notes entered about the user for this session
- setPassword(String) - Method in class models.domain.User
-
sets the password of the user
- setPerson(Person) - Method in class models.domain.User
-
sets the embedded Person object for this user
- setPublicationDate(Date) - Method in class models.domain.Report
-
sets the publication date of the report
- setPublished(boolean) - Method in class models.domain.Report
-
sets the publication state of the report
- setRegisters(Set<SessionRegister>) - Method in class models.domain.ActivitySession
-
sets the set of registers linked to the activity
- setRegisters(Set<SessionRegister>) - Method in class models.domain.User
-
sets the set of registers for this user
- setRegistrationDate(Date) - Method in class models.domain.Membership
-
sets the registration date the user signed up for this activity
- setReport(Report) - Method in class models.domain.Membership
-
sets the report for the user-activity pair defined in the membership
- setSession(ActivitySession) - Method in class models.domain.SessionRegister
-
sets the session for which the user is registered
- setSessions(Set<ActivitySession>) - Method in class models.domain.Activity
-
sets the set of activity sessions
- setStatus(SessionStatus) - Method in class models.domain.ActivitySession
-
sets the status code for this session
- setStatus(RegistrationStatus) - Method in class models.domain.SessionRegister
-
sets the user status for this session
- setStudent(User) - Method in class models.domain.SessionRegister
-
sets the user who is registered
- setUp() - Static method in class models.domain.EntityBaseTest
-
- setUser(User) - Method in class models.domain.Membership
-
sets the user involved in this membership
- setUsername(String) - Method in class models.domain.User
-
sets the username of the user
- setUserType(UserType) - Method in class models.domain.User
-
sets the user type of the user
- setVenue(String) - Method in class models.domain.Activity
-
sets the venue where the activity sessions take place
- succeeds(Date, Date) - Static method in class models.util.DateLib
-
Checks if the first Date object represents a later point in time than the second


Avoid websites that end in “lo” ex: Newslo. These sites take pieces of accurate information and then packaging that information with other false or misleading “facts” (sometimes for the purposes of satire or comedy).
Watch out for websites that end in “.com.co” as they are often fake versions of real news sources
Watch out if known/reputable news sites are not also reporting on the story. Sometimes lack of coverage is the result of corporate media bias and other factors, but there should typically be more than one source reporting on a topic or event.
Odd domain names generally equal odd and rarely truthful news.
Lack of author attribution may, but not always, signify that the news story is suspect and requires verification.
Some news organizations are also letting bloggers post under the banner of particular news brands; however, many of these posts do not go through the same editing process (ex: BuzzFeed Community Posts, Kinja blogs, Forbes blogs).
Check the “About Us” tab on websites or look up the website on Snopes or Wikipedia for more information about the source.
Bad web design and use of ALL CAPS can also be a sign that the source you’re looking at should be verified and/or read in conjunction with other sources.
If the story makes you REALLY ANGRY it’s probably a good idea to keep reading about the topic via other sources to make sure the story you read wasn’t purposefully trying to make you angry (with potentially misleading or false information) in order to generate shares and ad revenue.
If the website you’re reading encourages you to DOX individuals, it’s unlikely to be a legitimate source of news.
It’s always best to read multiple sources of information to get a variety of viewpoints and media frames.


STAR WARS: THE PHANTOM MENACE
A film review by Christopher E. Meadows Copyright 1999 Christopher E. Meadows
MPAA: PG (sci-fi action/violence)
Written and Directed by George Lucas Produced by George Lucas (Executive) and Rick McCallum
Starring: Liam Neeson, Ewan McGregor, Natalie Portman, Jake Lloyd, etc
Review Rating: 8 out of 10.
(The first part of this review will be spoiler-free; if you haven't yet seen the movie, feel free to read it. There will be a spoiler warning and pagebreak at the end of the safe zone.)
Long live _Star Wars_!
I have only vague recollections of seeing _Star Wars_ when it first came out. I was only four years old at the time, and all I remember is that I found the Jawas really scary.
Articles and even books can be and have been written on what _Star Wars_ was and is and did for our culture. On the face of it, it's such a simple thing--it took elements from mythoi as old as humanity itself and blended them together into an epic saga. Critics have attacked it for this very simplicity, calling it a predigested mishmash of old stories that are much better in their original form . . . and yet, are not _all_ stories taken from earlier inspirations?
Regardless of what one thinks of the trilogy now, or what Lucas has done with it since, there can be no denying that when the original _Star Wars_ movie came out, it burst like a bombshell into young minds, and fired the imaginations of a generation. Who in his late twenties or early thirties now can hear that opening fanfare, see those famous words in blue appear on the screen, and not still feel that stirring deep inside? All right, I'll grant that some of you might, but I'll bet you're in the minority.
Now, George Lucas is hoping to pull it off again for the youth of today's generation. Can he? Well . . . I doubt it. Not for lack of trying on his part--_Phantom Menace_ is a spectacular movie, and if you were to transpose it chronologically into the place of the original _Star Wars_, I have little doubt that audiences would respond just as well. But the atmosphere is different now.
In 1977, _Star Wars_ signalled the end of what had been a ten or twenty year drought in big science fiction movies, and did it in a rather eye-popping way. There hadn't been a story quite like _Star Wars_ in a very long time--or ever, by some definitions. Not only was it science fiction, it was a science fiction _action_ movie; a movie that didn't just invent new worlds and technologies but _took them for granted_. While the audience is oohing and ahhing appreciatively at the Millenium Falcon, Luke says, "What a piece of junk!" It spawned a variety of imitators . . . even to this very day. And there's the problem.
Sadly, if you show a kid of today the original _Star Wars_ trilogy, or even the _Star Wars Special Edition_, the odds are good he'll shrug and reply, "So?" and perhaps even make disparaging remarks about the films' special effects. The eighties and nineties have been, by and large, the biggest decades for cinematic science fiction since the horror movie era. Perhaps even bigger. Searching on "Genre: Sci-Fi" in the Internet Movie Database shows, at the time of this review's writing, 2,404 titles, and at a glance, most of these titles seem to be post-1977. Not having grown up in those days of little-SF-then- Star Wars, they simply don't see it as anything special. Unless they're _big_ science fiction fans, no matter how much they might like it, it's "just another science fiction movie." And so, I suspect, might _The Phantom Menace_ also be.
I couldn't help but be amused by the contrast in opinions between a co-worker of mine and a person I happened to be standing next to in the movie line today. My co-worker was saying that _Star Wars_ should be for kids, and was complaining about all the adults who were snapping up tickets. This moviegoer, on the other hand, was saying that the first showing should be just for people who were old enough to see the original, and that anyone younger than that shouldn't be allowed in. Both of these people were being at least reasonably facetious in their opinions, of course, but it struck me as amusing and at the same time poignant--this new movie, _The Phantom Menace_, might have been _meant_ for the youth of today . . . but I suspect that, in large part, only those people who grew up on the original _Star Wars_ will truly appreciate it. George Lucas might have made it for the physically-young, but it will let those of us who are older relive our youth again--if only for a glorious two hours and fifteen minutes.
And now we come to the movie itself. A comment posted to the Slashdot news-for-nerds website pretty effectively sums it up--"as good as we'd expected, but not as good as we'd hoped." The movie had action, adventure, special effects, and science-fiction settings in plenitude, and yet somehow it didn't quite manage to live up to the hype. This should come as no surprise; it is doubtful that even the original Star Wars could have lived up to this degree of hype, much less The Phantom Menace.
But the big question is, is it worth the money? If you ever liked any _Star Wars_ at all . . . undeniably. If not . . . well, it's still a fairly good SF/action flick.
If you have not yet seen the movie and wish to remain unspoiled, read no further. Mark this post unread, save it to a file and come back to it later, or otherwise wait for it. Don't spoil yourself. If you read further, on your own head be it.
Like former _Star Wars_ films, _The Phantom Menace_ is action-packed from the very beginning. It starts with the two Jedi, Qui-Gon and Obi-Wan, arriving at a Trade Federation battleship to negotiate for the end of the trade blockade on Naboo. The Trade Federation representatives, under instruction from a shadowy cloaked figure we know and love from the later movies, try to kill them, and fail. They escape to Naboo, meet a friendly (albeit overcutified) alien, Jar Jar Binks, and go on to find a way through the "planet core" to the human Naboo settlement to warn them of an impending invasion. They arrive too late, however, and the rest of the film revolves around their quest to get Queen Amidala of the Naboo to Coruscant to plead for her people before the Senate, then to return to the planet to save it.
Along the way, they pick up young Anakin Skywalker on Tatooine, who proceeds to save the day several times (which is sure to infuriate those people who dislike Wesley Crusher and his ilk). We also meet such worthies as R2-D2 (who saves the day once or twice himself) and the "naked" C-3PO (who was put together by super-prodigy Anakin to help his mother around the house), and of course Senator Palpatine, Naboo's senator, who uses the crisis on Naboo to become the Senate's new High Chancellor and, as those of us who've seen _Star Wars_ IV-VI already know, is also the mysterious figure in the cloak; he turns out to be a Sith Lord to boot.
"Always there are two," Yoda says, "no more, no less.  The shadowy master (whom we know to be Palpatine), dispatches Darth Maul, his apprentice, to find and deal with the Jedi and the Naboo Queen. And deal he does, though he barely has five minutes of screen time and most of that is the climactic lightsaber duel with Qui-Gon and Obi-Wan. In the end, though there are sacrifices made, the Trade Federation is defeated, and peace and goodness reign once more . . . though as we older fans know, this will not last for very long. In fact, it is fairly easy to tell that _Phantom Menace_ is meant primarily as build-up, a prelude to the second movie that will, like _The Empire Strikes Back_, tell a darker story.
Where to begin? The movie was very much a _Star Wars_ film. There was a new world, Naboo, an older world we'd not yet visited directly, Coruscant, and an old familiar place which will, I suspect, pass into and out of the _Star Wars_ limelight a number of times in this trilogy as well as the next--that being Tatooine. There were new races, new monsters ("There's always a bigger fish"), new characters, and new ships. The technical aspects of the film were, by and large, flawless. If the story and the acting fell a little flat . . . well, these things can be forgiven.
It was good to see _familiar_ places and races and people again, too, to see how the Jedi lived in their heyday. A number of questions were answered, and others posed. As a friend put it, "The sourcebook [for the _Star Wars_ roleplaying game] for this one is going to be amazing." It's hard to say just when it really hit me--this _is_ a _Star Wars_ film.
The fight choreography was stunning. From the very beginning, when Qui-Gon and Obi-Wan mow through combat droids as though smashing pinatas, it's apparent. They move with a grace and skill that is almost poetry in motion, and makes quite a contrast to the later trilogy.
There are, of course, a few things that are odd or don't make sense, but that's to be expected. A small sampler: are we supposed to believe that the Jedi actually journeyed through the center of the planet? And the sacred place of an underwater-dwelling people is above ground? How can Obi-Wan's master be Qui-Gon when he's said in the latter trilogy that it was Yoda? Then there's the fact that Jedi abilities apparently come from the equivalent of mitochondria . . . who are also, if you can believe it, Anakin's "father." And Jabba the Hutt seems a lot _bigger_ than "young Jabba" is in _A New Hope Special Edition_ . . . though perhaps this is meant to be Jabba Senior.
And a couple of things are slightly annoying, not the least of which is super-genius-cum-Chosen-One, Anakin Skywalker.  There's nothing wrong with that by itself, but this is laying it on just a wee bit thick for my tastes. Jar Jar Binks was a bit tiresome after a while, too, but not to an onerous extent. Oh, well. Chalk it up to incipient Ewok syndrome.
 Darth Maul only has about five minutes of screen time, and most of that is lightsaber dueling. It would have been nice to see more of him, to make him more of a menacing character the way Darth Vader was, rather than a one-off throwaway. Oh, well . . . he wasn't meant to be the true villain of the piece at any rate. Perhaps we'll see more menace in Episode Two.
As for the acting, Liam Neeson and Ewan McGregor were the stars of the piece, and they both seemed to handle their roles quite well. Ian McDiarmid also shone as the diabolical Senator-then-Chancellor Palpatine; it was interesting to see him sans makeup for a change. I completely didn't recognize him until I heard him called by name. If Jake Lloyd was a bit wooden in his acting, it is forgiveable; children often lack the experience they need to make their portrayals seem more real, and at any rate, he acted better than some adults I've seen. The same could be said for Natalie Portman.
The special effects were top notch. It was easy to forget that Jar Jar Binks's head, as well as those of the rest of his race, was completely computer-generated. It all seemed so _real_. _Star Wars_ has finally moved beyond the realm of rubbery alien masks into completely lifelike CGI alien faces . . . and it's about time. The monsters in the "planet core" were also wonderfully done.
The score is very interesting for the themes Williams chose to reuse (or foreshadow). You can hear hints of the later Imperial March in "Anakin's Theme," especially toward the end, and at a couple of points in the movie the distinctive wistful horn solo associated with Luke Skywalker in Episode IV makes its appearance. "Duel of the Fates," _Phantom Menace_'s signature theme (which is receiving airplay even on pop music stations, oddly enough), seems to have been inspired by the piece "O Fortuna" from "Carmina Burana". There is also, of course, the de rigeur "alien band"--"Augie's Great Municipal Band," which performs just before the end credits.
In conclusion, _Star Wars_ Episode One: The Phantom Menace_ is not a _great_ film . . . but then, the original trilogy plus the uncontrolled _Phantom Menace_ hype are nearly impossible to live up to. But it _is_ a _Star Wars_ film to the hilt. The atmosphere, the effects, the _feeling_ is there. It's hard to explain, but for a brief two hours and fifteen minutes, it's like being a kid again, seeing the Trilogy for the first magical time. For a _Star Wars_ fan, no amount of wooden acting or mediocre writing can sour that (as the past amply demonstrates--consider _Return of the Jedi_).   If you never really cared for "those _Star Wars_ films," well, be advised that this is another one.
Review Rating: 8 out of 10.
[This review is copyright 1999 by Christopher E. Meadows. Permission
granted for Usenet distribution and associated archival, including the
Internet Movie Database, but other distribution rights reserved to the
author.]
--
Chris Meadows aka | Co-moderator, rec.toys.transformers.moderated
Robotech_Master | Homepage:
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


? ⌂
System NCBI GTDB
Curation curated original
Tip labels -- select an option --
Node labels -- select an option --
Tips
Branches
Collapse by -- select an option --
Hi there!
Thiswherehelpinformationcan goin.
Feel freetoaddanything.
Export target Identifiers Download links Subtree
Download target -- select an option -- Genome sequences Genome annotations (GenBank) Genome annotations (GFF3) Protein sequences Protein annotations (GenPept) RNA sequences CDS sequences Feature tables Feature counts
Export


az account
Manage Azure subscription information.
Part of `az`, the command-line client for Microsoft Azure.
More information: home page
- Print a list of subscriptions for the logged in account:
az account list
- Set a `subscription` to be the currently active subscription:
az account set --subscription subscription_id
- List supported regions for the currently active subscription:
az account list-locations
- Print an access token to be used with `MS Graph API`:
az account get-access-token --resource-type ms-graph
- Print details of the currently active subscription in a specific format:
az account show --output json|tsv|table|yaml


“The most disastrous thing that you can ever learn is your first programming language.” ― Alan Kay (pioneer in OOP)
new
in C++ coming from Javafor
loops in Python coming from Cquicksort :: Ord a => [a] -> [a]
quicksort [] = []
quicksort (p:xs) =
(quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
Cross-platform distribution with trusted libraries
Rich open source library repository
Package management
Glasgow Haskell Compiler
Interpreter
Search yours and other's libraries by type signatures
In-depth tutorials with inline runable/editable code
More formally...
Haskell is a purely functional, statically typed programming language, with non-strict evaluation.
Applying a function with the same parameters always returns the same value
TODO: Excel picture
Functions are first-class values
qsort
from Cvoid qsort(
void *ptr,
size_t count,
size_t size,
// function as a parameter
int (*comp)(const void *, const void *)
);
Values evaluated only when needed
if (pointer != NULL && pointer->doesSomething())
{
// ...
}
else if (number < 0 || number > 100)
{
// ...
}
-- define a value
x = 42
-- cannot reassign x = 7
-- functions are also values
addOneTo v = v + 1
=
is Mathematical Equalityx :: Int
x = 5
y :: Double
y = 4.2
addOneTo :: Int -> Int
addOneTo v = v + 1
::
allows us to annotate values with typesa -> b
denotes a function from a
to b
six :: Int
six = addOneTo 5
main :: IO ()
main = print six
Bool
definitiondata Bool = True | False
-- Using built-in if
boolToString :: Bool -> String
boolToString b = if b then "Yes!" else "No!"
-- Using Pattern Matching
boolToString' :: Bool -> String
boolToString' True = "Yes!"
boolToString' False = "No!"
-- Pattern matching and recursion
factorial :: Int -> Int
factorial 0 = 1
factorial n = n * factorial (n - 1)
| Syntax | Meaning |
|---|---|
[] |
Empty List |
[1, 2, 3] |
List |
1 : [2, 3] |
Prepend to a list |
[1, 2] ++ [3, 4] |
Concatenate two lists |
"Hello" :: [Char] |
Strings are lists of Char |
"He" ++ "llo" |
Concatenate two strings |
Pattern match on :
construction.
-- Get first element
head :: [a] -> a
head (x:xs) = x
-- Get list after first element
tail :: [a] -> [a]
tail [] = []
tail (x:xs) = xs
Pattern matching is your friend
myReverse :: [a] -> [a]
myReverse [] = []
myReverse (x:xs) = myReverse xs ++ [x]
Reuse head
and tail
:
myReverse :: [a] -> [a]
myReverse [] = []
myReverse list = myReverse (tail list) ++ [head list]
mySum :: [Int] -> Int
mySum [] = 0
mySum (x:xs) = x + (mySum xs)
Let's evaluate mySum
on a small list, by following substitution rules
-- mySum [] = 0
-- mySum (x:xs) = x + (mySum xs)
mySum [1,2,3]
= mySum 1:[2,3]
= 1 + (mySum [2,3])
= 1 + (mySum 2:[3])
= 1 + ( 2 + (mySum [3]))
= 1 + ( 2 + (mySum 3:[]))
= 1 + ( 2 + ( 3 + (mySum [])))
= 1 + ( 2 + ( 3 + (0)))
= 1 + ( 2 + ( 3 ))
= 1 + ( 5 )
= 6
Inefficient: requires O(n) space!
-- Takes an accumulator as first argument
mySum' :: Int -> [Int] -> Int
mySum' acc [] = acc
mySum' acc (x:xs) = mySum' (acc + x) xs
-- ^ add the head of the list to the accumulator
To see why this takes constant space, let's use substitution rules:
-- mySum' acc [] = acc
-- mySum' acc (x:xs) = mySum' (acc + x) xs
mySum' 0 [1,2,3]
= mySum' 0 1:[2,3]
= mySum' (0+1) [2,3]
= mySum' 1 2:[3]
= mySum' (1+2) [3]
= mySum' 3 3:[]
= mySum' (3+3) []
= mySum' 6 []
= 6
This is equivalent to a flat loop in an imperative language.
where
for scoped definitionsmySum :: [Int] -> Int
-- call implementation with 0 accumulator
mySum xs = mySum' 0 xs
where mySum' acc [] = acc
mySum' acc (x:xs) = mySum' (acc + x) xs
mySum
is quite restrictiveFloat
sDouble
sComplex
numbers-- Compiles without type signature!
mySum xs = mySum' 0 xs
where mySum' acc [] = acc
mySum' acc (x:xs) = mySum' (acc + x) xs
-- Query the type in interpreter
> :type mySum
mySum :: Num a => [a] -> a
-- Says "Type parameter a has to be a Number"
mySum :: Num a => [a] -> a
mySum xs = mySum' 0 xs
where mySum' acc [] = acc
mySum' acc (x:xs) = mySum' (acc + x) xs
-- the clue to the compiler ^
+
+
is Num
mySum
can only be used on lists of Num
s> mySum [1, 2, 3, 4, 5, 6, 7]
28 :: Int
> mySum [2.5, 3.5, 4.5, 5.5, 6.5, 7.5]
30.0 :: Double
if
?while
?for
?map
fold
map :: (a -> b) -> [a] -> [b]
map f xs
is the list obtained by applying f
to each element of xs
, i.e.,
> map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]
> map (*2) [1, 2, 3, 4, 5]
[2, 4, 6, 8, 10]
TODO: functions
foldl :: (a -> b -> a) -> a -> [b] -> a
-- ~~~~~~~~~~~~~ ^- starting value (accumulator)
-- binary operator
foldl, applied to a binary operator, a starting value (typically the left-identity of the operator), and a list, reduces the list using the binary operator, from left to right.
TODO: diagram of foldl?
foldl :: (a -> b -> a) -> a -> [b] -> a
(+) :: Num a => a -> a -> a
mySum xs = foldl (+) 0 xs
map :: (a -> b) -> [a] -> [b]
doubleValues xs = map (\x -> x * 2) xs
-- ~^~~~~~~~~~~~
-- lambda function
> doubleValues [1..5]
[2, 4, 6, 8, 10]
toUpper :: Char -> Char
map :: (a -> b) -> [a] -> [b]
stringToUpper :: String -> String
stringToUpper s = map (toUpper) s
-- factor out s
stringToUpper' :: String -> String
stringToUpper' = map (toUpper)
stringToUpper :: String -> String
stringToUpper = map (toUpper)
> stringToUpper "Hello World"
"HELLO WORLD"
mySum
function works great for adding a list of numbersString
s-- The Num typeclass we saw before
class Num a where
(+) :: a -> a -> a
(*) :: a -> a -> a
(-) :: a -> a -> a
negate :: a -> a
abs :: a -> a
-- The Num typeclass we saw before
class Num a where
(+) :: a -> a -> a
(*) :: a -> a -> a
(-) :: a -> a -> a
negate :: a -> a
abs :: a -> a
instance
instance Num Int where
(+) = intSum -- assuming intSum
(*) = intMult -- intMult
(-) = intSub -- intSub are provided elsewhere
negate x = 0 - x
abs x = if x < 0
then negate x
else x
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
class Eq a => Ord a where
-- minimal definition requires compare
-- the rest are automatically defined in terms of it
compare :: a -> a -> Ordering
(<) :: a -> a -> Bool
(>=) :: a -> a -> Bool
(>) :: a -> a -> Bool
(<=) :: a -> a -> Bool
max :: a -> a -> a
min :: a -> a -> a
sort :: Ord a => [a] -> [a]
-- example:
sort "Missisauga" = "Maagiissssu"
group :: Eq a => [a] -> [[a]]
-- example:
group "Missisauga" = ["M","i","ss","i","ss","a","u","g","a"]
Monoid
s, Functor
s, Applicative
s, Monad
s"In abstract algebra, a monoid is an algebraic structure with a single associative binary operation and an identity element." ― Wikipedia
"In abstract algebra, a monoid is an algebraic structure with a single associative binary operation and an identity element." ― Wikipedia
class Monoid a where
mempty :: a -- identity
mappend :: a -> a -> a -- binary operation
-- Rules: (not checked, but assumed in usage)
-- identity
mappend a mempty = a
-- associativity
mappend a (mappend b c) = mappend (mappend a b) c
Monoid
s!instance Monoid String where
mempty = "" -- empty string is identity
mappend a b = a ++ b -- op is string concatenation
instance Monoid Int where
mempty = 0
mappend a b = a + b
instance Monoid (Set a) where
mempty = empty
mappend s1 s2 = s1 `union` s2
mconcat
Monoid
instance we get mconcat
for free-- Accumulate a value from a list, using mappend
mconcat :: Monoid m => [m] -> m
Let's apply what we have learnt so far and formulate map-reduce (Popularized by Google)
MapReduce is a programming model for processing large data sets with a parallel, distributed algorithm on a cluster.
It won't be parallel, but captures concept
Two Steps:
Alread have map. Need reduce.
map :: (a -> b) -> [a] -> [b]
reduce :: ??
Reduce combines values.
reduce :: (b -> b -> b) -> b -> [b] -> b
reduce combine startingValue transformedData = ??
This looks like properties of a Monoid
class Monoid a where
mempty :: a -- identity
mappend :: a -> a -> a -- binary operation
reduce :: Monoid b => [b] -> b
We already have mconcat
!
-- Accumulate a value from a list, using mappend
mconcat :: Monoid m => [m] -> m
reduce :: Monoid b => [b] -> b
reduce = mconcat
We can now define mapReduce
mapReduce :: Monoid m => (a -> m) -> [a] -> m
mapReduce f list = reduce $ map f list
As a composition of functions ("pointfree")
mapReduce :: Monoid m => (a -> m) -> [a] -> m
mapReduce f = reduce . map f
Use on a simple example of counting characters
countCharsInWords :: [String] -> Sum Int
countCharsInWords = mapReduce (Sum . length)
> countCharsInWords ["Hello", "MapReduce!"]
Sum {getSum = 15}
length :: String -> Int
[String]
someFunc :: [String] -> [Int]
map
a function over a list> map length ["Hello", "World!"]
[5, 6] :: [Int]
map
applies a function to every element in a list> :type map
map :: (a -> b) -> [a] -> [b]
> :type map length
map length :: [String] -> [Int]
With map
we lift a function to work with lists
Generalizing to arbitrary types a
and b
[]
map
to lift other functionsQuestion: Given an arbitrary type wrapper, can we come up with a unique lifting function?
TODO: give another motivating example in the form of Maybe
?
instance Functor Maybe where
-- fmap :: (a -> b) -> f a -> f b
fmap f Nothing = Nothing
fmap f (Just a) = Just (f a)
instance Monad Maybe where
-- (>>=) :: m a -> (a -> m b) -> m b
Nothing >>= f = Nothing
Just a >>= f = f a
-- return :: a -> m a
return a = Just a
concatMap :: (a -> [b]) -> [a] -> [b]
concatMap f [] = []
concatMap f (x:xs) = f x ++ concatMap f xs
instance Monad [] where
-- concatMap :: (a -> [b]) -> [a] -> [b]
-- (>>=) :: m a -> (a -> m b) -> m b
(>>=) = flip concatMap
-- return :: a -> m a
return a = [a]
class Functor f => Applicative f where
pure :: a -> f a
<*> :: f (a -> b) -> f a -> f b
What happens if we fmap
a function that takes more than one argument?
(+) :: Num a => a -> a -> a
fmap :: Functor f => (a -> b) -> f a -> f b
fmap (+) [1, 2, 3] = ??
fmap :: (a -> b) -> f a -> f b
-- what if b is (c -> d)
fmap :: (a -> (c -> d)) -> f a -> f (c -> d)
fmap (+) [1, 2, 3] :: [(Int -> Int)]
fmap (+) [1, 2, 3] == [(+ 1), (+ 2), (+ 3)]
instance Applicative [] where
-- pure :: a -> f a
pure x = [x]
-- <*> :: f (a -> b) -> f a -> f b
[] <*> vals = []
(f:fs) <*> vals = fmap f vals ++ fs <*> vals
<*> :: Applicative f => f (a -> b) -> f a -> f b
<*> :: [(a -> b)] -> [a] -> [b]
> (fmap (+) [1, 2, 3]) <*> [10, 17, 42]
[11,18,43,12,19,44,13,20,45]
<$> = fmap
> (+) <$> [1, 2, 3] <*> [10, 42]
[11,43,12,44,13,45]
-- [] <*> vals = []
-- (f:fs) <*> vals = fmap f vals ++ fs <*> vals
(+) <$> [1, 2, 3] <*> [10, 42]
= [(+ 1), (+ 2), (+ 3)] <*> [10, 42]
= (+ 1) : [(+ 2), (+ 3)] <*> [10, 42]
= fmap (+ 1) [10, 42] ++ [(+ 2), (+ 3)] <*> [10, 42]
= [11, 43] ++ [(+ 2), (+ 3)] <*> [10, 42]
= [11, 43] ++ [12, 44] ++ [(+ 3)] <*> [10, 42]
= [11, 43, 12, 44] ++ [(+ 3)] <*> [10, 42]
= [11, 43, 12, 44] ++ [13, 45] ++ [] <*> [10, 42]
= [11, 43, 12, 44, 13, 45] ++ [] <*> [10, 42]
= [11, 43, 12, 44, 13, 45] ++ []
= [11, 43, 12, 44, 13, 45]
fmap :: (a -> b) -> f a -> f b
<*> :: f (a -> b) -> f a -> f b
flip (>>=) :: (a -> m b) -> m a -> m b
Need some kind of goal
=
-- Define a value::
-- Type annotation[1, 2, 3]
-- List:
-- Prepend to a list++
-- Concatenate two listsa -> b
-- Function from a
to b
where
-- scoped definition| Syntax | Meaning |
|---|---|
x = 42 |
Define a value |
42 :: Int |
Type annotation |
a -> b |
Function from a to b |
[1, 2, 3] |
List |
1 : [2, 3] |
Prepend to a list |
"He" ++ "llo" |
Concatenate two lists |
where |
scoped definition |


{% include "corpus/snippets/document_header.html" %}
{% include "corpus/snippets/document_tabs.html" %}
{% regroup document.footnotes.all by source as source_list %}
{% for source in source_list %}
{% spaceless %}
{# Translators: accessibility label for a footnote source citation in scholarship records view #}
{% translate 'Bibliographic citation' %}
{{ source.grouper.formatted_display|safe }}
{# Translators: label for included document relations for a single footnote #}
{% translate "includes" as includes_text %}
{% if source.list|length > 1 or source.list.0.location or source.list.0.url %}
{# Translators: label for document relations in list of footnotes #}
{% blocktranslate with relation=source.list.0.doc_relation|lower trimmed %}
for {{ relation }} see
{% endblocktranslate%}
{% else %}
{# Translators: label for document relations for one footnote with no location or URL #}
{% blocktranslate with relation=source.list.0.doc_relation|lower trimmed %}
includes {{ relation }}
{% endblocktranslate%}
{% endif %}
{% if source.list|length > 1 or source.list.0.location or source.list.0.url %}
{% for fn in source.list %}
{% include "corpus/snippets/footnote_location.html" %}


==
Ready for an estimate? An SF5 Construction specialist is standing by to review your needs and provide you with the right information to get your project started.
With over 10 years of experience, you can trust SF5 Construction to solve your roofing problems by providing prompt and professional customer service.
SF5 Construction offers solutions for all of your commercial needs.


This is a static snapshot of my energy usage over the last month or so. The live version is hidden away for the time being. You can read more about it
here »
.
This day has cost
which is
than the average for the month. The month has cost
.


Are you sure you want to delete this post? This action cannot be undone.
Are you sure you want to report this post? Does it go against the rules and/or terms?


Invalid url "{0}".
This error occurs when the path of a location contains invalid characters.
The most common fault is when the path starts with double slashes (//
) or backslashes ('\').
For example if the base path of an application is https://a.b.c/
then the following path is
invalid https://a.b.c///d/e/f
.