const ( Version = 6 // protocol version HeaderLen = 40 // header length )
func NewControlMessage(cf ControlFlags) []byte
NewControlMessage returns a new control message.
The returned message is large enough for options specified by cf.
A Conn represents a network endpoint that uses IPv6 transport. It allows to set basic IP-level socket options such as traffic class and hop limit.
type Conn struct {
// contains filtered or unexported fields
}
▹ Example (MarkingTCP)
func NewConn(c net.Conn) *Conn
NewConn returns a new Conn.
func (c *Conn) HopLimit() (int, error)
HopLimit returns the hop limit field value for outgoing packets.
func (c *Conn) PathMTU() (int, error)
PathMTU returns a path MTU value for the destination associated with the endpoint.
func (c *Conn) SetHopLimit(hoplim int) error
SetHopLimit sets the hop limit field value for future outgoing packets.
func (c *Conn) SetTrafficClass(tclass int) error
SetTrafficClass sets the traffic class field value for future outgoing packets.
func (c *Conn) TrafficClass() (int, error)
TrafficClass returns the traffic class field value for outgoing packets.
A ControlFlags represents per packet basis IP-level socket option control flags.
type ControlFlags uint
const ( FlagTrafficClass ControlFlags = 1 << iota // pass the traffic class on the received packet FlagHopLimit // pass the hop limit on the received packet FlagSrc // pass the source address on the received packet FlagDst // pass the destination address on the received packet FlagInterface // pass the interface index on the received packet FlagPathMTU // pass the path MTU on the received packet path )
A ControlMessage represents per packet basis IP-level socket options.
type ControlMessage struct { // Receiving socket options: SetControlMessage allows to // receive the options from the protocol stack using ReadFrom // method of PacketConn. // // Specifying socket options: ControlMessage for WriteTo // method of PacketConn allows to send the options to the // protocol stack. // TrafficClass int // traffic class, must be 1 <= value <= 255 when specifying HopLimit int // hop limit, must be 1 <= value <= 255 when specifying Src net.IP // source address, specifying only Dst net.IP // destination address, receiving only IfIndex int // interface index, must be 1 <= value when specifying NextHop net.IP // next hop address, specifying only MTU int // path MTU, receiving only }
func (cm *ControlMessage) Marshal() []byte
Marshal returns the binary encoding of cm.
func (cm *ControlMessage) Parse(b []byte) error
Parse parses b as a control message and stores the result in cm.
func (cm *ControlMessage) String() string
A Header represents an IPv6 base header.
type Header struct { Version int // protocol version TrafficClass int // traffic class FlowLabel int // flow label PayloadLen int // payload length NextHeader int // next header HopLimit int // hop limit Src net.IP // source address Dst net.IP // destination address }
func ParseHeader(b []byte) (*Header, error)
ParseHeader parses b as an IPv6 base header.
func (h *Header) String() string
An ICMPFilter represents an ICMP message filter for incoming packets. The filter belongs to a packet delivery path on a host and it cannot interact with forwarding packets or tunnel-outer packets.
Note: RFC 8200 defines a reasonable role model. A node means a device that implements IP. A router means a node that forwards IP packets not explicitly addressed to itself, and a host means a node that is not a router.
type ICMPFilter struct {
// contains filtered or unexported fields
}
func (f *ICMPFilter) Accept(typ ICMPType)
Accept accepts incoming ICMP packets including the type field value typ.
func (f *ICMPFilter) Block(typ ICMPType)
Block blocks incoming ICMP packets including the type field value typ.
func (f *ICMPFilter) SetAll(block bool)
SetAll sets the filter action to the filter.
func (f *ICMPFilter) WillBlock(typ ICMPType) bool
WillBlock reports whether the ICMP type will be blocked.
An ICMPType represents a type of ICMP message.
type ICMPType int
Internet Control Message Protocol version 6 (ICMPv6) Parameters, Updated: 2018-03-09
const ( ICMPTypeDestinationUnreachable ICMPType = 1 // Destination Unreachable ICMPTypePacketTooBig ICMPType = 2 // Packet Too Big ICMPTypeTimeExceeded ICMPType = 3 // Time Exceeded ICMPTypeParameterProblem ICMPType = 4 // Parameter Problem ICMPTypeEchoRequest ICMPType = 128 // Echo Request ICMPTypeEchoReply ICMPType = 129 // Echo Reply ICMPTypeMulticastListenerQuery ICMPType = 130 // Multicast Listener Query ICMPTypeMulticastListenerReport ICMPType = 131 // Multicast Listener Report ICMPTypeMulticastListenerDone ICMPType = 132 // Multicast Listener Done ICMPTypeRouterSolicitation ICMPType = 133 // Router Solicitation ICMPTypeRouterAdvertisement ICMPType = 134 // Router Advertisement ICMPTypeNeighborSolicitation ICMPType = 135 // Neighbor Solicitation ICMPTypeNeighborAdvertisement ICMPType = 136 // Neighbor Advertisement ICMPTypeRedirect ICMPType = 137 // Redirect Message ICMPTypeRouterRenumbering ICMPType = 138 // Router Renumbering ICMPTypeNodeInformationQuery ICMPType = 139 // ICMP Node Information Query ICMPTypeNodeInformationResponse ICMPType = 140 // ICMP Node Information Response ICMPTypeInverseNeighborDiscoverySolicitation ICMPType = 141 // Inverse Neighbor Discovery Solicitation Message ICMPTypeInverseNeighborDiscoveryAdvertisement ICMPType = 142 // Inverse Neighbor Discovery Advertisement Message ICMPTypeVersion2MulticastListenerReport ICMPType = 143 // Version 2 Multicast Listener Report ICMPTypeHomeAgentAddressDiscoveryRequest ICMPType = 144 // Home Agent Address Discovery Request Message ICMPTypeHomeAgentAddressDiscoveryReply ICMPType = 145 // Home Agent Address Discovery Reply Message ICMPTypeMobilePrefixSolicitation ICMPType = 146 // Mobile Prefix Solicitation ICMPTypeMobilePrefixAdvertisement ICMPType = 147 // Mobile Prefix Advertisement ICMPTypeCertificationPathSolicitation ICMPType = 148 // Certification Path Solicitation Message ICMPTypeCertificationPathAdvertisement ICMPType = 149 // Certification Path Advertisement Message ICMPTypeMulticastRouterAdvertisement ICMPType = 151 // Multicast Router Advertisement ICMPTypeMulticastRouterSolicitation ICMPType = 152 // Multicast Router Solicitation ICMPTypeMulticastRouterTermination ICMPType = 153 // Multicast Router Termination ICMPTypeFMIPv6 ICMPType = 154 // FMIPv6 Messages ICMPTypeRPLControl ICMPType = 155 // RPL Control Message ICMPTypeILNPv6LocatorUpdate ICMPType = 156 // ILNPv6 Locator Update Message ICMPTypeDuplicateAddressRequest ICMPType = 157 // Duplicate Address Request ICMPTypeDuplicateAddressConfirmation ICMPType = 158 // Duplicate Address Confirmation ICMPTypeMPLControl ICMPType = 159 // MPL Control Message ICMPTypeExtendedEchoRequest ICMPType = 160 // Extended Echo Request ICMPTypeExtendedEchoReply ICMPType = 161 // Extended Echo Reply )
func (typ ICMPType) Protocol() int
Protocol returns the ICMPv6 protocol number.
func (typ ICMPType) String() string
A Message represents an IO message.
type Message struct { Buffers [][]byte OOB []byte Addr net.Addr N int NN int Flags int }
The Buffers fields represents a list of contiguous buffers, which can be used for vectored IO, for example, putting a header and a payload in each slice. When writing, the Buffers field must contain at least one byte to write. When reading, the Buffers field will always contain a byte to read.
The OOB field contains protocol-specific control or miscellaneous ancillary data known as out-of-band data. It can be nil when not required.
The Addr field specifies a destination address when writing. It can be nil when the underlying protocol of the endpoint uses connection-oriented communication. After a successful read, it may contain the source address on the received packet.
The N field indicates the number of bytes read or written from/to Buffers.
The NN field indicates the number of bytes read or written from/to OOB.
The Flags field contains protocol-specific information on the received message.
type Message = socket.Message
A PacketConn represents a packet network endpoint that uses IPv6 transport. It is used to control several IP-level socket options including IPv6 header manipulation. It also provides datagram based network I/O methods specific to the IPv6 and higher layer protocols such as OSPF, GRE, and UDP.
type PacketConn struct {
// contains filtered or unexported fields
}
▹ Example (AdvertisingOSPFHello)
▹ Example (ServingOneShotMulticastDNS)
▹ Example (TracingIPPacketRoute)
func NewPacketConn(c net.PacketConn) *PacketConn
NewPacketConn returns a new PacketConn using c as its underlying transport.
func (c *PacketConn) Checksum() (on bool, offset int, err error)
Checksum reports whether the kernel will compute, store or verify a checksum for both incoming and outgoing packets. If on is true, it returns an offset in bytes into the data of where the checksum field is located.
func (c *PacketConn) Close() error
Close closes the endpoint.
func (c *PacketConn) ExcludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error
ExcludeSourceSpecificGroup excludes the source-specific group from the already joined any-source groups by JoinGroup on the interface ifi.
func (c *PacketConn) HopLimit() (int, error)
HopLimit returns the hop limit field value for outgoing packets.
func (c *PacketConn) ICMPFilter() (*ICMPFilter, error)
ICMPFilter returns an ICMP filter.
func (c *PacketConn) IncludeSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error
IncludeSourceSpecificGroup includes the excluded source-specific group by ExcludeSourceSpecificGroup again on the interface ifi.
func (c *PacketConn) JoinGroup(ifi *net.Interface, group net.Addr) error
JoinGroup joins the group address group on the interface ifi. By default all sources that can cast data to group are accepted. It's possible to mute and unmute data transmission from a specific source by using ExcludeSourceSpecificGroup and IncludeSourceSpecificGroup. JoinGroup uses the system assigned multicast interface when ifi is nil, although this is not recommended because the assignment depends on platforms and sometimes it might require routing configuration.
func (c *PacketConn) JoinSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error
JoinSourceSpecificGroup joins the source-specific group comprising group and source on the interface ifi. JoinSourceSpecificGroup uses the system assigned multicast interface when ifi is nil, although this is not recommended because the assignment depends on platforms and sometimes it might require routing configuration.
func (c *PacketConn) LeaveGroup(ifi *net.Interface, group net.Addr) error
LeaveGroup leaves the group address group on the interface ifi regardless of whether the group is any-source group or source-specific group.
func (c *PacketConn) LeaveSourceSpecificGroup(ifi *net.Interface, group, source net.Addr) error
LeaveSourceSpecificGroup leaves the source-specific group on the interface ifi.
func (c *PacketConn) MulticastHopLimit() (int, error)
MulticastHopLimit returns the hop limit field value for outgoing multicast packets.
func (c *PacketConn) MulticastInterface() (*net.Interface, error)
MulticastInterface returns the default interface for multicast packet transmissions.
func (c *PacketConn) MulticastLoopback() (bool, error)
MulticastLoopback reports whether transmitted multicast packets should be copied and send back to the originator.
func (c *PacketConn) ReadBatch(ms []Message, flags int) (int, error)
ReadBatch reads a batch of messages.
The provided flags is a set of platform-dependent flags, such as syscall.MSG_PEEK.
On a successful read it returns the number of messages received, up to len(ms).
On Linux, a batch read will be optimized. On other platforms, this method will read only a single message.
func (c *PacketConn) ReadFrom(b []byte) (n int, cm *ControlMessage, src net.Addr, err error)
ReadFrom reads a payload of the received IPv6 datagram, from the endpoint c, copying the payload into b. It returns the number of bytes copied into b, the control message cm and the source address src of the received datagram.
func (c *PacketConn) SetBPF(filter []bpf.RawInstruction) error
SetBPF attaches a BPF program to the connection.
Only supported on Linux.
func (c *PacketConn) SetChecksum(on bool, offset int) error
SetChecksum enables the kernel checksum processing. If on is ture, the offset should be an offset in bytes into the data of where the checksum field is located.
func (c *PacketConn) SetControlMessage(cf ControlFlags, on bool) error
SetControlMessage allows to receive the per packet basis IP-level socket options.
func (c *PacketConn) SetDeadline(t time.Time) error
SetDeadline sets the read and write deadlines associated with the endpoint.
func (c *PacketConn) SetHopLimit(hoplim int) error
SetHopLimit sets the hop limit field value for future outgoing packets.
func (c *PacketConn) SetICMPFilter(f *ICMPFilter) error
SetICMPFilter deploys the ICMP filter.
func (c *PacketConn) SetMulticastHopLimit(hoplim int) error
SetMulticastHopLimit sets the hop limit field value for future outgoing multicast packets.
func (c *PacketConn) SetMulticastInterface(ifi *net.Interface) error
SetMulticastInterface sets the default interface for future multicast packet transmissions.
func (c *PacketConn) SetMulticastLoopback(on bool) error
SetMulticastLoopback sets whether transmitted multicast packets should be copied and send back to the originator.
func (c *PacketConn) SetReadDeadline(t time.Time) error
SetReadDeadline sets the read deadline associated with the endpoint.
func (c *PacketConn) SetTrafficClass(tclass int) error
SetTrafficClass sets the traffic class field value for future outgoing packets.
func (c *PacketConn) SetWriteDeadline(t time.Time) error
SetWriteDeadline sets the write deadline associated with the endpoint.
func (c *PacketConn) TrafficClass() (int, error)
TrafficClass returns the traffic class field value for outgoing packets.
func (c *PacketConn) WriteBatch(ms []Message, flags int) (int, error)
WriteBatch writes a batch of messages.
The provided flags is a set of platform-dependent flags, such as syscall.MSG_DONTROUTE.
It returns the number of messages written on a successful write.
On Linux, a batch write will be optimized. On other platforms, this method will write only a single message.
func (c *PacketConn) WriteTo(b []byte, cm *ControlMessage, dst net.Addr) (n int, err error)
WriteTo writes a payload of the IPv6 datagram, to the destination address dst through the endpoint c, copying the payload from b. It returns the number of bytes written. The control message cm allows the IPv6 header fields and the datagram path to be specified. The cm may be nil if control of the outgoing datagram is not required.
On Windows, the ReadBatch and WriteBatch methods of PacketConn are not implemented.
This package is not implemented on AIX, JS, NaCl and Plan 9.
On Windows, the JoinSourceSpecificGroup, LeaveSourceSpecificGroup, ExcludeSourceSpecificGroup and IncludeSourceSpecificGroup methods of PacketConn are not implemented.
On Windows, methods related to ICMPFilter are not implemented.
On Windows, the ControlMessage for ReadFrom and WriteTo methods of PacketConn is not implemented.


Movie
Age Groups
Child: 2 to 12years
Adult: 13 years and up
Prices
Child: Matinee $5.00
Child: Regular $7.00
Adult: Matinee $10.00
Adult: Regular $12.00
Purchase Tickets
Movie
Oceans 8
Solo
Incredibles 2
Avengers
Time
Matanee
Afternoon
Child
Adult
Add
Purchased:
Movie:
Time:
how many children:
How many adults:
Total:


The activity or preservation procedure through which an item in the ArtBase database has been created. This may refer to primary source materials supplied by artists, such as artist links and descriptions. It may also refer to actions undertaken by the archivists and the preservation team at Rhizome in order to generate an artwork variant.
Generated by
Open submission
Description: The process of adding items to the database between 1999–2008 was open to all without any filtering or curating by Rhizome staff.
Cloning
Description: The process of making a copy of the artwork files hosted on the artist’s server and transferring the copy to Rhizome’s server. This process was part of the open submission period, but was optional, artists could choose to link their works or clone them.
Webrecorder capture
Description: This process involves the use of Rhizome’s web archiving software tool Webrecorder in order to create an archival WARC file. WARC files are re-performed via Rhizome’s Webenact platform. These re-performances aim to be as close to the original presentation of the artwork as possible, but still involve curatorial decisions taken by the archivist. See the Archival Plan metadata for more details.
Webarchive capture
Description: This process involves the use of a mix of web archiving tools and web archiving resources in order to create an archival WARC file. WARC files are re-performed via Rhizome’s Webenact platform. These re-performances aim to be as close to the original presentation of the artwork as possible, but still involve curatorial decisions taken by the archivist. See the Archival Plan metadata for more details.
Emulated re-performance
Description: This process involves the use of either a cloned copy or a webarchive capture of the artwork, which is then re-performed in an emulated environment due to the artwork’s dependencies on specific components in an operating system or software application which are no longer supported in contemporary iterations of these systems or applications. The emulated environment is served via the Emulation-as-a-Service framework. See the emulated environment’s item page for more details, as well as the Interaction Notes metadata for performance instructions.


{% extends "_layout.html" %} {% block content %}
Chrome for Android supports NDEF scanning directly through JavaScript (since release 89). You can try it out here:
This feature requires using Chrome for Android. It also needs HTTPS in order to work properly. This demo will simply read the first NDEF record and interpret it as URL.
Scan attempt: 0
(Scan result will appear here)


set_time_limit
(PHP 4, PHP 5, PHP 7)
set_time_limit — 设置脚本最大执行时间
说明
void set_time_limit ( int $seconds )
设置允许脚本运行的时间，单位为秒。如果超过了此设置，脚本返回一个致命的错误。默
认值为30秒，或者是在php.ini的max_execution_time被定义的值，如果此值存在。
当此函数被调用时，set_time_limit()会从零开始重新启动超时计数器。换句话说，如果
超时默认是30秒，在脚本运行了了25秒时调用 set_time_limit(20)，那么，脚本在超时之
前可运行总时间为45秒。
参数
seconds
最大的执行时间，单位为秒。如果设置为0（零），没有时间方面的限制。
返回值
没有返回值。
注释
Warning
当php运行于安全模式时，此功能不能生效。除了关闭安全模式或改变php.ini中的时间限
制，没有别的办法。
Note:
set_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。
任何发生在诸如使用system()的系统调用，流操作，数据库操作等的脚本执行的最大
时间不包括其中，当该脚本已运行。在测量时间是实值的Windows中，情况就不是如此
了。
参见
• max_execution_time
• max_input_time
User Contributed Notes 23 notes
===============================================================================
while setting the set_time_limit(), the duration of sleep() will be ignored in
the execution time. The following illustrates:
Output:
i=0 i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9 i=10
===============================================================================
I was having trouble with script timeouts in applications where the user
prompted long running background actions. I wrote this cURL/CLI background
script that solved the problem when making requests from HTTP.
Background CLI';
echo 'O.K. If all goes well, '.$script.' is working hard in the
background with no ' ;
echo 'timeout limitations.
' ;
exit ;
}
// Start screen.
if ( !$CLI AND !$runscript ) {
echo 'Background CLI' ;
echo '
' ;
exit ;
}
# cURL URL PROMPT FUNCTION
function cURL_prompt($url_path) {
ob_start(); // start output buffer
$c=curl_init($url_path);
curl_setopt($c, CURLOPT_TIMEOUT, 2); // drop connection after 2 seconds
curl_exec($c);
curl_close($c);
ob_end_clean(); // discard output buffer
}
?>
===============================================================================
Both set_time_limit(...) and ini_set('max_execution_time',...); won't count
the time cost of sleep,file_get_contents,shell_exec,mysql_query etc, so i build
this function my_background_exec(), to run static method/function in background
/detached process and time is out kill it:
my_exec.php:
'\"', '$'=>'\$', '`'=>'\`', '\\'=>'\\\\', '!'=>'\!');
$str_requires=strtr($str_requires, $map);
$path_run=dirname($_SERVER['SCRIPT_FILENAME']);
$my_target_exec="/usr/bin/php -r \"chdir('{$path_run}');{
$str_requires} \\\$params=json_decode(file_get_contents('php://stdin'),true);
call_user_func_array('{$function_name}', \\\$params);\"";
$my_target_exec=strtr(strtr($my_target_exec, $map), $map);
$my_background_exec="(/usr/bin/php -r \"chdir('{$path_run}');{
$str_requires} my_timeout_exec(\\\"{$my_target_exec}\\\", file_get_contents
('php://stdin'), {$timeout});\" <&3 &) 3<&0";//php by default use "sh", and
"sh" don't support "<&0"
my_timeout_exec($my_background_exec, json_encode($params), 2);
}
function my_timeout_exec($cmd, $stdin='', $timeout)
{$start=time();
$stdout='';
$stderr='';
//file_put_contents('debug.txt', time().':cmd:'.$cmd."\n",
FILE_APPEND);
//file_put_contents('debug.txt', time().':stdin:'.$stdin."\n",
FILE_APPEND);
$process=proc_open($cmd, [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w'
]], $pipes);
if (!is_resource($process))
{return array('return'=>'1', 'stdout'=>$stdout, 'stderr'=>$stderr
);
}
$status=proc_get_status($process);
posix_setpgid($status['pid'], $status['pid']); //seperate pgid
(process group id) from parent's pgid
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
fwrite($pipes[0], $stdin);
fclose($pipes[0]);
while (1)
{$stdout.=stream_get_contents($pipes[1]);
$stderr.=stream_get_contents($pipes[2]);
if (time()-$start>$timeout)
{//proc_terminate($process, 9); //only terminate
subprocess, won't terminate sub-subprocess
posix_kill(-$status['pid'], 9); //sends SIGKILL to all
processes inside group(negative means GPID, all subprocesses share the top
process group, except nested my_timeout_exec)
//file_put_contents('debug.txt', time().":kill group
{$status['pid']}\n", FILE_APPEND);
return array('return'=>'1', 'stdout'=>$stdout, 'stderr'=>
$stderr);
}
$status=proc_get_status($process);
//file_put_contents('debug.txt', time().':status:'.var_export
($status, true)."\n";
if (!$status['running'])
{fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
return $status['exitcode'];
}
usleep(100000);
}
}
?>
a_class.php:
test.php:
===============================================================================
To get the currently used time, use getrusage()
===============================================================================
You may also need to look at Apache's timeout setting (Win32 version for me), I
changed max execution time value in php.ini, and still got stopped by Apache's
timeout value in the httpd.conf file.
===============================================================================
In IIS, there is another global timeout setting which will override any PHP
settings. You can alter this timeout by following the following instructions:
http://www.iisadmin.co.uk/?p=7
===============================================================================
You can do set_time_limit(0); so that the script will run forever - however
this is not recommended and your web server might catch you out with an imposed
HTTP timeout (usually around 5 minutes).
You should check your web server's guides for more information about HTTP
timeouts.
Jonathon
===============================================================================
Documentation states:
When called, set_time_limit() restarts the timeout counter from zero. In other
words, if the timeout is the default 30 seconds, and 25 seconds into script
execution a call such as set_time_limit(20) is made, the script will run for a
total of 45 seconds before timing out.
If I have a long running script and i want a exact time limit, I set this as
near as possible to the first line.
===============================================================================
set_tme_limit resets the execution time count.
test code1:
';
set_time_limit(1);
$i = 0;
while(++$i < 100000001){
if($i % 100000 == 0){
echo $i / 100000, "
\n";
}
}
echo "done.
\n";
// will not echo 'done.'.
?>
test code2:
';
set_time_limit(1);
$i = 0;
while(++$i < 100000001){
if($i % 100000 == 0){
set_time_limit(1);
echo $i / 100000, "
\n";
}
}
echo "done.
\n";
// will echo 'done.'
?>
===============================================================================
When you are working with IIS, PHP timeout is valid only when it's lower than
script timeout defined by IIS.
IIS 5 has a default timeout of 300 seconds. If you need a higher timeout, you
also have to change IIS properties. Otherwise, your server will stop your PHP
script before it reaches its own timeout.
===============================================================================
this work to fine html streaming AND time pass limit
===============================================================================
A nice workaround to have a real max_execution_time (needs posix and pcntl):
===============================================================================
To find out the currently set time limit, use
If set_time_limit has been previously called in the script, the result will be
the value which was passed to set_time_limit (and not, as the function name
"ini_get" appears to suggest, the value from the php.ini file).
===============================================================================
If you set the number of seconds to a very large number (not many ppl do that,
but just in case) then php exits with a fatal error like :
Fatal error: Maximum execution time of 1 second exceeded in /path/to/your/
script/why.php
[EDIT by danbrown AT php DOT net: This is due to the limit of 32-bit signed
integers.]
===============================================================================
if you are running a script that needs to execute for unknown time, or
forever.. you may use
set_time_limit(0);
.....
...
..
.
and at the end of the script use flush() function to tell phpto send out what
it has generated.
===============================================================================
One thing that I wish I had found sooner is, if you're using php-cli and really
need to limit the executation time, and if you're in *nix, you can use
"timeout" which is part of coreutils.
For example:
timeout 5 /usr/bin/php -q /path/to/script
and it will kill it if it takes longer than 5 seconds.
I had a few quick php scripts I wrote for use with cacti for example.
===============================================================================
If you are streaming large data from database, it is counted towards the max
exec time.
===============================================================================
Timeouts after five minutes in IIS on Windows are caused by an inherited CGI
Timeout value of 300 seconds. This is not a PHP problem. The fix is to add
custom values for the files or directories that need longer to run.
In IIS 5.0 or 7.0 (beta as of this note), you can change this value on a fairly
granular level using IIS Manager, under (roughly) YOURSITE -> Properties ->
Home Directory -> Configuration (button) -> Options, but in IIS 6.0, this
functionality is turned off (!), so you have to get into the Metabase.
Find the site number in Metabase Explorer (e.g., 12345678), then from CMD
prompt:
[get to the scripts dir]
cd C:\Inetpub\AdminScripts
[this for each subdirectory from off the site root]
cscript adsutil.vbs CREATE W3SVC/12345678/root/"MY SUBDIRECTORY"
IIsWebDirectory
[this for the file in question]
cscript adsutil.vbs CREATE W3SVC/12345678/root/"MY SUBDIRECTORY"/
ILikeToTimeOut.php IIsWebFile
[this to set the timeout]
cscript adsutil.vbs set W3SVC/12345678/root/"MY SUBDIRECTORY"/
ILikeToTimeOut.php/CGITimeout "7200"
Note: "7200" is 2 hours in seconds, but can be whatever.
I derived the solution above from this fine article:
http://www.iis-resources.com/modules/AMS/article.php?
storyid=509&page=3
===============================================================================
Regarding what 'nytshadow' said, it's important to realize that
max-execution-time and the set_time_limit functions measure the time that the
CPU is working on the script. If the script blocks, IE: for input, select,
sleep, etc., then the time between blocking and returning is NOT measured.
This is the same when running scripts from the command line interface. So if
you've got a log parser written in PHP that tails a file, that program WILL
fail eventually. It just depends how long it takes to read in enough input to
process for 30 seconds.
If you're writing a command line script that should run infinitely, setting
max-execution-time to 0 (never stop) is HIGHLY recommended.
===============================================================================
Unfortunately, a script which gets into an infinite loop can produce an
alarming amount of output in only a few seconds. I was attempting to debug a
script, and I added
to the beginning of the script. Unfortunately, even two seconds of run time
produced enough output to overload the memory available to my browser.
So, I wrote a short routine which would limit the execution time, and also
limit the amount of output returned. I added this to the beginning of my script
and it worked perfectly:
===============================================================================
If you use Apache you can change maximum execution time by .htaccess with this
line
php_value max_execution_time 200
===============================================================================
If you're using PHP_CLI SAPI and getting error "Maximum execution time of N
seconds exceeded" where N is an integer value, try to call set_time_limit(0)
every M seconds or every iteration. For example:
query($sql);
while ($row = $stmt->fetchRow()) {
set_time_limit(0);
// your code here
}
?>
===============================================================================
If you got something like:
msg: set_time_limit() [function.set-time-limit]: Cannot set time limit in safe
mode
try this:


