text:
|Version 41 (modified by MikolajKonarski, 5 years ago)
Detailed design rationale for the changes in GHC for emulating +RTS -s through eventlog events
The following subsections are titled after the GHC commits they describe. The remaining sections contain problem analysis, design discussion and drafts and are retained to show the motivation and the history of the changes.
Calculate the total memory allocated on a per-capability basis
In addition to the existing global method, we calculate the total memory allocated on a per-capability basis. For now we do it both ways and assert they give the same grand total. At some stage we can simplify the global method to just take the sum of the per-cap counters.
Change the presentation of parallel GC work balance in +RTS -s
We change the presentation of parallel GC work balance in +RTS -s and also we rename internal variables to make the names match what they hold. The parallel GC work balance is calculated using the total amount of memory copied by all GC threads, and the maximum copied by any individual thread. You have serial GC when the max is the same as copied, and perfectly balanced GC when total/max == n_caps.
Previously we presented this as the ratio total/max and told users that the serial value was 1 and the ideal value N, for N caps, e.g.
Parallel GC work balance: 1.05 (4045071 / 3846774, ideal 2)
The downside of this is that the user always has to keep in mind the number of cores being used. Our new presentation uses a normalised scale 0--1 as a percentage. The 0% means completely serial and 100% is perfect balance, e.g.
Parallel GC work balance: 4.56% (serial 0%, perfect 100%)
Some more examples of the new form from nofib/parallel on a 2-core machine with -N2:
ray: Parallel GC work balance: 13.81% (serial 0%, perfect 100%) gray: Parallel GC work balance: 28.25% (serial 0%, perfect 100%) prsa: Parallel GC work balance: 29.16% (serial 0%, perfect 100%) coins: Parallel GC work balance: 62.43% (serial 0%, perfect 100%) blackscholes: Parallel GC work balance: 15.25% (serial 0%, perfect 100%) minimax: Parallel GC work balance: 79.86% (serial 0%, perfect 100%) nbody: Parallel GC work balance: 52.39% (serial 0%, perfect 100%)
and a couple examples from other parts of nofib:
nofib/gc/circsim: Parallel GC work balance: 22.35% (serial 0%, perfect 100%) nofib/gc/fibheaps: Parallel GC work balance: 7.07% (serial 0%, perfect 100%) nofib/spectral/clausify: Parallel GC work balance: 3.48% (serial 0%, perfect 100%) nofib/real/cacheprof: Parallel GC work balance: 0.90% (serial 0%, perfect 100%)
Add new eventlog events for various heap and GC statistics
They cover much the same info as is available via the GHC.Stats module or via the '+RTS -s' textual output, but via the eventlog and with a better sampling frequency.
We have three new generic heap info events and two very GHC-specific ones. (The hope is the general ones are usable by other implementations that use the same eventlog system, or indeed not so sensitive to changes in GHC itself.)
The general ones are:
- total heap mem allocated since prog start, on a per-HEC basis
- current size of the heap (MBlocks reserved from OS for the heap)
- current size of live data in the heap
Currently these are all emitted by GHC at GC time (live data only at major GC).
The GHC specific ones are:
- an event giving various static heap paramaters:
- number of generations (usually 2)
- max size if any
- nursary size
- MBlock and block sizes
- a event emitted on each GC containing:
- GC generation (usually just 0,1)
- total bytes copied
- bytes lost to heap slop and fragmentation
- the number of threads in the parallel GC (1 for serial)
- the maximum number of bytes copied by any par GC thread
- the total number of bytes copied by all par GC threads (these last three can be used to calculate an estimate of the work balance in parallel GCs)
Adjust the eventlog description header for the spark counter event
The EventLogFormat.h described the spark counter fields in a different order to that which ghc emits (the GC'd and fizzled fields were reversed). At this stage it is easier to fix the ghc-events lib and to have ghc continue to emit them in the current order.
Move trace of cap delete from shutdownCapability to freeCapability
Will let us do final per-cap trace events from stat_exit(). Otherwise we would end up with eventlogs with events for caps that have already been deleted.
Emit final heap alloc events and rearrange code to calculate alloc totals
In stat_exit we want to emit a final EVENT_HEAP_ALLOCATED for each cap so that we get the same total allocation count as reported via +RTS -s. To do so we need to update the per-cap total_allocated counts.
Previously we had a single calcAllocated(rtsBool) function that counted the large allocations and optionally the nurseries for all caps. The GC would always call it with false, and the stat_exit always with true. The reason for these two modes is that the GC counts the nurseries via clearNurseries() (which also updates the per-cap total_allocated counts), so it's only the stat_exit() path that needs to count them.
We now split the calcAllocated() function into two: countLargeAllocated and updateNurseriesStats. As the name suggests, the latter now updates the per-cap total_allocated counts, in additon to returning a total.
Fix the timestamps in GC_START and GC_END events on the GC-initiating cap
There was a discrepancy between GC times reported in +RTS -s and the timestamps of GC_START and GC_END events on the cap, on which +RTS -s stats for the given GC are based. This is fixed by posting the events with exactly the same timestamp as generated for the stat calculation. The calls posting the events are moved too, so that the events are emitted close to the time instant they claim to be emitted at. The GC_STATS_GHC was moved, too, ensuring it's emitted before the moved GC_END on all caps, which simplifies tools code.
Add the GC_GLOBAL_SYNC event marking that all caps are stopped for GC
The event indicates that we're doing a stop-the-world GC and all other HECs should be between their GC_START and GC_END events at that moment. We don't want to use GC_STATS_GHC for that, because GC_STATS_GHC is for extra GHC-specific info, not something we have to rely on to be able to match the GC pauses across HECs to a particular global GC.
The analysis of the semantics of +RTS -s
Here is a sample output of +RTS -s that was used in the early design phases for the corresponding events. The output is annotated with a discussion of new events required to simulate it in ThreadScope? (for a user-selected time interval). A list of the new required events is in the second part of this page. Here is a screenshot of what we can already do using the current set of events. It so happens we can do as much for the whole runtime as for the selected time intervals with the currently available events, but in general, intervals require more kinds of events and more samples. Similarly, when we visualize some of this as graphs and especially graphs of rates of change of some values (e.g., memory usage), more frequent sampling will be required.
The first line of +RTS -s follows.
237,179,528 bytes allocated in the heap
We'd need an extra event, emitted at each GC, with the allocation since the previous GC. (We really don't want an event for every memory allocation, that would be impractical and very slow.)
52,785,584 bytes copied during GC
An event with a summary of all copying done, emitted after the end of each GC.
17,272,336 bytes maximum residency (5 sample(s))
A separate event for that, perhaps emitted only after major GC when we know how much memory is really used by the program. The docs explain the "n samples" above saying "only checked during major garbage collections".
6,493,328 bytes maximum slop
We also need an extra event for slop, probably emitted rarely.
45 MB total memory in use
The peak "total memory in use" to date is stored in the peak_mblocks_allocated global var. It changes often, but we can't spam too much, so let's emit it only after each GC, and not the peak value to date, but the current value.
(0 MB lost due to fragmentation)
Fragmentation is calculated in the RTS -s code as follows:
(peak_mblocks_allocated * BLOCKS_PER_MBLOCK * BLOCK_SIZE_W - hw_alloc_blocks * BLOCK_SIZE_W) / (1024 * 1024 / sizeof(W_))
Note that it uses the peak and high-water values and we instead want the current values. It's calculated as the difference of mblock and block allocations, so we need an extra events for allocated block (mblocks are already recorded in "total memory in use" above).
Tot time (elapsed) Avg pause Max pause Gen 0 448 colls, 0 par 0.04s 0.04s 0.0001s 0.0016s Gen 1 5 colls, 0 par 0.07s 0.07s 0.0149s 0.0386s
The current GC events (in particular RequestParGC) seem to be enough to distinguish between seq and par GC. We'd need to split the current GC events into generations, though, to report for every generation separately. We may and up with two tables for the same GC info: one aggregated by cap, another by generations. Or, as long as there are only 2 generations, one table with both caps and generations, with the following rows: cap0&gen0, cap0&gen1, cap1&gen0, etc. Note that we don't want to report the CPU time, only the elapsed time, and that's fine.
Parallel GC work balance: 1.00 (6391526 / 6375794, ideal 2)
Let's ignore that one for now. JaffaCake? says we probably don't care about work balance and that he thinks it is computed in the simplest way. Detail are in http://community.haskell.org/~simonmar/papers/parallel-gc.pdf. The current computation seems to be the following: total words copied during parallel GCs divided by the sum over all parallel GCs of the maximal number of words copied by any thread in a given GC. Events needed: the events added above probably suffice, but quite a bit of extra state will have to be maintained when reading the events due to the rather complex formula for work balance.
MUT time (elapsed) GC time (elapsed) Task 0 (worker) : 0.04s ( 0.38s) 0.13s ( 0.17s) Task 1 (worker) : 0.00s ( 0.55s) 0.00s ( 0.00s) Task 2 (bound) : 0.41s ( 0.41s) 0.13s ( 0.13s) Task 3 (worker) : 0.00s ( 0.55s) 0.00s ( 0.00s)
JaffaCake? says the task information has questionable usefulness, so let's ignore that one for now. It's much more natural for us to present the same info per cap, not per OS thread (which the tasks basically are). Actually we do present the GC info per cap (not only total, as in +RTS -s) already and the total activity time per cap (which includes the mutator time) is much better conveyed by the graphs in ThreadScope?.
BTW, the time between events GCIdle and GCWork is still counted as GC time, so we may ignore the events for calculating the times spent on GC. OTOH, a summary of the GCIdle times, per hec, then the total, also as the percentage of all GC time could be useful. Probably we can do that cheaply along the way since we have to identify and sift out the GCIdle, GCDone and GCWork events anyway.
SPARKS: 300001 (17739 converted, 282262 overflowed, 0 dud, 0 GC'd, 0 fizzled)
Tell JaffaCake? that the example and description for the SPARKS count at
needs updating (not sure for which GHC version, though). Otherwise, we have enough events for that (we calculate this using the SparkCounters? events, but we could also use the precise per-spark events).
INIT time 0.00s ( 0.00s elapsed) MUT time 0.42s ( 0.41s elapsed) GC time 0.29s ( 0.13s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 0.71s ( 0.55s elapsed)
(Note that there may be more times listed above, e.g., the time overhead of profiling.) We can sum up the GC time from GC events. We get the total of GC and MUT time (and PROF, etc.) as the time from the start of the first event to the (end of) the last event, so from the total and the GC time we can normally compute MUT. We can assume that INIT and EXIT are negligible (I wonder when they are not) and anyway they don't make sense for when we summarize an interval. If we insist on them, a separate event for each would be required.
%GC time 89.5% (75.3% elapsed)
This line does not appear in threaded RTS, so we disregard it.
Alloc rate 564,074,971 bytes per MUT second
The events added above should suffice, except that we use elapsed time, not CPU time.
Productivity 59.0% of total user, 76.6% of total elapsed
The events added above should be enough. Again. we only do the elapsed case, so we'd show elapsed/elapsed, while the figures above are cpu/cpu and cpu/elapsed. JaffCake? thinks the latter mixture is OK. However, it mixes the productivity of CPU mutation vs elapsed mutation with the productivity of mutation vs GC. In this light, out figure will not be that bad, because it's consistent, even if not as accurate as the equally consistent first figure above.
BTW, the fact that the second figure is higher (I can reproduce it), shows a problem with clocks or some other problem. I'd guess the elapsed time should always be higher than the CPU time, shouldn't it?
The list of considered new events (the actual implementation closely follows this draft, even though not all details match)
There is a wealth of statistics around heaps and GC. Some of the stats are reasonably common, shared by different implementations while many more are highly specific to a particular implementation. Even if we ignore RTSs other than GHC, we still have an issue of flexibility for future changes in GHC's RTS.
Our solution is to split the stats into two groups, a general group that make sense in many implementations, and a second that are highly GHC-specific. Analyses and visualisations based on the first group are likely to be portable to other RTS instances and changes in GHC's RTS. The second is likely to have to change when GHC changes, but it does at least contain the less frequently used info and does not need so much visualisation.
New general memory stats events
- EVENT_HEAP_ALLOCATED (alloc_bytes): is the total bytes allocated over the whole run by this HEC. That is we count allocation on a per-HEC basis. This event is in principle not tied to GC, it could be emitted any time.
- EVENT_HEAP_SIZE (heap_capset, size_bytes): is the current bytes allocated from the OS to use for the heap. For the current GHC RTS this is the MBlocks, kept in the mblocks_allocated var. Again, this in principle could be emitted any time. The maximum accuracy would be to emit the event exactly when MBlocks are allocated or freed.
- EVENT_HEAP_LIVE (heap_capset, live_bytes): is the current amount of live/reachable data in the heap. This is almost certainly only known after a major GC.
New GHC-specific general memory stats events
- EVENT_HEAP_INFO_GHC (heap_capset, gens, max_size, nursary_size): various static parameters relating to the heap. In particular it tells us the number of generations.
- EVENT_GC_STATS_GHC (heap_capset, gen, copied, slop, frag, was_par, max_copied, avg_copied): various less used GC stats. These are all GHC-specific, and specific to current GC design. It includes the generation of this GC so along with knowing the total number of generations we can identify major/minor GCs. We also include memory lost to slop and fragmentation. The final three are to do with parallel GC: the first is just a flag to indicate if this GC was a parallel GC, the ratio of the other two gives the parallel work balance (this ratio can be extended to multiple GCs to get an average figure).
Identifying heaps in eventlogs
In the above events, the "allocated since program start" is done per-HEC, but the others apply to the heap as a whole, not a particular HEC.
For completeness explicitly identify heaps by identifying the heap to which the events apply. (Remember that we can merge event logs from multiple processes, so there is already no truly global notion of heap, implicitly it would be the single heap belonging to the HEC that emits the event. We would also have to make the assumption that there is a single heap per OS process (we can already identify which HECs belong to the same OS process). Alternatively we can explicitly identify heaps using the existing capset (capability set) mechanism.)
The GHC RTS already puts all of its HECs into a capset for the OS process. We can reuse this capset.
If in future we allow multiple independent heaps in the same OS process (e.g. separate RTS instances) then this scheme would let us cope by making a separate capset. Similarly it'd cope with implementations like GdH which use a global heap spanning multiple OS processes.
Problems with the order of events in the eventlog
In the implemented version, we sidestep the issues with event order by tightly controlling the timestamps in the GC_START and GC_END events on the main GC cap (the one that requests GC) and by adding the GC_GLOBAL_SYNC event. We also treat the elapsed time delays needed to synchronise caps for parallel GC (both at GC start and GC end) as MUT time, instead of GC time, because while they are needed for GC, their cause is (slow) OS scheduling, just as for any other delays when switching threads. In the subsection there are detailed discussions of the original GC event order problems and about the initially considered design choices.
Summary of the problems
The main issue is how we measure the time spent doing GC. The +RTS -s measurement is taken from the stat_startGC() to stat_endGC() on the "primary" GC thread. In ThreadScope? the main GC events we have access to are GC_START and GC_END on each capability.
It turns out that these different measurements are often quite different. In particular there can often be a significant delay between when +RTS -s reports and when the other capabilities start the mutator again (and hence emit GC_END). Our guess is that this is because the other caps are suspended at the end of the GC while the primary GC thread does its stats etc, then when it releases them it can take a while for the other caps to be rescheduled by the OS.
In this example, END_GC on one of the caps comes very late:
9378252000: cap 1: GC stats for heap capset 0: generation 0, 45160 bytes copied, 58296 bytes slop, 1757184 bytes fragmentation, 2 par threads, 45080 bytes max par copied, 45112 bytes total par copied 9378253000: cap 1: finished GC 9378254000: cap 1: spark stats: 1913071 created, 1229807 converted, 221 remaining (0 overflowed, 0 dud, 58923 GC'd, 144981 fizzled) 9378255000: cap 1: waking up thread 3 on cap 1 9378257000: cap 1: running thread 2885 9378259000: cap 1: stopping thread 2885 (thread finished) 9378268000: cap 1: running thread 3 9378354000: cap 1: stopping thread 3 (blocked on black hole owned by thread 2884) 9378355000: cap 1: creating thread 2886 9378363000: cap 0: finished GC
From the user's point of view it is perhaps more accurate to look at the GC_START/END because that's when the caps really get back to the mutator.
This different GC vs mutator measurement affects several other statistics and the difference vs +RTS -s can build up to be quite large on larger eventlogs.
Additionally, if we only look at the GC_START/GC_END then it's not entirely clear what the average or maximum pause time should mean, since we have multiple capabilities. Is the max the max for any individual cap, or from when the first cap does GC_START 'til when the last cap does GC_END.
Which brings up another issue: some of the GC statistics rely on a GC being global across all capabilities, but strictly speaking the current GC events do not let us associate a GC_START/END on one cap with that on another. One core can issue a new REQUEST_SEQ_GC before another has issued it's GC_END from the previous GC. Add in the fact that not all cores have to take part in a GC and it's tricky to associate GCs on each core to a global GC.
We have added a GC_GLOBAL_SYNC event which is emitted strictly between GC_START/GC_END on all cores, used for associating GC across all cores. If we could calculate stats in such a way that we do not need to associate GC across all cores then that would be better (and more flexible e.g. to work with your local GC branch).
An implemented partial solution for RequestParGC
We can try to ensure that RequestSeqGC and RequestParGC are emitted before their corresponding GC_START events, by using the following tip from JaffaCake?: "actually you could try moving the interruptAllCapabilities() call in Schedule.c:1500 down below the traceEvent calls". However, even with this implemented in GHC HEAD, the events can still be emitted in arbitrary order and it complicates analysis, especially for selected intervals (and complicates and makes less strict the future validation of events).
Here are the results of implementing it:
18:13 < mikolaj> dcoutts, JaffaCake: I've tested the "moving the interruptAllCapabilities() call below the traceEvent calls" tweak and it helps in 99-ish % of cases 18:13 < mikolaj> that is, the order of GC events is much, much better now 18:14 < mikolaj> but there are still very rare cases, especially when the par GC request was from one HEC, and another, busy HEC is too slow to report finishing a previous GC 18:15 < mikolaj> so it does not help that much in validating eventlogs, but makes them so much more readable, if a user wants to inspect the event messages one by one
More example eventlog fragments
The example of the event order issues below are on a system with 2 caps, on an eventlog with lots of small GCs. They show how GC times measured by "+RTS -s", that is from START_GC to the "GC stats" event, are different from TS times. The TS times are the average over all caps of the pause between START_GC, when the caps stop mutating, and END_GC, when they resume mutating. (Most of) the difference stems probably from the thread sleep/wake delays, some ending GC bookkeeping (including the time taken to emit GC and other events) and related overheads.
It seems the TS times are more useful to the programmer that is mostly concerned in how much time is spend mutating and not how the wasted time is divided between the actual GC and the cap switching overhead. Moreover "+RTS -s" just adds the cap switching overhead to the MUT time hiding the fact that it's caused by GC.
The differences accumulate and affect the "GC total elapsed time", "Avg pause" and "Max pause" columns of the GC table in "+RTS -s". They also influence the "Task" table (not reproduced in TS). They add up in total "GC time (elapsed)" and consequently in "MUT time (elapsed)" that is obtained by subtracting GC time from total time. In the result, they influence "Alloc rate" and "Productivity", too. The figures are seriously different between TS and "+RTS -s", except on small eventlogs.
It seems for all these figures the TS version is the right one. In particular, if by "pause" we mean the time between GC_START and GC_END, by "Max pause" we neither mean the "maximum over all GCs of (minimal pause over all caps)", similarly as in +RTS -s (but not exactly the same, because even the minimal GC_END is usually a tick after "GC stats"), nor "maximum over all GCs of (maximal pause over all caps)", which we could easily show in TS and which could make sense for a real-time system with specialized, non-interchangeable caps, but "maximum over all GCs of (average pause over all caps)".
Here's an example demonstrating END_GC for the previous GC following REQUEST_PAR_GC for the next GC on another cap. Note that the early END_GC on cap 1 still comes 1000 nanoseconds after the "GC stats" event. Even such small differences accumulate over all GCs:
9366536000: cap 1: GC stats for heap capset 0: generation 0, 77552 bytes copied, 226056 bytes slop, 696320 bytes fragmentation, 2 par threads, 71736 bytes max par copied, 77520 bytes total par copied 9366537000: cap 1: finished GC 9366538000: cap 1: spark stats: 1910358 created, 1228256 converted, 1000 remaining (0 overflowed, 0 dud, 58306 GC'd, 144981 fizzled) 9366541000: cap 1: running thread 3 9367310000: cap 1: stopping thread 3 (heap overflow) 9367312000: cap 1: requesting parallel GC 9367316000: cap 0: finished GC 9367317000: cap 0: spark stats: 1071418 created, 1292489 converted, 0 remaining (0 overflowed, 0 dud, 41840 GC'd, 214904 fizzled) 9367318000: cap 0: starting GC 9368131000: cap 1: starting GC
Another example, this time there's a different event ("allocated on heap capset") on the late cap, at the same time as "GC stats" an another cap and before END_GC finally arrives. Not sure how this can happen. The END_GC on the early cap comes here a bit later that usually (2000 nanoseconds after the "GC stats" event), too:
836505000: cap 0: GC stats for heap capset 0: generation 0, 11584 bytes copied, 205232 bytes slop, 1007616 bytes fragmentation, 2 par threads, 11472 bytes max par copied, 11536 bytes total par copied 836505000: cap 1: allocated on heap capset 0: 180717856 total bytes till now 836507000: cap 0: finished GC 836507000: cap 0: spark stats: 5893 created, 114894 converted, 228 remaining (0 overflowed, 0 dud, 13 GC'd, 22190 fizzled) 836509000: cap 0: waking up thread 3 on cap 0 836511000: cap 0: running thread 233 836514000: cap 0: stopping thread 233 (thread finished) 836521000: cap 1: finished GC
Finally an example where END_GC is quite late on both caps (3000 nanoseconds and 6000 nanoseconds):
67582000: cap 1: GC stats for heap capset 0: generation 1, 58248 bytes copied, 40096 bytes slop, 1912832 bytes fragmentation, 2 par threads, 51920 bytes max par copied, 58208 bytes total par copied 67583000: cap 1: live data in heap capset 0: 82784 bytes 67585000: cap 1: finished GC 67585000: cap 1: spark stats: 15101 created, 2570 converted, 508 remaining (0 overflowed, 0 dud, 879 GC'd, 12 fizzled) 67588000: cap 0: finished GC
Discussions that led to the implemented GC_START/GC_END/GC_GLOBAL_SYNC solution
Here are two IRC logs with the discussion that led to the GC_START/GC_END/GC_GLOBAL_SYNC solution. There are a few more long IRC logs related to that, most of them on #ghc.
17:19 < dcoutts> and yes, mikolaj is right, I did mean to ask if it wouldn't make sense to include sequential GCs when calculating the parallel GC work balance 17:19 < dcoutts> I understand from your pov as implementer that you don't care, but doesn't it make sense from the user's pov 17:20 < dcoutts> that is, over a whole prog run, we sum up the total bytes copied and the max bytes copied by any individual GC thread 17:20 < dcoutts> +RTS -s only includes parallel GCs for this 17:24 < mikolaj_> yeah, more generally, the caps can be added and deleted during runtime, so seq GCs are just a special case, when only one cap runs at all, or only one works in this GC 17:25 < mikolaj_> which leads to a related quesion, which number of caps take as the divisor in "Parallel GC work balance" 17:27 < dcoutts> mikolaj_: yeah I was thinking about that. If we do want to take into account changing numbers of caps then we might want to divide by the active number of caps at each point, and combine the results 17:32 < JaffaCake> right, I'm not sure what to do about the "GC_END lag" 17:33 < JaffaCake> if the thread is descheduled at the end of GC, is it still in the GC or not? 17:33 < dcoutts> JaffaCake: from the user's pov I'd say yes 17:33 < dcoutts> from the GC implementer's pov, perhaps not 17:33 < JaffaCake> but if you have some threads in GC and some not, it makes no sense to ask what the wall-clock time spent in GC is 17:33 < dcoutts> that's true 17:34 < JaffaCake> this is the problem I had in the local GC, it doesn't measure wall-clock time spent in local GC 17:34 < dcoutts> well, unless you take the sum over all hecs 17:34 < dcoutts> right, what will wall clock time mean for local per-hec GC 17:34 < JaffaCake> (and BTW, CPU time in parallel GC is next to useless, because a lot of cycles are spent spinning) 17:35 < dcoutts> JaffaCake: that's also why I'd ideally like to calculate these things without having to associate GC events across all HECs 17:35 < dcoutts> since that would no longer make sense for local per-HEC GC 17:36 < JaffaCake> so just use the single GC_STATS event? 17:36 < mikolaj_> neither will maxPause make sense for per-HEC GC 17:36 < JaffaCake> right 17:36 < dcoutts> mikolaj: unless it's the max pause on any HEC 17:37 < dcoutts> rather than trying to measure for each GC, time between first HEC starting GC and last finishing 17:37 < JaffaCake> hmm, that might be useful 17:37 < dcoutts> "for any HEC, what was the longest time it paused" 17:38 < JaffaCake> I think that might give artificially long pauses 17:38 < dcoutts> why do you say it's artificial? 17:38 < dcoutts> because you're blaming the OS? :-) 17:39 < JaffaCake> if a HEC has nothing to do, then if it gets delayed a lot after GC that's not really a pause 17:39 < JaffaCake> and yes, there's a question about whether OS-induced pauses count 17:40 < JaffaCake> for me, I'd rather they weren't included 17:40 < dcoutts> JaffaCake: hmm, you mean it can block for a long time, not emit a GC_END and then block due to being idle? 17:40 < JaffaCake> yes 17:40 < JaffaCake> but, I'm not sure why HECs would get descheduled at this point, unless it's just unlucky 17:41 < JaffaCake> because we use spinlocks rather than mutexes 17:41 < dcoutts> JaffaCake: for the "end of GC" sync point you mean? 17:41 < JaffaCake> I suppose if there's other processes and we yield() 17:41 < JaffaCake> yes 17:42 < JaffaCake> so is there a problem with just taking the stats from the GC_STATS event? 17:42 < JaffaCake> then you'll match what GHC does 17:42 < dcoutts> JaffaCake: well two things, one is if it's really measuring what we want 17:43 < dcoutts> and the other is that it is quite ghc specific, it'd be nicer to calculate these things using more general events 17:43 < JaffaCake> why might it not be? 17:44 < dcoutts> JaffaCake: because from the user's pov, the GC vs mutator ratio is really mutator vs other, they don't care so much who's fault it is GC or OS 17:44 < JaffaCake> the problem with trying to be more general is you have to cope with GC that might be concurrent, and then various things don't make sense (e.g. wall-clock time) 17:44 < dcoutts> right yes, I'd like to distinguish which stats make sense generally 17:45 < dcoutts> and which can only make sense for stop-the-world 17:46 < JaffaCake> but if you have mutator overlapping with GC, then you can't ask how much wall-clock time was spent in either 17:46 < JaffaCake> I suppose you could give an average... 17:46 < dcoutts> right, only elapsed time * ncpus 17:47 < JaffaCake> but I don't think this is the most important issue, right? 17:47 < JaffaCake> we don't have any other compilers or GC architectures on the radar 17:47 < JaffaCake> if and when we do, then we could figure out what to do 17:47 < JaffaCake> it's hard to generalise from one example 17:48 < dcoutts> JaffaCake: true, we can just try and match exactly what +RTS -s does, and use the GC_STATS_GHC event 17:48 < JaffaCake> that would be fine by me 17:48 < dcoutts> I'm not convinced it's the "right thing" though it's the expedient thing 17:49 < JaffaCake> I agree, but sometimes worse is better :) 17:49 < dcoutts> mikolaj_: suppose we try to match exactly what +RTS -s gets, do we have any other remaining problems? 17:49 < dcoutts> we can match GCs across all HECs by using the GC_STATS event 17:49 < mikolaj_> "Parallel GC work balance" 17:49 < JaffaCake> is there a problem with that? 17:50 < mikolaj_> dcoutts: yes, we can and we'd need to recod the GC time in GC_STATS, instead of using GC_START and GC_END 17:50 < dcoutts> mikolaj_: so we can get the same number as +RTS -s if we filter out the samples where n_gc_threads = 1 17:50 < mikolaj_> recod/record 17:50 < dcoutts> mikolaj: ah yes, we would 17:50 < mikolaj_> dcoutts: oh, yes, if that's the general rule that we just stick to RTS -s then yes 17:51 < dcoutts> JaffaCake: right we'd have to ignore GC_START/END completely really 17:51 < dcoutts> and put GC elapsed time into the GC_STATS event 17:52 < dcoutts> since even if we look at the GC_START/END for the "primary" GC thread that emits GC_STATS, then the times are different than that HEC's GC_START/END 17:52 < JaffaCake> you could use GC_START/GC_END for just one HEC - the one that emitted the GC_STATS event (but that seems a bit horrible) 17:52 < dcoutts> JaffaCake: right, except it will give us different numbers 17:52 < JaffaCake> oh, does it? 17:53 < JaffaCake> because the events are emitted a little earlier or later than the timestamps we use for stats? 17:53 < dcoutts> because the event and the stats_startGC()/stats_endGC() happen at different points in the code from traceGcBegin()/End() 17:53 < JaffaCake> if it really mattered we could make them the same 17:53 < dcoutts> JaffaCake: right 17:53 < mikolaj_> dcoutts: with some luck, we could draw the time recorded in GC_STATS, starting from GC_START and show the remaining area, till GC_END as an extra shceduling cost, outlines in different colour 17:54 < JaffaCake> i.e. grab a timestamp and pass it to both stat_startGC() and traceGcBegin() 17:54 < mikolaj_> so the duplication would not be entirely wasted 17:54 < dcoutts> JaffaCake: mm 17:54 < mikolaj_> but it depends on GC_START being mostly syncronized across HECS, which it almost is, I think 17:54 < mikolaj_> it's GC_END that's out of sync a lot 17:55 < JaffaCake> I really do want to see the ragged GC_STARTs, because it tells me how long it takes to synchronise all the HECs 17:55 < dcoutts> mikolaj_: it's only out of sync on the HECs other than the primary one 17:56 < mikolaj_> JaffaCake: oh, so they are not in sync? I guess I didn't look close enough 17:56 < JaffaCake> funny if GC_END is more out of sync than GC_START, I don't remember seeing that before 17:56 < JaffaCake> mikolaj_: they won't occur at exactly the same time, no 17:57 < mikolaj_> JaffaCake: I may be wrong, or it may only be so in rare cases 17:57 < dcoutts> JaffaCake: this is the thing mikolaj_ was seeing, that GC_END can be quite significantly delayed on the "other" HECs 17:57 < JaffaCake> because we really do have to send a signal to all the cores 17:57 < JaffaCake> dcoutts__: so that could be something we should look into 17:57 < dcoutts> JaffaCake: I'd assumed that this was because we were using a mutex to hold the other HECs, but you say it's a spinlock so I cannot explain it. 17:58 < mikolaj_> anyway, ignore me, I didn't look at GC_START at all, just thinking aloud how we can use in TS the extra data from dupliated GC times 17:58 < JaffaCake> is it occurring when you're using all the cores? the last core problem? 17:58 < dcoutts> mikolaj_: how many cores do you have? 17:58 < mikolaj_> JaffaCake: quite likely 17:58 < mikolaj_> 2 17:58 < JaffaCake> aaah 17:58 < mikolaj_> but the logs shows different scenarios 17:59 < JaffaCake> all kinds of bad things happen when one thread gets descheduled 17:59 < dcoutts> JaffaCake: so in this sense we already have mutator and GC overlapping 17:59 < mikolaj_> it's just a simple lag 17:59 < mikolaj_> *not 18:00 < JaffaCake> dcoutts: I don't think of it like that - there is a handshake at the end of GC, so the primary thread can only continue when it has received the ok from all the other HECs 18:00 < JaffaCake> so if one of the other HECs goes for a walk for a while after that, it is in a "limbo" state, not still doing GC 18:00 < dcoutts> right 18:01 < dcoutts> again it's just from the user pov, it's doing something other than running the mutator 18:01 * JaffaCake is out of time, must dash 18:01 < dcoutts> ok 18:01 < mikolaj_> thanks 18:01 < dcoutts> JaffaCake: yes, thanks, we'll think about what to do 18:01 < JaffaCake> dcoutts: in that case you would want to count all "descheduled" time as non-mutator 18:02 < JaffaCake> but we don't have a way to measure that yet 18:02 < dcoutts> aye 18:03 < dcoutts> mikolaj_: so perhaps we should make the GC_START/END times on the primary GC thread match the times emitted for +RTS -s 18:03 < dcoutts> mikolaj_: rather than duplicating the info in the GC_STATS 18:03 < mikolaj_> dcoutts: works for me (probably)
Below is the second log.
12:38 < dcoutts> JaffaCake: we didn't plan on adding a per-HEC GC stat event, do you think that would be useful? what info would we get? 12:39 < JaffaCake> CPU time in GC on that thread 12:39 < JaffaCake> not particularly useful, but it could be done 12:39 < dcoutts> as opposed to wall clock time between GC_START/END 12:39 < JaffaCake> right - you could get wall clock time too, but that's even less useful I think 12:39 < dcoutts> we get wall clock time already from GC_START/END 12:40 < JaffaCake> right 12:40 < mikolaj_> but it's mixed GC + scheduling overhead time 12:40 < dcoutts> right 12:40 < dcoutts> like we were discussing yesterday 12:43 < JaffaCake> GC time does include scheduling overhead already 12:43 < JaffaCake> it includes the time taken to sync with all the other HECs 12:47 < mikolaj_> right, so only the amount of post-GC scheduling overhead atrributed to GC varies (between RTS stats and GC_START/END) 12:48 < JaffaCake> I suppose so, but it's just random noise introduced by the OS 12:49 < JaffaCake> OS context switches can strike at any time 12:49 < JaffaCake> so if you take two timestamps in succession, there's a random chance that there will be a big delay between them 12:50 < JaffaCake> the discrepancy you see with GC_END is nothing more than that, I think 12:52 * mikolaj_ has a look at the log samples again 13:01 < mikolaj_> yes, quite probably so, plus perhaps a tiny error from the very act of emitting events, etc. 13:02 < mikolaj_> anyway, for the global GC stats, we just want to make sure we measure the same amount of OS noise between GC_START/END as RTS stats do, at least on the main GC HEC 13:04 < mikolaj_> that's why I asked about moving GC_END, but perhaps wait until dcoutts write the paper and you finish overhauling stat gathering


text:
Bookmark this site
BAY CITY, MI -- Gold Standard Games/Shelti has signed a three-year agreement with the American Darters Association (St. Louis, MO) to promote the Shelti Radikal Darts system. The partnership will commence with a series of ADA/Shelti regional championships in 2014.
The Radikal Darts online system is licensed by Shelti from Gaelco Darts SL (Barcelona, Spain). The system incorporates cameras, a video display and a laser projector, and is networked through a remote server so players in different locations can compete in real time. The Radikal system software has been updated to be fully compatible with ADA league play.
"Our main objective is to create a more simplified, casual and competitive ADA member experience through the Radikal system on the Shelti machines, both for our weekly leagues and for online competition," said ADA vice-president Karl Remick "One of the great features of the Radikal system is its own patented 'remote referee' system with laser throw line for both tournament and ADA league play."
ADA chief executive Gloria Remick explained recalled that Shelti dart machines have been big part ADA's local and nationwide events since the association was formed. "We are excited to have them play a bigger role with our association in the future," she said, and reminded soft-tip dart enthusiasts that those who did not make it to the ADA national tournament this year missed out on the chance to experience the brand-new Shelti "Touch Machine" with the latest Radikal system programming. The board incorporates the ADA Neutralizer system and ADA national championship format and games in firmware on the controller.
"The ADA/Shelti Radikal partnership will bring the entire sport of soft-tip darts into an explosive future," predicted Shelti/Radikal's Dan Larson. "We will bring the entire world together, along with a patented 'Remote Referee Laser System' and online programs that only a partnership of this magnitude could accomplish."
The ADA/Shelti Radikal partnership was formally announced at the recent ADA Regionals held near Kansas City, MO early in December.
Information about Shelti's Radikal system boards may be had by calling (989) 893-1739.

subset: commoncrawl


text:
Jefferson City, Tenn. - Xavier Johnson picked up 64 yards on the ground for the Tornados, including a 21-yard scamper for the lone Brevard touchdown, but Carson-Newman took advantage of six BC turnovers, returning four of them for scores in taking home the win, 77-7.
Brevard (6-3, 2-3 SAC) was held to their lowest rushing total of the season, picking up 75 yards on the ground with the senior fullback from Chester, S.C. picking up the bulk of the yards on 15 carries for an average of 4.3 yards per carry.
Eric Watts had yet another outstanding punting game for the Tornados, kicking the ball nine times for 368 yards, booting the ball 50-plus yards twice in the game and pinning the Eagles inside their 20 twice as he average 40.9 yards per attempt.
On the defensive side, Brandon Rawls continued the Tornados 11 game sack streak, dropping quarterback Alex Good in the second quarter, but Brevard saw their 10-game interception streak end today as the Eagles quarterbacks went 7-10 through the air. Prince Simunyu led the Tornados with nine tackles on the afternoon, while Salonik Amos and Stanley Jones recorded eight apiece.
Nate Inman led 14 Eagles rushers with 94 yards on five carries as Carson-Newman (7-2, 5-0 SAC) gained 500 yards on the ground on 54 carries for an average of 9.3 per attempt.
Jamar Neal led all defenders on the day with 10 tackles, forcing a pair of BC fumbles and recovering one as the Carson-Newman defense forced seven fumbles on the afternoon, recovering six and returning four for touchdowns, capped by Isaac Kinley returning one for 31 yards in the second quarter and another 36 yards in the third to contribute to the victory.
Brevard is back in action on Saturday, October 31st, as the Tornados celebrate Homecoming and recognize the 25 seniors on the 2009 team in the pregame ceremonies before taking on the Indians of Catawba College. Kickoff is scheduled for 1 p.m. and fans can gain free admission by bringing a new, unwrapped toy to donate to Toys for Tots.


text:
I have posted it before, but I would say check out the dice job forums
They are taylored for questions like this.
As for advice here, give some more details about the job. Is it a part time position/internship? a co-op? computer forensics is a vast field. what exactly are the duties of the job you are interviewing for? is this a private sector, government, or contract job?
My generic advice is if you have any security/forensics related class notes/books from school, study those so that you can show you know the basics and that you have the ability to learn. Most of the time, for entry level jobs, they aren't expecting much, but if you show them you have potential, that is a definate plus.


text:
Millionaire to ex-wife: Stay as my housekeeper
(NEWSER) – A wealthy British man asked his ex-wife to stay on as his housekeeper after he moved another woman into the home they shared—and couldn't understand why the offer made his partner of 30 years "so aggressive," a court heard this week. The man, now in his 70s, married the woman in the 1970s and divorced her in the '90s, but the court was told that they carried on living together, treating the divorce as a "bit of paper," until he met the other woman a few years ago, the Telegraph reports.
Read the full story on Newser.com


text:
'Golisano's offer takes into account $45 million in assumed liabilities, up to $25 million in projected team debt this season and a $22 million concession loan. He is also offering to pay $2.5 million owed to unsecured creditors, despite not being legally bound to do so.'
The Sabres Report - April 10, 2003


text:
- 18:43 Ticket #9 (Unpacked fields with free variables in their types don't work) closed by
- fixed: Well, I fixed this issue, but the test still doesn't pass for seemingly …
- 21:45 Ticket #13 (Implement "unused imports" warnings) created by
- This will help us avoid superfluous loops in the dependency graph of base.
- 18:37 Ticket #12 (Port the result-writing functionality from the perl script to lhc-regress) created by
- This feature writes results for each regression test run into a directory …
- 21:45 Ticket #11 (Implement a real Integer type) created by
- At the moment, we just use a (data constructor around) fixed-width …
- 19:10 Ticket #10 (Restore control-flow analysis) created by
- John had apparently given up on control flow analysis. Now we need to get …
- 02:21 Ticket #9 (Unpacked fields with free variables in their types don't work) created by
- The free variables are escaping! […]
- 12:21 Ticket #6 (Problem with typeclasses) closed by
- fixed: Well, I've fixed this problem, now we just need to implement all of those …
- 16:07 Ticket #8 (Int truncated to 30 bits on 32-bit systems -- sometimes, at least) created by
- When running the test bugs/IntEnum, instead …
- 23:53 Ticket #7 (pragmas like INLINE not allowed wherever value definitions are accepted) created by
- Code like[…]
- 03:37 Ticket #6 (Problem with typeclasses) created by
- Something is quite wrong with LHC's typeclass implementation, as seen in …
Note: See TracTimeline for information about the timeline view.


text:
Wrinkles are creases in the skin. They are also called rhytids.
Most wrinkles come from aging changes in skin. Aging of the skin, hair and nails is a natural process. There is nothing you can do to slow down the rate of skin aging, but many things in the environment will speed it up.
Frequent exposure to sunlight results in early skin wrinkles and dark areas (liver spots). It also increases the chances of getting skin cancer. Exposure to cigarette smoke can also make the skin wrinkle sooner.
Common causes of wrinkles include:
Stay out of the sun as much as possible to limit skin wrinkles. Wear hats and clothing that protect your skin and use sunscreen when you are outside. Avoid cigarette smoke.
Wrinkles are not usually a cause for concern unless they occur at an early age. Talk to your health care provider if you think that your skin is getting wrinkled faster than normal at an early age. You may need to see a skin specialist (dermatologist) or plastic surgeon.
Your doctor will ask questions such as:
The doctor will examine your skin. You may need a skin lesion biopsy if you have any abnormal growths or skin changes.
Tretinoin (Retin-A) or creams containing alpha-hydroxy acids may sometimes help.
Chemical peels or laser resurfacing work well for early wrinkles.
Creams with growth factors may make fine lines and wrinkles look better.
Botulinum toxin (Botox) may be used to correct some of the wrinkles that are caused by overactive facial muscles.
Some people choose plastic surgery for age-related wrinkles (for example, a facelift).
Habif TM. Light-related diseases and disorders of pigmentation. In: Habif TP, ed. Clinical Dermatology. 5th ed. Philadelphia, Pa: Mosby Elsevier; 2009:chap 19.
Rohrer TE, Wesley NO, Glogau R, et al. Cosmetic Surgery. In: Bolognia JL, Jorizzo JL, Schaffer JV, et al, eds.Dermatology. 3rd ed. Philadelphia, Pa:Mosby Elsevier; 2012:chap 152.


text:
A man who fled during the 10 minutes it took police to cordon off a Melbourne home following an alleged stabbing will face court on Monday.
Police were preparing to storm a house in St Albans where another man, 52, was believed to have been stabbed in the neck.
Inspector Mick Grainger said police had been negotiating with the man, but he was gone when they entered the house in Grant Street.
Police were called to the house about 7.30am on Friday.
A 34-year-old Murrumbeena man was arrested in Sunshine at 4.30pm and later charged with offences including intentionally causing serious injury and possessing a drug of dependence.
He was remanded to appear in the Melbourne Magistrates' Court on Monday.
The injured man was taken to Sunshine Hospital in a serious but non-life threatening condition.


text:
Brevard, N.C. – Both the Brevard College men's and women's tennis teams were recognized earlier this week for their hard work off the courts and in the classroom last year, as both were named ITA All-Academic Teams.
On the women's side, the Tornados were one of 42 NCAA Division II schools to be named as an ITA All-Academic Team, with four individual student-athletes – Kimberlee Cooper, Sara Douglas, Kayley Duval and Lindsay Shaeffer - earning the recognition of ITA Scholar Athlete.
On the men's side, Brevard was one of 11 NCAA Division II schools to be named as an ITA All-Academic Team, with five Tornados – Shane Apps, Jared Fisher, Ben Allweil, Travis Wireback and Konstantin Savelyev – being honored as ITA Scholar Athletes.
The ITA All-Academic Team award is open to any ITA program that has a cumulative team grade point average of 3.20 or above (on a 4.00 scale).
In order to earn ITA Scholar-Athlete status a player must meet the following criteria: 1.) be a varsity letter winner, 2.) have a grade point average of at least 3.50 (on a 4.00 scale) for the current academic year, and 3.) have been enrolled at their present school for at least 2 semesters (including freshman thorough senior year).


text:
University to host filmmaker, 'Affluenza' author
Documentary filmmaker and social activist John de Graaf will be a featured guest speaker at the University of South Carolina Wednesday, Feb. 17.
De Graaf's talk is titled, "What's an Economy for Anyway?" and will take place at 6 p.m. in Gambrell Hall auditorium. Sponsored by the Arnold School of Public Health and the Darla Moore School of Business, the talk is free and open to the public. A reception is planned after the talk.
A frequent commentator on the impact of overconsumption, stress and lifestyle on public-health outcomes in the United States, De Graaf is the national coordinator of Take Back Your Time, a non-profit organization that challenges time poverty and overwork in the United States and Canada.
He also is the co-author of the best-selling book, "Affluenza: The All-Consuming Epidemic," a humorous critique of American consumerism, and has worked for 26 years with Seattle PBS affiliate KCTS-TV as an independent producer of television documentaries, many on environmental topics. Fifteen of his documentaries have aired on PBS during prime time, and he has won more than 100 awards for filmmaking, including three Emmy awards.
He recently completed three new documentary films: "Silent Killer: The Unfinished Campaign against Hunger"; "Buyer, Be Fair: The Promise Of Product Certification"; and "The Motherhood Manifesto."
The founder of the Hazel Wolf Environmental Film Festival, de Graaf is the former president of the Hazel Wolf Environmental Film Network and the recipient of the Founders of a New Northwest Award for his work in environmental media. The de Graaf Environmental Filmmaking Award, named in his honor, is presented annually at the Wild and Scenic Environmental Film Festival in Nevada City, Calif.
For information, contact Dr. David Crockett in the Darla Moore School of Business at 803-777-4916 or via e-mail at firstname.lastname@example.com.


text:
New Medical Facility Steps Up for Family of Brain Dead Girl
OAKLAND, Calif. (AP) — The family of a 13-year-old girl declared brain dead says it has located a second nursing home willing to provide for her long-term care, after another facility backed out.
The family's lawyer, Christopher Dolan, says the new facility is in
Dolan said Friday that he had held a teleconference with the director of the facility and a lawyer for Children's Hospital, where Jahi McMath is now being kept on a ventilator.
The hospital said it would cooperate with a transfer under certain conditions, including obtaining consent from the
Jahi started bleeding heavily after tonsil surgery and went into cardiac arrest before being declared brain dead.


text:
Im looking for a decent ultraportable hacktop.
That means 13" or lower.
I want it to be cheap, good for hacking, have a built in wireless card that will work with backtrack and C&A.
I want a decent proccesser (1.6ghz or higher mabye) and at least 100GB of space or a RAIDS accepter i got 4 HDD's.
I want to be able to bring it around alot, use it on my lap so a verry nice fan set up.
As for OS, no Mac.
I use atm Windows XP, Partitioned win 7 and Ubuntu, with a Backtrack liveUSB so i need a USB accepter.
Price range is as cheap as possible.
Gaming is not important, but if possible Counter Strike Source.
If you have a hacktop wit different specs, post it anyways, whats your idea of a perfect hacktop or one for me?
I use a lenovo ideapad s10e and it is working perfekt!
Its got to be a choice from either the 'Samsung N' or Asus eee' range of netbooks.
I haven't used any of the wireless 'b/g/n' chipsets in BT. However if I was getting a netbook I'd do some serious research into witch 'N' chipset works with aircrack.
For me order of importance would be
Wireless 'N' that works with aircrack
battery life
Mathematical reasoning may be regarded rather schematically as the exercise of a combination of two facilities, which we may call intuition and ingenuity.
Get the original eeePc. You should be able to find them on fleabay pretty cheap. They're ungodly hackable, and if you do end up breaking it, you're not out too much money.
you should check out the ASUS eee pc 1008HA... i got one for $320 a few months ago... Backtrack runs perfectly on it. You can even boot it off an SD card (which is kinda better than USB booting because there is nothing sticking out of the laptop. the card goes all the way inside). It's one of the lightest netbooks I've seen (2.4lbs). It comes stock with 1gb RAM & 160gb HDD (partitioned in 2 equal parts but you can undo that). The only problem I've had with this computer is that the motherboard will fry if you try to upgrade the RAM or the HDD.
I've got a 10" eeePC and an Acer aspire one. Both are great as portable hacking platforms and both work with BT3 and BT4 out of the box. I use both for wireless assessments and haven't had any problems.
If I had to choose, I'd pick the Acer since I like the keyboard better (better placement and size of the shift and enter keys).
Good Luck...
I have an Eee PC 701 and a Lenovo S10e. The Eee is 800MHz, 4GB SD drive, 7" screen. $300 new. BT4 runs via an 8GB SD.
The Lenovo S10e is close to what you describe. 1.6GHz, 160GB HD, 10" screen. $375 new. It runs BT4 via USB.
Stop the TSA now! Boycott the airlines.
my 2 cents are to watch some sale forums like slickdeals.net, check out past sales to give yourself a "baseline of discounts" and then decide what you will be able to get for your price range
"Sure is for people with nothing on the line.....you and me? We just get on with it."
Buy something cheap and lite with decent battery life. Don't buy a laptop just for the nic. Get a usb nic if the inbuilt one doesn't support functions you want to use. Who gives a damn about the processor and memory, run lightweight debian with blackbox and remote to a server somewhere to do any number crunching.


text: OverviewBack to top To-Go Ware - 2-Tier Tiffin Set Portable Food Carrier - Item# :113316UPC# :689076826525 Brand:To-Go Ware Ship Weight:1.55 To-Go Ware - 2-Tier Tiffin Set Portable Food Carrier To-Go Ware 2-Tier Portable Food Carier Tiffin Set is stainless, stylish, stackable, and sustainable. This 2-tier "tiffin" (a nifty lunch box system that hails from India) is a reusable, lightweight option for toting lunch on-the-go. With a lid that doubles as a plate the like, it's perfect for work, school, picnics, or a night out (makes for a stylish doggie bag). Great for both cold and hot foods, and can be reheated in a toaster oven or over a camp stove! Fold down the handle to make it compact and easy to store. Best of all, it's non-leaching and BPA and Phthalate free, making it a safe option for you and your family. Fold down the handle to make it compact and easy to store. There's nowhere it won't go…except to a landfill. Dimensions: Assembled: 5 1/2" H x 6" D (6 3/4" D, including latches) Top Unit height: 2 1/2" Bottom Unit height: 2 3/4" Liquid Measurements: 4 3/4 cups, each unit Liquid Measurements: 1/2 Cup One or two? Up to you!To-Go Ware's new self-latching top container lets you use your tiffin solo for snacks or smaller meals, or as a dynamic duo! A sweet little sidekick tiffin comes inside for toting dressings or sauces on the side. Just use soap and water, or pop it in the dishwasher to clean. To-Go Ware Stainless Steel Food Carrier What grade of stainless steel is your food carrier?To-Go Ware's stainless is 200, 14/1 grade, a grade specifically made for safe storage of food stuffs. 300 and 200 are the most popular, with 200 containing less nickel than 300. Lab tests have shown that their stainless steel contains no levels of materials harmful to people or the planet. How big are the food carriers?The 2 tier food carrier is 5 1/2 high fully assembled and 6" in diameter (6 3/4" D, including latches); the upper unit is 2 1/2" high and the base unit is 2 3/4" high. The 2 tier food carrier holds 4 3/4 cups of liquid in each unit. This food carrier easily holds a sandwhich and salad. The 3 tier food carrier is 6 ¾" high fully assembled and 4 3/4" in diameter (5 1/2" D, including latches); the upper unit is 2" high, the middle unit is 2 1/4" high and the base unit is 2 1/2" high. The 3 tier food carrier holds about 2 cups in each unit. The food carrier is much more suited to meals with smaller portions of varied foods. Is there a coating on the food carrier?Due to the nature of stainless steel, particularly the kind approved for food storage, it's not necessary to put a coating on it - that's why it's such a popular material for kitchen, food and medical use. Additionally, To-Go Ware only uses a grade of stainless that is approved for the health and safety of our consumers - they are deeply committed to protecting the Earth and the people who live here! How do I clean my stainless steel food carrier?The food carrier is dishwasher safe, or you can wash it with soap and water. Can I cook with the stainless steel food carrier?The food carrier can be used with heat such as ovens, stove top, toaster oven, or put over an open flame - which makes it great for camping! Like all steel and metal products, it is not safe to use in the microwave. Is the food carrier water/leak proof?While To-Go Ware does not advertise their food carrier as leak proof, it is water-resistant. The food carrier successfully carries soups and sauces. As long as the carrier is not aggressively shaken or flipped upside down, it usually holds liquids very well. The top unit is recommended for soupier items, as it is the tighter of the two units. Will my food stay hot or cold in the food carrier?The tiffin is not insulated, but paired with the cotton carrier bag (which itself is not insulated) seems to be a good combination for regulating the temperature of foods to a degree. If you aren't going to be using all of the units of the food carrier, To-Go Ware suggests using one of them to store a cold pack. They cannot in any way guarantee that hot foods will stay "hot," so To-Go Ware always recommends that folks heat it up in a toaster oven or even encourage using the To-Go Ware as a storage container and transfer it to a bowl to heat up in the microwave – this is still a preferable option to using leaching, toxic plastic tupperware. Where is the stainless steel food carrier manufactured?The food carriers are made in Mumbai, India by a company that is certified ISO 9001 (quality assurance) and has a proven track record of protecting the human rights of their employees. The company they source their stainless steel from is located in India, is also certified ISO 9001, as well as ISO 14001 (environmental protections). Are the cotton carrier bags made of organic cotton?No, they are not made of organic cotton, rather they are made of reclaimed cotton from the communities of Ghaziabad, India. While To-Go Ware loves organic cotton, one of the core values of their mission is to identify creative ways to utilize the resources already present instead of creating product from virgin materials, even organic virgin materials. The cotton for the bags is collected at sites around Ghaziabad, as well as cotton scrap waste from production in the facility. The process includes: collecting, spinning, weaving and confectioning wastages and segregating them by color; they are then garneted to create the fibers, which are further re-spun to create yarns. These yarns are then used for weaving the fabric used to make their bags. The factory that makes them are certified ISO 14001, as well as providing labor protections for their employees. How do I care for my cotton carrier bag?The cotton carrier bag can be put in the washing machine, but To-Go Ware does not recommend that you put it in the dryer, and instead should be air dried. Social, Environmental and Health Facts Are To-Go Ware products Fair Trade? Some of To-Go Ware's products are Fair Trade, such as those they have made by WEAVE. They provide both hand-made and manufactured items, therefore not all of their products are at present covered by fair trade certification. Those generally covered are hand-crafted goods and agricultural products (such as tea, coffee, chocolate, etc.). For To-Go Ware products not covered under this kind of certification, they work with companies abroad that conduct regular, surprise audits to ensure that the manufacturers are doing well by people and the planet. Why is stainless steel better than plastic?Although the process to make stainless steel requires extractive practices, which overall is not best for the environment, it should be noted that the intensive extractive process is offset by the fact that stainless steel, by its very nature, is 100% recyclable. Therefore, given the lifecycle of To-Go Ware's products as compared to plastics and compostables (both of which are extremely resource intensive to manufacture in relation to the amount of time they are actually used before being thrown away), they felt the intensiveness at the manufacturing stage was far outweighed by the extensive lifecycle and reduced overall environmental impact of their products. Additionally, because of its hygienic quality, stainless steel does not require harsh cleaners or a seal or finish applied to make it safe – adding additional health and environmental benefits to using stainless for food storage and transport. About the CONSERVE ProgramCONSERVE is a recycling and waste management NGO (non-governmental organization) that was founded in October 2003 in response to the mountains of garbage and litter, especially plastic bags that had become a common sight around the city of New Delhi. The project employs poor urban women and men in the slums of east Delhi to collect, sort, weigh and clean plastic bags. Through a heating and pressing process, the plastic melts together creating a thicker more durable plastic material. Since the plastic bags come in all colors, different designs can be created using strips and cutouts of bags, no dyes or inks are required. Founded by Anita Ahuja and her husband Shalabh, the team started a non-government, non-profit organization explaining how waste could be segregated and turned into a resource. Wet kitchen waste could be turned into compost; dry waste like paper and glass could be recycled. It was while segregating the waste that they encountered their most important challenge. "To-Go Ware had heard of organizations working with zero waste- it was something they could not understand. Despite their best efforts there was nothing they could do with the mounds of discarded plastic bags. The resale value of polythene is very low, so we started to experiment." That proved to be the turning point. They washed the plastic bags, braided, rolled them and made them into tiny baskets. But it involved a lot of work, and the couple didn't see a market for their products. Still, it forced them to work harder to find a solution for the mounds of discarded plastic bags. Finally, they hit upon the idea of washing, drying and pressing the plastic into sheets, using a pressing machine. The result: they came up with small plastic sheets, roughly 12" by 7". It was the breakthrough they had all been waiting for. From here on it was left to everyone's imagination, and they eventually started a line of handbags and accessories fashioned out of the recycled material. The couple then decided to also work with rag-pickers in Madhuban. "The rag-pickers are the most marginalized section of their society . . . they should be allowed to live with dignity and given the opportunity to make a good life." At dawn every day the rag-pickers deliver the recycled plastic shopping bags to the non-profits headquarters. The handles and bottoms of the plastic bags are snipped away and the open sheets washed with detergent on a cemented buffalo water trough. They are hung to dry on a clothesline and then layered together and pressed to make sheets that are designed, cut and stitched to make the amazing, environmentally friendly and ethical bags. The non-profit NGO currently employs over 300 people and exports bags all over the world, they use the money made from the sale of the bags to fund projects to help the rag-pickers and other marginalized sections of their community, such as building schools and employing more individuals. About WEAVEWEAVE Women's Education for Advancement and Empowerment (WEAVE) strives to create a world where empowered women and their children are free to exercise their rights and live peacefully in a just, humane and equitable society. The organization was founded in 1990, with the intent to empower indigenous women and support their needs and basic human rights. The organization has evolved over the years, especially in the context of the influx of refugees from Burma. One manner in which they seek this is through cottage industry, and WEAVE has produced a high-quality line of crafts that are produced by Burmese refugee women living in camps along the border. WEAVE's goals are to provide education and training for displaced women and children from Burma and its bordering areas. They aim to foster the development of self-managing and self-sustaining women's organizations and community based projects, and to raise the level of awareness of issues affecting displaced women and children from Burma and its bordering areas in partnership with women's organizations. WEAVE's target communities are displaced persons, particularly women, recognizing their role in providing for their families and in ensuring the well-being of their children. Their work rives has expanded to include the Indo-China-Burma border, but mainly concentrates along the Thai-Burma border. WEAVE is a member of the Fair Trade Federation. About Fair TradeFair trade means an equitable and fair partnership between businesses and organizations in the developed world and producers in the developing world. Fair trade businesses foster long-term and direct relationships with producers, because To-Go Ware knows these connections are a highly effective way to help producers help themselves. Paying fair wages in local context Supporting participatory workplaces Ensuring environmental sustainability Supplying financial and technical support Respecting cultural identity Offering public accountability Educating consumers To-Go Ware's MissionTo-Go Ware's mission is to make available innovative products that provide a solution, tell a great story, and are enjoyable to use. To-Go Ware seeks to stimulate positive practices for the way people live in relationship with themselves, their neighbors and the planet. To-Go Ware hopes to empower people to participate in the process of changing the world they live in by providing them the tools to do so. To-Go Ware offers solutions for a world with life on-the-go. Life is moving fast for everyone these days, and sometimes that can cause them difficulty in making conscious lifestyle choices-especially when it comes to food! With the explosion of "to-go" culture, there is no shortage of disposable containers and utensils crossing their paths everywhere they go, and they've all started to feed the landfill more than they may realize. How many plastic forks and spoons do they toss away each week? How many plates, to-go boxes, napkins and cups? Start to do the math and see what that adds up to per year-you may be surprised at the impact you are having. If we cannot abandon our need for "to-go" convenience as we move through our busy lives, we can certainly integrate ways of being more mindful and conscious of the impact our lifestyle has upon the planet. To-Go Ware hopes that they can provide you the tools to make that difference, allowing you to be a Solutionary in these to-go times. As a business, To-Go Ware seeks to implement a triple bottom line — people, planet and profit — in meaningful and sincere ways. To-Go Ware is very proud of the practices they've been able to implement in order to realize this vision. To-Go Ware understands the interconnected and interdependent issues of social, economic and environmental justice - this understanding guides all of their business decisions. To-Go Ware seeks to continually examine the resources and privileges they have as a company operating in the Global North and how their business practices impact the lives of people around the world. To-Go Ware is committed to creating equitable and respectful business relationships with companies locally and abroad. To-Go Ware gives preference to business partnerships with companies owned and operated by women or other traditionally marginalized groups, as well as small businesses. Additionally, they believe in and support the Principles of Environmental Justice adopted by the delegates to the First National People of Color Environmental Leadership Summit (1991), as well as the Bali Principles of Climate Justice developed by an international coalition of groups gathered in Johannesburg for the Earth Summit (2002).


text:
Note: This message is displayed if (1) your browser is not standards-compliant or (2) you have you disabled CSS. Read our Policies for more information.
Camping and shelters
Campground, cabin, shelter and youth camp are reservations can be made here or by calling 1-866-6CAMP-IN. For rates and fees, visit http://www.in.gov/dnr/parklake/2391.htm.
State Park Inns
Reservation for the seven State Park Inns can be made online or by calling 1-877-LODGES1. Click on the individual inn to make a reservation.
For more information about fishing, visit http://www.in.gov/dnr/fishwild/2348.htm
Purchase state park passes and other merchandise
Purchase State Park annual passes, gift certifications and other state park merchandise in the Mother Nature's Mercantile.
Subscribe to Outdoor Indiana magazine
Subscribe to DNR's Outdoor Indiana magazine. The state's premier magazine, delivers the wonders of the Hoosier outdoors to subscribers' homes and offices six times a year in 48 pages of vibrant color. For the best of state parks, lakes, wildlife, forests, trails, hunting, fishing, wildflowers and outdoorsy people, plus inside information about the state's out of doors from the DNR's experts. Subscribe today, only $15 per year or $28 for two years. More info at http://www.outdoorindiana.org/
Donate to Natural Resources Foundation
Help support Indiana's parks and wildlife by donating to the Indiana Natural Resources Foundation. More info: http://www.in.gov/dnr/5766.htm/
Search existing water permits. More info: http://www.in.gov/dnr/water/2455.htm
State Historic Architecture and Archaeology Research Database
SHAARD includes data from the Indiana Cemetery Registry, on historic bridges, from properties listed in the National Register of Historic Places, and on historic theaters in Indiana. As funds become available, all the information from the Indiana Survey of Historic Sites and Structures files will be added to the database.
More info: http://www.in.gov/dnr/historic/4505.htm
Oil well records
This site was created primarily as a tool to allow users to view scanned oil and gas well records in Indiana. The feature below allows for a fast & easy way to get the information that you need. Even if a specific well record has not yet been scanned, this application will allow you to view basic well information currently contained in our database.
More info: http://www.in.gov/dnr/dnroil/5425.htm
Indiana Beekeepers Swarm List
The Indiana swarm list has been provided to connect beekeepers with the public for the removal or collecting of honey bees.


text:
CMF's Annual Comedy Night at the Laugh Factory!
Children's Music Fund
Thursday, February 28, 2013 at 8:00 PM (PST)
Who's Going
Loading your connections...
3 of your friends are going. Share it to get more people on board! Share
Sara Haughty
San Francisco, California
San Francisco, California
Luke Picard
London, United Kingdom
London, United Kingdom
Rick Vespucio
Florence, Italy
Florence, Italy
Event Details
Have questions about CMF's Annual Comedy Night at the Laugh Factory!? Contact Children's Music Fund
When & Where
Laugh Factory, Hollywood
8001 Sunset Blvd.
Thursday, February 28, 2013 at 8:00 PM (PST)
Add to my calendar
Children's Music Fund
Children's Music Fund ("CMF") is a 501(c)(3) non-profit organization whose mission is to provide musical instruments and music therapy to children with chronic conditions and life-altering illnesses, and to support research on the effects of music therapy. This is a CMF fundraising event - funds raised go directly to support the programs and services of CMF. CMF's Federal Tax ID # is 87-0738857. Your contribution is tax deductible to the extent allowed by law. For more information, please visit us at http://thecmf.org
CMF's Annual Comedy Night at the Laugh Factory!
Things to do in Hollywood, CA
Film & Media


text:
Reach Washington Decision Makers and Politically Attuned Members of the Public Exactly at the Moment They are Seeking Information on Your Issue
Sponsor Information on WashingtonWatch.com
WashingtonWatch.com is a leading resource for Washington insiders and the press and public who watch over them. One of the Sunlight Foundation's "Insanely Useful" Web sites, WashingtonWatch.com's traffic grew a whopping 350% in 2007.
The "Sponsored Info" area on each page allows you to bypass media filters and direct your message to congressional leaders, government officials, and the interested public exactly when they are seeking information.
View the WashingtonWatch.com 2008 rate card
Contact WashingtonWatch.com about sponsorship
WashingtonWatch.com Site Data:
- 75,000+ unique users per month
- 150,000+ page views per month
- 15 of the top 100 networks bringing visitors to WashingtonWatch.com are government networks, including the U.S. House and Senate, the Veterans Administration, the Department of Defense, USDA, DHS, Pentagon, the Army Corps of Engineers, the Department of State, and FEMA
- 13.8% of visitors to WashingtonWatch.com are in the DC/VA/MD area
- 100% of visitors to WashingtonWatch.com are interested and active in politics and public policy
(*All sponsorships must comply with WashingtonWatch.com editorial policies and can be refused for any reason or no reason.)


text:
Select your color/finish:
White Wall with Nickel Grab Bar
Biscuit Wall with Nickel Grab Bar
US List Price:
(based on selected color/finish)
Product Components: Wall Set (71164103-N), Bath (71161110)
When classic meets contemporary in the Accord multi-piece bath/shower, the result is inspired, smart design. The bath/shower delivers clean style along with convenient storage and fast, easy installation.
- Designed with a 20" apron
- Made of solid Vikrell material for strength, durability, and lasting beauty
- Modular design allows for easy installation during any phase of construction
- High-gloss finish provides a smooth, shiny surface that is easy to clean
- Geometric backwall design adds visual interest while easy to clean
- Rounded interior space provides more room for the bather
- Abundant, recessed storage reduces the visual clutter
- "Snap" together installation. An qudible click lets you know when the walls are properly installed
- No caulking required in the seams
- Includes three Sterling Age-In-Place grab bars: one 80012134 and two 80001024 individually packed inside the wall set box
- Conforms to ANSI Z124.1.2 and CSA B45.1 National Consensus Standards
The product was saved to your project folder.
*Due to the differences in monitors, technical factors, and characteristics of some of our finishes, the colors shown here cannot be represented with all their true qualities. The color tiles should only be considered a guide *All prices are Manufacturer's Suggested List Prices in U.S. dollars. The price you pay at your local supply outlet may be different than the Manufacturer's Suggested List Price. These prices supersede previous prices and are subject to change without notice. These prices do not include shipping. Any sales tax applicable will be added to the prices.


text:
....for you MMA gym membership?
and what exactly do you get for that?
Do you get to fight? mma league? fight nights? or do you have to pay extra membership to fight in competions?
Ive just learned that the gym I go to, that i pay £30 a month to use and go to mma classes etc, have said, for me to fight in MMA league etc, then I need to upgrade to a gold membership and thats £59 a month!
What you do you guys think? is that the norm?


text:
Ronco Pasta Maker
- Includes: Ronco Pasta Maker, 10 pasta shaping dies, Liquid & dry measuring cup, Pasta fork, Sausage horn, Instructional DVD, Pasta/sausage recipe book
(This product includes a shipping surcharge of $3.00.)
Availability: In Stock
Ready to ship in 1-2 Business Days
Reviewed by 1 customer
- Easy to use
- Works as advertised
- Bad plastic
Best Uses
- Homemade noodles
- Kitchen
Comments about this product:
I got one of these about 12 years ago, when Ronco first introduced it because I love pasta, the fresher, the better!! Used this thing on an almost weekly basis for quite a few years, and used it until it literally fell apart. Just had to retire it shortly before Thanksviving 2011, was making noodles for chicken soup when the plastic "drum" finally cracked apart and bit it. The motor was still going fine, though. If I could have found replacement parts, I would still be using it. Overall, I got my money's worth out of it, and it's not very much more expensive now than it was when I bought it years ago, and as soon as I have a few extra bucks, I'm getting another one!
- I Am A:
- Couple No Kids


text:
Hi guys, I would like to set a flag using a closure so that the internal value of that closure is preserved for me to retrieve it when different events occur. It is one of those times where lack of block scope will stop me from doing what I want to do unless I can set a boolean and preserve its value in a function.
Can someone suggest the best way of doing this?
var foo = (function() {
var called = 0;
return function() {
return ++called;
alert(foo()); // 1
alert(foo()); // 2
alert(foo()); // 3
Ok thats great thanks very much, I can now do things like:
if( foo() > 0)
// do something
IS there any way of passing a boolean into the closure in the first place to update that value (true or false) every time you call it?
var foo = (function(val) {
return function() {
return val = !val;
alert(foo()); // true
alert(foo()); // false
alert(foo()); // true
Thanks so much oddz, I was a C++ developer and I am having some problems adjusting to no block scope and using closure instead of classes and private member variables, this has solved it! Have a great weekend
Yeah, it is pretty cool when you get the hang of it in comparison to other languages. Closures are probably one of my favorite features of JavaScript.
Hi there I don't seem to be able to get this function to return correctly, I know it returns true then false alternately but I can't pass boolean parameters in ,
if I do:
foo(true); // truefoo(true); //falsefoo(true); //truefoo(true); //false
var foo = (function(val) {
return function() {
return val = !val;
the outer function is just triggered before you call fooso you can't pass the parameter.
Ok That seems ok to understand but what do you suggest as an alternative? I want to retain a value from outside a function, shall I just go back to creating it as an attribute of an object?
var foo = (function() {
var val;
return function(newval) {
return val = newval;


text:
As I write this column, my view is the skyline of Taipei from the famous skyscraper, the Tapei 101. This trip opened my eyes to the current and future potential of Asia in world trade. Taiwan is developing at a very rapid rate, as is China. If you are an executive of a hospitality technology company and Asia is not on your radar, you may want to revisit your strategy. The U.S market is still huge, but compared to what Asia will become after 2020, it is not even comparable. With the amount of time it can often take to penetrate the Asian market, it should be something to think and plan for sooner, rather than later.
Consider this fact: By 2020, China will become the world's largest English speaking country. The World Tourism Organization (UNWTO) (unwto.org) predicts that China will be the number one country in the world that receives the most international tourists and sends the greatest number of tourists abroad.
The Obama administration is making it easier for international tourists from countries with emerging economies, such as China and Brazil, to get tourist visas to the United States. In January, while standing on the steps of the Cinderella Castle in Orlando's Walt Disney World, President Obama called for a national strategy to make the United States the world's number one travel and tourism destination. According to the U.S. Travel Association's chief operating officer Geoff Freeman, the U.S. is losing between 4,000 and 5,000 jobs a year because of our nation's inability to keep pace with global travel trends.
Regardless of weather the U.S. or China ultimately receives more foreign visitors, one thing remains constant: Asians will have significant purchasing power in international tourism, and whether they choose to spend with American brands, or Asian brands that are now spreading overseas, will be dependent upon how prepared our hotels are to welcome this
burgeoning segment.
The role for technology
Back to my trip to Taipei: Upon landing at the Taipei airport, you're greeted by enormous ads offering apps that translate Mandarin to English. I downloaded the free app to my Android device and was pleased with its ease of use. While in the taxi riding from the airport to my hotel, the driver offered to turn on the portable TV mounted on the ceiling. I was surprised to come across English teaching shows as I flipped through channels. Every day, English is being taught through television shows, and students now learn English in
elementary school.
For technology companies, the prevalence of English does not mean that Asia's native tongues, such as Mandarin and Cantonese, should be ignored. Actually quite the opposite; now is the best time for hospitality software companies that are redesigning their infrastructures to build a support system for multiple languages. The best way of doing it seems to be to create a library for every user facing text in the software. When the time is right, it will be a matter of translating the text within the software. In addition to this, examining local systems for differences (i.e. tax systems) will take time, so this process should be started before developing the actual software solutions.
In addition to translating the software to local languages, it is extremely important to start building partnerships. In many Asian countries, doing business requires a local collaborator. Therefore, even if expanding to Asian countries is not an immediate goal, it is a good idea to start cultivating relationships with local business associates as early as possible.
Hospitality companies should also begin developing a strategy to prepare their staff for the increase in Asian business. Staff members will need to understand and be able to communicate with a significant wave of Asian guests. Technology for Internet-based training can solve this challenge. In addition, adding several associates from these emerging countries may also help with cultural training. Local hospitality schools can be an excellent source for finding U.S.-educated, international students.
The growth-rate of the Asian middle class is outpacing that of the U.S. There's significant opportunity for global hospitality companies to engage with these travelers. Preparation will be the differentiator for both hospitality companies and technology vendors.


text:
Alpha Epsilon Delta (pre-health honor society) will be hosting a two day blood drive for United Blood Services on campus. For medical and scientific purposes, blood is always needed and specifically Nevada is always in short supply of blood. Please come out and support a great cause by donating blood to save lives. Prizes will be given out with each successful donations along with a chance to lease a brand new Dodge vehicle for a year.
Walk-ins are welcome the day of event, but appointments will be given priority. To make an appointment visit the United Blood Services website. If you have donated before or are affiliated with United Blood Services you should be familiar with the process.
If appointments are filled and you would still like to sign up please email either Naweed Najand or Li Long.


text: You can see Mark Hamill and Carrie Fisher practicing their moves, doing the difficult scene flawlessly and then jumping ... onto a crash mat that was right in front of them.Lucas has said that he wanted to cut the kiss, but his then-wife Marcia ? one of the movie's three Academy Award-winning editors ? persuaded him to keep it in. However, he did cut the rest of that line: "For luck. We're going to need it."


text:
Taylor Lautner Bids Farewell to 'Twilight' at "Breaking Dawn - Part 2" Premiere
Stepping onto the red carpet for the franchise finale's premiere, Taylor Lautner looked excited as he arrived at the Nokia Theater for the "Breaking Dawn - Part 2" debut on Monday (November 12).
Handsomely dressed in a custom-tailored suit, the 20-year-old smiled and waved at the fans who had gathered to watch the film's stars make their entrance for the last installment of the "Twilight" saga.
Lautner, whose character, Jacob Black, became the object of many female fans' affections with his many shirtless scenes, recently said that he's glad he had the role.
"I love Jacob," Taylor said. "I really respect him in so many different ways. He has so many qualities to him that I would love to bring with me. He is going to be a tough character to say goodbye to, for sure."


text:
Ma$e defends Notorious B.I.G.'s legacy
Listen to Ma$e on iHeartRadio | Listen Notorious B.I.G. on iHeartRadio
Ma$e is speaking out in defense of the Notorious B.I.G.'s legacy.
In a recent Instagram post, the rapper writes that people have sold out Biggie. He adds that he hates to see the way that Big's legacy has been "watered down." He also believes that people should let him rest.
According to XXLMag.com, Ma$e's post may be a reaction to DJ Khaled's latest track, "I Feel Like Pac/ I Feel Like Biggie."
While Ma$e doesn't call out Khaled in his post, the Instagram message appeared just after Khaled released the track.
DJ Khaled's "I Feel Like Pac/I Feel Like Biggie" features Rick Ross, Meek Mill, T.I., Swizz Beatz and Biggie's former associate Diddy.
*Warning: Explicit language


text:
CINCINNATI (AP) -- Mitt Romney and Paul Ryan plan campaign stops in hotly contested Ohio early this week.
Romney's presidential campaign says Ryan is kicking off a "Romney Plan For a Stronger Middle Class" bus tour of the state with a town hall rally in Lima Monday afternoon. Ryan will then speak at another town hall meeting in Cincinnati Tuesday morning, before Romney and Ryan appear together for a rally at the Dayton International Airport Tuesday afternoon.
President Barack Obama's next Ohio visit will take him to the college towns of Bowling Green and Kent Wednesday.


text:
saying that you think belts are given out will nilly at pedro bessa , is imo disrespectful to all of us who train there. brian like to downplay the fact that he got a bluebelt from pedro saying he didnt think he deserved it but that was abig accomplishment for him.
everyone who i have seen graded under pedro has been worthy of the belt. just check the guys out in competition. for a relativley small club in terms of some of the bigger clubs in the UK. we at pedro bessa do very well in competition. showing that belts are earned and well deserved.


text:
Playdate, Universal, 8.30pm
THIS is quite the unusual little telemovie. It is occasionally amusing before growing progressively darker and having a couple of turnarounds that suddenly cast everything in a different light. It would also win any award for most startling yet strangely apt sex act in a TV movie. The drama centres on new neighbours Amy (Stephanie Lemelin) and Grace (Cybill's Alicia Witt), who bond over their young daughters and become best buddies despite Grace's husband (The Drew Carey Show's Diedrich Bader) being a silent, simmering kettle of resentment. When Grace suddenly stops talking to Amy, Amy is determined to find out why. Her increasingly desperate efforts begin to worry her husband (daytime soapie heart-throb Greg Vaughan). If Playdate seems oddly structured and episodic, that's because it was made so it could be shown as a movie, as four half-hour episodes, or as 13 six-minute shorts. It must have been quite the challenge for director Melanie Mayron (In Treatment), but the result is well worth a look.
Robot and Monster, Nickelodeon, 10.25am
A RAMBUNCTIOUS and endearing CGI animated series about the adventures of a little orange robot and a big purple monster. They live in a steampunk-looking world full of things destined for demolition. Robot, being the smart one, tends to get the worst of things - if only because Monster is better at absorbing physical punishment. Tonight they have to convince their landlord that Monster, and not the pet, has been eating the furniture.
Napoleon Dynamite, Fox8, 8.35pm
Jon Heder and Efren Ramirez, the original Napoleon and Pedro, lend their voices to this new and mildly amusing animated series based on the 2004 movie.
Gok Cooks Chinese, LifeStyle Food, 6.30pm
Great little series in which fashion guru Gok Wan and his restaurateur father cook up simple but scrummy dishes. Tonight's include scallops with chilli sauce.
Memphis Beat, 13th Street, 6.30pm
Jason Lee plays a rock'n'roll detective.
American Colony: The Hutterites, National Geographic, 8.30pm
THE Hutterite colony near Lewistown, Montana, comes across as being a kind of Amish-lite - there's a bit of drinking and swearing (among the menfolk, at least), there are a lot more mod cons, and a lot more contact with the outside world. But this comparative laxity extends only so far. On more important things, the word of the Hutterite religious elders is law, and to disobey it is to be exiled from the colony and shunned by family and friends. The cruelty of this is made clear tonight. The bright young Tammy turns 17 and so must leave her outside school - which she loves - and go to work in the colony kitchen. Well, that or be banished from the only home she has known. It's no choice at all, and the only protest Tammy can make is to defy the colony by going to school for one more day. Her mother's elation and relief at her acquiescence is sickening. American Colony has been clouded in controversy, with some of the Hutterites who appear in it claiming it was partly scripted and an unfair representation. Executive producer Jeff Collins contended the disavowals were made under threat of excommunication. Whatever the truth of it, the depressing basics of Hutterite life don't seem to be in dispute.
Happily Never After, CI, 7.30pm
A FAIRLY standard murder-doco series that doesn't benefit from the silly fairytale trappings and voice-over, nor from the carry-on of psychologist Wendy Walsh, who tries to emote every word that comes out of her mouth as if she were in her first amateur drama workshop.
When I Knew, Bio, 9.30pm
Filmmakers Fenton Bailey and Randy Barbato (Becoming Chaz, Party Monster) ask people when they realised they were gay.
The Soup, E!, 8.30pm
A thoroughly enjoyable round-up of the week's televised idiocy. But there's no need for Joel McHale to be so unkind to Honey Boo Boo's mum.
MTV Live Vibrations: Carly Rae Jepsen, MTV Live, 10pm
Carly Rae Jepsen performs live in London.


text:
Finding Elements in One Array but Not Another
You want to find elements that are in one list but not another.
You want to find elements in list A that aren't in list B. Erlang provides several ways of doing this:
Use the lists:subtract Function
The lists module provides the subtract function, which takes two list and returns a new copy of the first list, such that the first occurrence of each element of the second list is removed. For example:
1> A = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]. [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] 2> B = [2,4,6,8,9,10,12,14,15,16]. [2,4,6,8,9,10,12,14,15,16]. 3> lists:subtract(A,B). [1,3,5,7,11,13]
Note: Erlang provides native list operators for concatentation (++) and subtraction (--). The subtraction operator provides the same functionality as the lists:subtract function:
Iterate over the two lists
You can iterate over the two lists (using the lists:foreach function), and filter out any entries from list A that are also members of list B.
5> lists:foldl(fun(X,ACC) -> Y=lists:member(X, B), 5> if Y -> [X|ACC]; 5> true -> ACC 5> end end, [], lists:reverse(A)). [2,4,6,8,9,10,12,14,15,16]


text:
Recently Browsing 0 members
No registered users viewing this page.
Who is the Best Russian the Wings Have Ever Had?
Started by
Guest Johnz96,
Rate this topic
Best All-Time Russian Red Wing
120 members have voted
104 posts in this topic
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign In Now


text:
Cool Sources is exhibiting its multimedia mini projector, the CS-PJ07, at the ongoing Computex 2009.
The mini projector is about a quarter of an A4 sheet in size and weight 180g. Illuminate by energy-saving LED light with an expected life of 30,000 hours.
CS-PH07 has built-in 2300mA lithium battery, 1GB memory and can support up to 4GB of memory by TF card. Users can store documents, images, pictures and files directly on the product and play movies including MP3/MP4/MP5/ASF/AVI/JPEG/MPEG4/3gp/wmv/amv/RMVB, and other files.
It comes with built-in speakers and connectors for USB, DVD, AV, digital camera, PDA mobile phone, Mp4 and PSP.
- Wireless broadband developments in Southeast Asia markets
As of 2013, the 10 ASEAN nations had a total of over 700 million mobile subscriptions, with the CAGR from 2003-2013 reaching 24%. This Digitimes Research Special Report analyzes the various mobile broadband markets in ASEAN and looks at the respective trends in 4G LTE development for those markets.
- 2015 global tablet demand forecast
This Digitimes Research Special Report provides a 2015 forecast for the global tablet market and analyzes the strategies of key market players such as Google, Apple, Intel, and Microsoft.
- 2015 China smartphone panel trend forecast
This Digitimes Research Special Report analyzes the strategies of key China-based major panel makers BOE, Tianma and IVO for attacking the different market segments through technology and pricing, and their relationship to local vendors Huawei, Lenovo, ZTE, Xiaomi and Coolpad.


text: OverviewBack to top Natural Factors - Celery Seed Extract - 60 Capsules Item# :50272UPC# :068958045153 Brand:Natural Factors Size/Form:60 Capsules Ship Weight:0.08 Servings:60 Dosage:1 Capsule(s) Natural Factors - Celery Seed Extract - 60 Capsules Natural Factors Celery Seed Extract is standardized to contain 85% 3-n-butyl phthalide or 3nB - a compound that is unique to celery and is responsible for the characteristic flavour and odour of celery. One capsule provides the same level of 3nB as 4-6 ribs of celery. 3nB was discovered as the active component of celery in response to investigations by researchers seeking to explain some of the medicinal effects of celery including the lowering of blood pressure, the relief of arthritis and especially gout. Natural Factors priority is enhancing people's health. They offer more than 300 different formulas available exclusively at natural health stores. They are family-owned, Canadian-based business. They have produced and sold quality supplements to North Americans for more than 50 years. They grow their own herbs, organically and process them fresh from the fields. They test and standardize herbs for total quality control. Their science team includes medical doctors, naturopathic physicians, researchers and herbalists from around the world. They create new, condition-specific formulas that are clinically proven to work. Their laboratory facilities comply with Good Laboratory Practices and are among the finest in North America. They meet or exceed Canadian Government Good Manufacturing Practices (GMP) guidelines and all Health Canada and FDA regulatory requirements Factor Farms:A quality herbal product starts with the highest quality fresh organic plant material. The efficacy of herbal products has always been affected by growing conditions, harvesting, processing and storage. At Factor Farms in beautiful Kelowna, British Columbia, Canada our quality can be guaranteed as we control the entire process from seedling to finished product. To grow herbs organically no chemical fertilizers, herbicides, fungicides or pesticides are allowed. We use only natural substances that have been approved by the organic industry. You can be assured that the fresh herb extracts contain no traces of unwanted chemical. Even the seed and plant sources are organic. To be organically certified, certification inspectors work closely with growers to ensure that the organic standards are adhered to. We must keep detailed records of what we use on our farm. Even after harvest, processing is regulated so that no harmful chemicals are used to manufacture the fresh herb extracts. Local cultivation of medicinal herbs at Factors Farms ensures that the herbs are picked, processed, and extracted at just the right time when the active ingredients are at their peak. Natural Factor knows that the natural habitats of many herbs are shrinking and that over-harvesting from the wild can endanger native medicinal plant populations. So organic cultivation of herbs is preferred over "wild crafting".