View Products Sample -
Populate Dataset through ODP.NET using Visual Basic .NET
(VB.NET)
Table of Contents
The purpose of this sample application is to
demonstrate how to populate a DataSet through Oracle Data
Provider for .NET (ODP.NET) using VB.NET .
ODP.NET offers faster and reliable access to
Oracle Database by using Oracle Native APIs. ODP.NET provides
features to access any .NET application. The data access
through ODP.NET can be done using a collection of classes
contained in Oracle.ManagedDataAccess assembly. Figure 1.1 describes how data is accessed
using ODP.NET.
Figure 1.1 Data Access
Using ODP.NET
DataSet is a
major component of ADO.NET. It is an in-memory cache of the
data retrieved from the database. OracleDataAdapter
represents a set of data commands and a database connection
that is used to fill the DataSet based on
the query given. OracleCommand
represents SQL statements to execute against datasource. OracleConnection is used to build the database
connection.
This Visual Basic .NET (VB.NET) sample
application displays a product catalog for a product store.
When this sample is run, a list of products from database
appears in a DataGrid (in tabular
format). The DataGrid gets populated
from a DataSet which is filled by a
DataSource using OracleDataAdapter .
Hence demonstrating how to populate DataSet
through Oracle Data Provider for .NET (ODP.NET).
When this
sample application is run, a list of Products from database is
displayed as shown in figure 1.2, on clicking the 'Close'
button, the application gets closed.
Figure 1.2: Screen Shot for DataSet
Populate VB Sample
-
Visual Basic.NET
(VB.NET) installed with Visual Studio 2005/2008/2010/2012.
-
Oracle11g Database or higher running
SQL*Net TCP/IP listener (can be downloaded here )
-
Oracle Data Provider for .NET
(ODP.NET) (can be downloaded here )
Unzip DSPopulateVB.zip using Winzip or command utility
to your convenient directory referred
to as <Extract_Dir> . Extraction of the zip file
results in the creation of 'DSPopulateVB'
directory. Refer Description of Sample Files section
for more details.
Connect to your database as any user and
run the script <Extract_Dir>\DSPopulateVB\Setup\DatabaseSetup.sql
at the SQL prompt
SQL>
@<Extract_Dir> \DSPopulateVB\Setup\DatabaseSetup.sql
This script will prompt for the
username, password and connectstring. You may choose any
existing username. Products table will get
created in specified users schema.
1. Ensure that the Database setup
has been completed.
2. Open DSPopulateVB.sln using Visual Studio .NET from <Extract_Dir> \DSPopulateVB
folder.
3. Edit ConnectionParams.vb file to change the database
connection parameters like username, password and TNSNames
for the database.You need to input the same values of
connection parameters as given while doing the Database
Setup. Save this file.
4. Ensure that the
following .NET Component References have been added to DSPopulateVB project:
System,
System.Data,
System.Drawing,
System.Windows.Forms,
System.XML,
Oracle.ManagedDataAccess.
To add the above .NET
Components
a)Go to Menu ->View-> Solution Explorer.
b)Right click on DSPopulateVB project,
choose 'Add Reference'.
c)Choose the above .NET Components from the list displayed.
d)Click 'Select', then OK.
e) The chosen .NET component gets added to the project.
5. Build and
run the sample.
Following is the directory structure
of the DSPopulateVB.zip :
| Directory |
File Name |
Description |
DSPopulateVB\doc |
Readme.html |
This file |
| otn.css |
This is a cascading
stylesheet applied to Readme.html |
DSPopulateVB\doc\images |
*.gif |
This folder contains
images used in the Readme.html file |
DSPopulateVB\src
|
ConnectionParams.vb |
This VB file contains
parameters for database connection |
| ViewProductsFrm.vb |
This VB file contains
source code for UI for sample application and its
functionality |
| DSPopulateVB.csproj |
VB project file |
| ViewProductsFrm.resx |
.NET XML Resource
Template (this file gets automatically generated when a
Visual Studio Project is created) |
| DSPopulateVB.sln |
Visual Studio Solution |
DSPopulateVB\Setup |
DatabaseSetup.sql |
This is a SQL script
file |
|


Overview
ESS File
Details
| ESS File Last Reviewed: | {{ essFile?.needsAssessment?.modifiedOn | date: 'dd-MMM-yyyy' }} | N/A |
|---|---|---|
| ESS File Last Reviewed by: | {{ essFile?.needsAssessment?.reviewingTeamMemberDisplayName }} | N/A |
| Supports Issued: | {{ essFile?.supports?.length === 0 ? 'No' : 'Yes' }} | N/A |
| Insurance: | {{ essFile?.needsAssessment?.insurance }} |
Current
Household
Pets
Needs
Identified
| Food |
|---|
| Lodging |
| Incidentals |
| Clothing |
| Transportation |
Evacuation
Impact


Prior to release 8.1, each parallel query region is then subdivided into 3 block ranges, called rowid ranges, on the approximate ratio of 9:3:1 blocks. More exactly, rounding down, the last rowid range is comprised of the last 1/13th of the blocks, the middle rowid range covers the last ¼ of the remainder, and the first rowid range contains the rest of the blocks for the region. In release 8.1, each parallel query region is subdivided into 13 or more approximately equally sized rowid ranges.
A query coordinator process allocates rowid ranges to parallel query slaves. Each slave begins by reading the first rowid range for its region. If any slave finishes reading its rowid ranges before other slaves have commenced reading their final rowid ranges, then the query coordinator will allocate one of the remaining rowid range to the available slave process. This is called dynamic load balancing.
If disk affinity has been established, the query coordinator ensures that each parallel query slave reads all rowid ranges for which it has affinity before relieving load elsewhere. Where applicable, a parallel query slave is said to have affinity for disks that are attached to the node on which it is running. In shared disk environments, affinity may be arbitrarily established between instances and disks. In single instance environments, affinity may be arbitrarily established between individual parallel query slaves and disks in order to minimize disk head contention between the slaves.
Considering the variety and complexity disk configurations, Oracle does an admirable job of maintaining affinity and balancing load during parallel query processing. In the few cases where Oracle's disk affinity mechanism seems counter-productive, you can disable it by setting the _affinity_on parameter to FALSE.
It is sometimes suggested that the degree of parallelism for parallel table scans should be set in proportion with the number of CPUs available. However, when scanning a table on concatenated datafiles in parallel, the degree of parallelism should be limited to one less than the number of disks used, even if additional CPU capacity is available. Exceeding this degree of parallelism scarcely improves response times if at all and places unnecessary load on the I/O subsystem.
If you have an excessively large table that needs to be scanned in parallel, then striped logical volumes can be used for each of the datafiles to improve the transfer rate as well. However, be warned that such simultaneous sequential reading has the ability to very quickly congest other components in your I/O subsystem, such as disk controllers and I/O buses. If you configure tablespaces for fast parallel table scans in this way, then it is strongly recommended that each of the disks in any one tablespace should be on a separate (but not necessarily dedicated) disk controller. So far as possible, multiple I/O buses should be used for each tablespace as well. In some operating systems the amount of kernel memory dedicated to DMA transfers may also need to be increased.
| Copyright © Ixora Pty Ltd |
|


The Ford Motor Company (commonly referred to as simply Ford) is an American multinational automaker headquartered in Dearborn, Michigan, a suburb of Detroit. It was founded by Henry Ford and incorporated on June 16, 1903. The company sells automobiles and commercial vehicles under the Ford brand and most luxury cars under the Lincoln brand. Ford also owns Brazilian SUV manufacturer, Troller, and Australian performance car manufacturer FPV. In the past it has also produced tractors and automotive components.
Ford owns a 2.1% stake in Mazda of Japan, an 8% stake in Aston Martin of the United Kingdom, and a 49% stake in Jiangling of China. It also has a number of joint-ventures, two in China (Changan Ford Mazda and Ford Lio Ho), one in Thailand (AutoAlliance Thailand), one in Turkey (Ford Otosan), and one in Russia (Ford Sollers). It is listed on the New York Stock Exchange and is controlled by the Ford family, although they have minority ownership.
Chevrolet /ʃɛvrəˈleɪ/, colloquially referred to as Chevy and formally the Chevrolet Division of General Motors Company, is an American automobile division of the American manufacturer General Motors (GM). Louis Chevrolet and ousted General Motors founder William C. Durant started the company on November 3, 1911 as the Chevrolet Motor Car Company. Durant used the Chevrolet Motor Car Company to acquire a controlling stake in General Motors with a reverse merger occurring on May 2, 1918 and propelled himself back to the GM presidency. After Durant's second ouster in 1919, Alfred Sloan, with his maxim "a car for every purse and purpose," would pick the Chevrolet brand to become the volume leader in the General Motors family, selling mainstream vehicles to compete with Henry Ford's Model T in 1919 and overtaking the Model T as the best-selling car in the United States by 1929.
Toyota Motor Corporation (Japanese: トヨタ自動車株式会社 Hepburn: Toyota Jidōsha KK?, IPA: [toꜜjota], /tɔɪˈoʊtə/) is a Japanese automotive manufacturer headquartered in Toyota, Aichi, Japan. In March 2014 the multinational corporation consisted of 338,875 employees worldwide and, as of November 2014, is the eleventh-largest company in the world by revenue. Toyota was the largest automobile manufacturer in 2012 (by production) ahead of the Volkswagen Group and General Motors. In July of that year, the company reported the production of its 200-millionth vehicle. Toyota is the world's first automobile manufacturer to produce more than 10 million vehicles per year. It did so in 2012 according to OICA, and in 2013 according to company data. As of July 2014, Toyota was the largest listed company in Japan by market capitalization (worth more than twice as much as #2-ranked SoftBank) and by revenue.
Bayerische Motoren Werke AG (English: Bavarian Motor Works), commonly known as BMW or BMW AG, is a German automobile, motorcycle and engine manufacturing company founded in 1916. BMW is headquartered in Munich, Bavaria, Germany. It also owns and produces Mini cars, and is the parent company of Rolls-Royce Motor Cars. BMW produces motorcycles under BMW Motorrad, and plug-in electric cars under the BMW i sub-brand. BMW is one of the best-selling luxury automakers in the world.


Building RyujiNX (Windows only for now):
Support for OSX and Linux is limited and not really recommended for use as of late. To get started; you will need Visual Studio 2015 or later. You will also need the .NET Core 2.0 or greater runtime installed.
Step one:
Download the latest version of Visual Studio from here. Once you have that done, make sure to run the installer, and select the C# Language package(s) and NET Core 2.0.
Step two: Variant one
After the installation of Visual Studio is done; go ahead and copy the Clone link from GitHub (From here~ via Clone or Download --> Copy HTTPS Link. Or you can download the ZIP tarball.) You can Git Clone the repo by using the GitBash, or you may use the second variant.
Step two: Variant two
Download the ZIP Tarball. Then extract it to a directory of your choice.
Step three:
Open the vsproj file in Visual Studio, wait for it load the solution; and then switch the Debug build type to release. Then build. The build directory is "root/bin/release/etc/etc."
Step four:
In order to run a NRO or NSO; simply drag the file onto the Executable. The app will launch, and the homebrew/application will begin emulation. Do keep in mind, that emulation is finicky, and will most likely crash at some point.


Main-Template
Please wait...
Thank you for purchasing our admin template. Feel free to contact us any time. We have a dedicated team to provide you the best support. If you want any queries please contact live chat or email<EMAIL_ADDRESS>If You Love Our Template Design Please don't forgot to rate it. Thank you so much!
Pinlist - Multipurpose listing,Classifieds and Directory usages Big Bundle HTML Template. This Template Includes 163 HTML Pages & 65 Plugins.Here we are using the multiple types of Categories like Classifieds,RealEstate,Education,Jobs,Business Directory,Coupons,Cars,E-Commerce,Market Place,Auction,Tours & Travels,Domains,Books,Doctors,ICO List,Wedding,Knowledge Base,Software etc.
It is very easy to customize.It has beautiful Home Pages and useful inner pages and all the important sections required by a classified website.We need to very help to easy to design and save your time.
Once you purchase Pinlist Multipurpose listing,Classifieds and Directory HTML Template you will be enabled to get free download of all future updates.
HTML/ ├── assets ├── CSS ├── fonts ├── images ├── js ├── plugins ├── video
dashboard.css is the main CSS file located in assets/css/ folder of the package. Whole CSS file is well indexed with topic and its related code.
Pinlist custom.js is the mail javascript file having all the js code. File is located in assets/js/ folder. This file code is also well formatted and section in different respective function names.
Along with this chart library based js code and dashboard based js code are added in separate files for ease of use of user.
Google fonts are used in the template. They are as follows: Google Fonts
All Images are used: Pexels.com


Open source code hacker and blockchain enthusiast.
I started the coding formally for a living 15 years ago, self educated and highly motivated, the passion for computers and technology made me learn what was needed, then the real world fine tuned the coding to be effective and fast problem solver.
Seduced the the financial electronic markets i started to code trading strategies and learning all i can in the field of market engine technologies several years ago.
Defrauded on how financial system works i moved on. In the last years, with the irruption of blockchain technology i found the perfect spot to develop. This new way of funding projects is simply much more better than what we had, the transparency is so much needed, the privacy, the freedom among a huge amounts of other features this technology is bringing simply fits perfect with my lifestyle and way of think and work.
Oxarbitrage sympathize with all kind of projects that can assure freedom and elevate humankind to a new, better era.
I belive in open source development and for that reason i prefer working with the open source community, with the most permissive licences(MIT). I like to contribute my buggy code with others as i used others so many times in the past, now is time to give back something.
In the future i see myself making my own dreams came true by developing futuristic software that contributes to humanity as a whole.
oxarbitrage logo is from the japanese anime Ghost in the Shell, is the logo used by a character named "Laughing Man", an expert hacker that use the logo to hide himself on video camara.
I really like the series and the logo too, it is an icon of cyberpunk culture(like the A in a circle), no other special reason for using it.


'Crude, personal and highly sexual' notes left with sweets on women's cars parked at Yate station
Police are appealing for information
by Zosia EyresWomen have found "crude, personal and highly sexual" notes left on their cars after they parked at a South Gloucestershire station.
Twice the "disturbing" notes were left with gifts including lollipops and handfuls of Quality Street chocolates.
Police are now appealing for information about the notes, which have caused the young women "an understandable amount of concern".
A spokesperson for British Transport Police said: "Detectives are appealing for witnesses after two young women found a series of disturbing notes and gifts on their cars in Yate station, Gloucestershire.
"Over a two week period between 30 October and 13 November, both victims parked their cars in the morning at the station and on three separate occasions returned in the evening to find disturbing notes left on the windscreens of their cars.
"The six notes were all of a crude, personal and highly sexual nature, causing the young women an understandable amount of concern. On two occasions, lollipops and handfuls of Quality Street chocolates were left with the notes.
"Officers are appealing for anyone who may have seen anyone leaving notes or behaving suspiciously in the car park of Yate station during this time period to get in touch with them.
"Anyone with information can contact BTP by texting 61016 or calling 0800 40 50 40 quoting reference 655 of 01/11/2019."
For the latest news in and around Bristol, visit and bookmark Bristol Live's homepage.


Welcome to my personal API server. This is its only publicly browseable HTML page. Snazzy, ain't it? Everything here except for this page is served via Rob's HTTP JSON API running on Node.js.
Thanks for stopping by.
-Rob


Apache Lucene Search Engine
Search
No content found for this query search
Search result:
#
File
Score
Link


Add the following dependencies:
io.ebean ebean 11.44.1 io.ebean ebean-querybean 11.44.1 io.ebean querybean-generator 11.44.1 provided io.ebean ebean-test 11.44.1 test
ebean-test should be added as a test dependency. This configures Ebean for running tests including automatic use of docker containers for Postgres, MySql, Oracle, SqlServer, Hana + support for H2 and SqlLite.
Refer to: docs / testing
Add the maven tile into the build / plugins
section to perform build time enhancement
of the entity beans, @Transactional methods and query beans.
io.repaint.maven tiles-maven-plugin 2.12 true io.ebean.tile:enhancement:11.44.1
The maven tile above will enhance the code at build time for both src/main
and src/test
. This is simpler than defining the plugin in the traditional (non-tile)
fashion and is the preferred approach.
If you want to specify the maven enhancement plugin in 'normal' non-tile fashion see maven plugin.
Add the dependency for the JDBC Driver(s) you want to use.
com.h2database : h2 : 1.4.191
org.postgresql : postgresql : 42.2.2
mysql : mysql-connector-java : 8.0.11
com.microsoft.sqlserver : mssql-jdbc : 6.4.0.jre8
com.oracle.jdbc : ojdbc8 : <IP_ADDRESS>
To generate Kotlin query ebeans add the kotlin-kapt
maven tile.
This tile brings in the kotlin-maven-plugin with configuration for kotlin-querybean-generator
annotation processor. As such remove
the kotlin-maven-plugin that will already
be in the pom.xml (as the tile will bring in one that is configured to run the annotation processor).
Add the maven tile into the build / plugins
section of the pom.xml.
io.repaint.maven tiles-maven-plugin 2.12 true io.ebean.tile:enhancement:11.44.1 io.ebean.tile:kotlin-kapt:1.5


Self starter, creative thinker, love to take a deep dive into complex problem solving. Looking to join a strong team as a junior software developer. Born and rasied in Nashville, love seeing the tech community thrive here.
A recent graduate of Nashville Software School where I had six months of 40+ hours a week training, working through all stages of web development. Intense training and accelerated learning in the latest technologies. Experience in solo and group full stack software development.


Select
Section
Status
Waitlist Status
Info
Day(s)
Time in Pacific Time
Location
Units
Instructor(s)
Lec 1
Open394 of 400 Enrolled6 Spots Left
No Waitlist
MW
4pm-5:50pm
Moore Hall 100
4.0
Stahl, H.A.


| DOSE: |
|
inhaled |
Ether |
(liquid) |
[Erowid Warning: The “water extraction” method is ineffective in separating diethyl ether from the volatile hydrocarbon liquids/gases in “starter fluid”. Our understanding of the literature is that there is no such thing as safe use of volatile hydrocarbon gases: their psychoactive effects are inseparable from nerve and organ damage.]
First I want you to realize: The reason why this trip lasted so long was because I refueled myself at different times, and because I hit the bottle wrong and possibly swallowed some fumes.
Today I was greeted in gym class, by my friend Cheech, with a humongous smile on his face asking me 'Dude, you want some Ether?'. I laughed because of the rarity of this substance (in high-school). He then pulled a water-bottle with it's contents filled approximately 1/10 the way up with a clear substance. He then explained how he had extracted this Ether personally, from Engine starting fluid. This seemed quite impressive and made me think of how much more granduer it was. I have had my share of marijuana, cigarettes, alcohol, caffeine, Valium and other benzodaizepines, Vicodin, opium, N20, House-Hold Inhalants, Ecstasy, Adderal, and DXM. None of these could help me deal with what happened next.
 I'm enjoying this quite alot and INSIST we take more hits during our next period (lunch). So we do right outside, as we watch our breathe congeal into thicker clouds of smoke (it was snowing outside so our breathe was visible) I realize just how much of a fall I set myself up for.
While stumbling my way to the library with my friend Cheech a couple of our mutual friends compliment on the gasoline-like smell that follows us. I started to witness everything out of my focus wave and flicker. Not long after-wards, everything was out of focus. I was out of my mind with a numbness of Vicodin, the blur of alcohol and marijuana, and the dumb-foundedness of Valium.
I floatingly witness how fast my lunch period was completely over. I then sat down in history. My face was on fire, my hands were blocks of ice. My breathe was thin, and I felt suffocated, as I sweat a large profusely. I felt an immense fear of impending doom. The rest of what is told is unclear and may lack in detail.
I stumbled my way out of the classroom and my friend Gizmo accompanied me. I passed out and woke up with her handing me water and aiding my current intoxicated condition.  The rest of my day was unconcentrated and I was actually still tempted to do more Ether. It must be addictive to make someone whom it almost killed, to pay a second visit.
Ether is not for me. From what I experienced I don't think it is for anyone. It is entirely up to you whether you want to inhale this chemical.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


My GitHub activity according to github-readme-stats.vercel.app.
I like to code around these topics. Click on the icon to see original repos in that language or library.


Hi there,My name is Feisal Hasham and this is where you can have a look at my work.Below on the page are my contact details for any queries,complaints or even suggestions.
HAPPY CODING
Hi there,My name is Feisal Hasham and this is where you can have a look at my work.Below on the page are my contact details for any queries,complaints or even suggestions.
HAPPY CODING
My name is Feisal Hasham. I have finished my A levels and am now studying programming and shall then pursue a career in software programming.I am a team-player and always ready to learn new things
I always liked solving puzzles and experimenting which is something very similar to programming hence i got into this field
Please get in touch with me on my email<EMAIL_ADDRESS>for any query whatsoever


3: Update and Cache (prev) or 5: Dirty and Lazy (next)
This is a demonstration of step four "what do you mean i can have a convenient api" Reactive, from Understanding Reactive Programming.
We've taught JRVs to do things when they change, with their .onchange handlers, which means that our old example code no longer needs to be covered in log statements (which is a huge improvement.)
var logger = NewData => console.log(NewData),
A = new JRV(0),
B = new JRV(5),
X = new JRV( () => A.v + B.v )
.needs([A,B])
.onchange(logger);
console.log( X.v );
A.v = 10;
A.v = 20;
A.v = 30;
X.v = () => (A.v*2) + (B.v*2);
This should still log, in order, 5, 15, 25, 35, and 70, even though we ditched all the log statements, and stopped paying attention to where things were happening.
The value of Reactive is starting to deliver.
class JRV { // reactive node
constructor(comp = (() => true), onchange = (() => true)) {
this.comp = comp;
this.change_handler = onchange;
this.callbacks = [];
this.update();
}
should_notify(cb) {
this.callbacks = this.callbacks.concat(cb);
}
needs(Dep) {
if (Array.isArray(Dep)) { Dep.map(d => d.should_notify(this.make_notifier())); }
else { Dep.should_notify(this.make_notifier()); }
return this;
}
make_notifier() {
return (() => this.update());
}
onchange(newOnChange) {
this.change_handler = newOnChange;
return this;
}
set v(newComp) {
this.comp = newComp;
this.update();
this.callbacks.map(cb => cb());
}
get v() {
return this.value;
}
update() {
var isFunc = (typeof this.comp === 'function'),
oldValue = this.value;
this.value = (isFunc? this.comp() : this.comp);
if (this.value !== oldValue) {
this.change_handler(this.value, oldValue);
}
return this.value;
}
}


"Pushing Tin" is air traffic controllers' slang for getting planes in line for landing. That's the responsibility of Nick Falzone (John Cusack), one of the sharpest controllers at New York's Terminal Radar Approach Control center. Blessed with a lightning-fast mouth and mind, he's become known as "The Zone" for his ability to sort out potential problems in the sky before they happen.
What he's not so hot at doing is sorting out his own emotions, particularly after the enigmatic Russell Bell (Billy Bob Thornton, with a slimmer than usual physique and newly acquired hair) joins the TRACON team and almost instantly arouses Nick's suspicions. "Pushing Tin," an agreeably twisted comedy-drama from the gifted British director Mike Newell ("Four Weddings and a Funeral," "Donnie Brasco"), tracks the slow unravelling of Nick's mind and his marriage as he becomes obsessed with Russell and his comely young wife Mary (Angelina Jolie), who guzzles vodka by the bucketful to deal with the stress in her home.
Controllers' wives, we learn, refer to themselves as "firsts," "seconds," etc., a telling sign of the failure rate of most controllers' relationships. The screenplay by Glen Charles and Les Charles offers many such observations, and it's no surprise to find it was based on a New York Times Sunday Magazine feature that investigated the pressure-cooker world of guys like Nick and Russell. But rather than playing the subject matter for high drama, "Tin" finds a certain sardonic humor in the paradox of men and women who can't cope with their own problems, yet take the lives of thousands of travelers into their hands daily. We're told an air traffic controller saves more lives in one shift than a surgeon does in an entire career. "Tin" is also very much in the same school as other Cusack comedies, such as "Grosse Pointe Blank" and "Say Anything," movies that didn't break any box office records when they were originally released, but have built up fervent followings in the years since. This stage-trained actor generally has uncommonly good taste in material, as well as an impressive capacity for playing seemingly normal guys who have to deal with issues much bigger than themselves. Nick may be only a breath away from flat-out nuttiness, but Cusack obviously likes him nonetheless, and gives him a largely sympathetic reading. Subtlety and nuance are the keys to Thornton's performance as well, which keeps us guessing as to the true nature of Russell's personality. In the potentially tricky role of Nick's wife Connie, the luminous Cate Blanchett adopts a dead-on Long Island accent while avoiding turning the woman into a caricature. Jolie's abrasive/pathetic Mary - who growls "I'm too sober for this" when Nick tries to engage her in conversation - is also colorful and funny.
James Sanford
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


---
layout: home
title: Emanuel Gonçalves
subtitle: Assistant Professor @ INESC-ID & IST
---
My research activities fall under the areas of Cancer Systems Biology, Bioinformatics and Machine Learning and focus on the development of computational methods to provide data-driven hypotheses of biological phenomena and precision medicine solutions.