Blessed John XXIII National Seminary
558 South Ave.
Weston, MA 02493-2699
Conception Starting January 2017
Diocese of Dodge City prior to January
Dodge City, KS 67801
Conception Seminary College
PO Box 502
Conception, MO 64433-0502
Holy Trinity Seminary
3131 Vince Hagan Drive
Irving, TX 75062
Kenrick-Glennon Seminary
5200 Glennon Dr.
St. Louis, MO 63119-4399
Mount Saint Mary’s Seminary
16300 Old Emmitsburg Rd.
Emittsburg, MD 21727-7797
Mundelein Seminary
1000 E. Maple Ave.
Mundelein, IL 60060-1174
Pontifical North American College
00120 Vatican City State
, Europe
Sacred Heart School of Theology
PO Box 429
Hales Corners, WI 53130-0429
Saint Meinrad School of Theology
200 Hill Drive
St. Meinrad, IN 47577
St. John Vianney College Seminary
2115 Summit Ave.
St. Paul, MN 55105-1095
St. John Vianney Theological Seminary
1300 S. Steele St.
Denver, CO 80210
St. Lawrence Center
1631 Crescent Road
Lawrence, KS 66044


Take the quiz below to find out which programming language I suggest you learn!
Thank you for taking my quiz :) Based on your answers to the above questions I suggest you learn Python!
Thanks for taking my quiz! Based on your answers I would suggest that you take try out learning Javascript!
I appreciate you taking the time to try my quiz. Based on your answers I belive that both Ruby and C# would be good languages for you to look into learning.
I'm sorry. It appears that there has been an error. Please try a different combination of answers.


Saint Mina Retreat Center
lies on forty-five acres of land located in Mio, Michigan. Saint Mina Coptic Orthodox Church is located on
the property of St. Mina Retreat Center for religious services and quiet meditation. The newly completed
building houses sleeping rooms for family and youth retreats, a reception area with a library, meeting
rooms, and kitchen amenities. The location of the land provides a wonderful opportunity for those who wish
to leave the outside world behind and enjoy the serenity of a remote wooded area surrounding a gorgeous body
of water. Such peaceful ambiance truly offers the person an opportunity to examine the soul and find
calmness and positive energy. You are invited to participate in a moving and magnificent time meditating on
the Word of God from the Holy Scriptures and ways to apply it in your life. St. Mina Retreat Center will
provide you with the proper atmosphere to achieve this goal. You are encouraged to take full advantage of
what St. Mina Retreat Center has to offer.
St Mina Retreat Center 10 Year Anniversary Video 2015


Computer/Software Engineer
Experience/CVI enjoy learning science, logic, and mathematics. I aim on applying them to create fantastic projects to make our world a better place.
Python, C/C++, Rust
Cloud Computing
Backend
Embedded Systems
Networking
Security
Computer
Architecture
Music production
Age of Empires II DE
PC building
Golf
Meta (Facebook), Inc
Juniper Networks, Inc
MediaTek, Inc
Collins
Aerospace (Rockwell Collins),
Inc


Trident API overview
The core data model in Trident is the “Stream”, processed as a series of batches. A stream is partitioned among the nodes in the cluster, and operations applied to a stream are applied in parallel across each partition.
There are five kinds of operations in Trident:
- Operations that apply locally to each partition and cause no network transfer
- Repartitioning operations that repartition a stream but otherwise don’t change the contents (involves network transfer)
- Aggregation operations that do network transfer as part of the operation
- Operations on grouped streams
- Merges and joins
Partition-local operations
Partition-local operations involve no network transfer and are applied to each batch partition independently.
Functions
A function takes in a set of input fields and emits zero or more tuples as output. The fields of the output tuple are appended to the original input tuple in the stream. If a function emits no tuples, the original input tuple is filtered out. Otherwise, the input tuple is duplicated for each output tuple. Suppose you have this function:
java
public class MyFunction extends BaseFunction {
public void execute(TridentTuple tuple, TridentCollector collector) {
for(int i=0; i < tuple.getInteger(0); i++) {
collector.emit(new Values(i));
}
}
}
Now suppose you have a stream in the variable “mystream” with the fields [“a”, “b”, “c”] with the following tuples:
[1, 2, 3]
[4, 1, 6]
[3, 0, 8]
If you run this code:
java
mystream.each(new Fields("b"), new MyFunction(), new Fields("d")))
The resulting tuples would have fields [“a”, “b”, “c”, “d”] and look like this:
[1, 2, 3, 0]
[1, 2, 3, 1]
[4, 1, 6, 0]
Filters
Filters take in a tuple as input and decide whether or not to keep that tuple or not. Suppose you had this filter:
java
public class MyFilter extends BaseFunction {
public boolean isKeep(TridentTuple tuple) {
return tuple.getInteger(0) == 1 && tuple.getInteger(1) == 2;
}
}
Now suppose you had these tuples with fields [“a”, “b”, “c”]:
[1, 2, 3]
[2, 1, 1]
[2, 3, 4]
If you ran this code:
java
mystream.each(new Fields("b", "a"), new MyFilter())
The resulting tuples would be:
[2, 1, 1]
partitionAggregate
partitionAggregate runs a function on each partition of a batch of tuples. Unlike functions, the tuples emitted by partitionAggregate replace the input tuples given to it. Consider this example:
java
mystream.partitionAggregate(new Fields("b"), new Sum(), new Fields("sum"))
Suppose the input stream contained fields [“a”, “b”] and the following partitions of tuples:
``` Partition 0: [“a”, 1] [“b”, 2]
Partition 1: [“a”, 3] [“c”, 8]
Partition 2: [“e”, 1] [“d”, 9] [“d”, 10] ```
Then the output stream of that code would contain these tuples with one field called “sum”:
``` Partition 0: [3]
Partition 1: [11]
Partition 2: [20] ```
There are three different interfaces for defining aggregators: CombinerAggregator, ReducerAggregator, and Aggregator.
Here’s the interface for CombinerAggregator:
java
public interface CombinerAggregator<T> extends Serializable {
T init(TridentTuple tuple);
T combine(T val1, T val2);
T zero();
}
A CombinerAggregator returns a single tuple with a single field as output. CombinerAggregators run the init function on each input tuple and use the combine function to combine values until there’s only one value left. If there’s no tuples in the partition, the CombinerAggregator emits the output of the zero function. For example, here’s the implementation of Count:
```java
public class Count implements CombinerAggregator
public Long combine(Long val1, Long val2) {
return val1 + val2;
}
public Long zero() {
return 0L;
} } ```
The benefits of CombinerAggregators are seen when you use the with the aggregate method instead of partitionAggregate. In that case, Trident automatically optimizes the computation by doing partial aggregations before transferring tuples over the network.
A ReducerAggregator has the following interface:
java
public interface ReducerAggregator<T> extends Serializable {
T init();
T reduce(T curr, TridentTuple tuple);
}
A ReducerAggregator produces an initial value with init, and then it iterates on that value for each input tuple to produce a single tuple with a single value as output. For example, here’s how you would define Count as a ReducerAggregator:
```java
public class Count implements ReducerAggregator
public Long reduce(Long curr, TridentTuple tuple) {
return curr + 1;
} } ```
ReducerAggregator can also be used with persistentAggregate, as you’ll see later.
The most general interface for performing aggregations is Aggregator, which looks like this:
java
public interface Aggregator<T> extends Operation {
T init(Object batchId, TridentCollector collector);
void aggregate(T state, TridentTuple tuple, TridentCollector collector);
void complete(T state, TridentCollector collector);
}
Aggregators can emit any number of tuples with any number of fields. They can emit tuples at any point during execution. Aggregators execute in the following way:
- The init method is called before processing the batch. The return value of init is an Object that will represent the state of the aggregation and will be passed into the aggregate and complete methods.
- The aggregate method is called for each input tuple in the batch partition. This method can update the state and optionally emit tuples.
- The complete method is called when all tuples for the batch partition have been processed by aggregate.
Here’s how you would implement Count as an Aggregator:
```java
public class CountAgg extends BaseAggregator
public CountState init(Object batchId, TridentCollector collector) {
return new CountState();
}
public void aggregate(CountState state, TridentTuple tuple, TridentCollector collector) {
state.count+=1;
}
public void complete(CountState state, TridentCollector collector) {
collector.emit(new Values(state.count));
} } ```
Sometimes you want to execute multiple aggregators at the same time. This is called chaining and can be accomplished like this:
java
mystream.chainedAgg()
.partitionAggregate(new Count(), new Fields("count"))
.partitionAggregate(new Fields("b"), new Sum(), new Fields("sum"))
.chainEnd()
This code will run the Count and Sum aggregators on each partition. The output will contain a single tuple with the fields [“count”, “sum”].
stateQuery and partitionPersist
stateQuery and partitionPersist query and update sources of state, respectively. You can read about how to use them on Trident state doc.
projection
The projection method on Stream keeps only the fields specified in the operation. If you had a Stream with fields [“a”, “b”, “c”, “d”] and you ran this code:
java
mystream.project(new Fields("b", "d"))
The output stream would contain only the fields [“b”, “d”].
Repartitioning operations
Repartitioning operations run a function to change how the tuples are partitioned across tasks. The number of partitions can also change as a result of repartitioning (for example, if the parallelism hint is greater after repartioning). Repartitioning requires network transfer. Here are the repartitioning functions:
- shuffle: Use random round robin algorithm to evenly redistribute tuples across all target partitions
- broadcast: Every tuple is replicated to all target partitions. This can useful during DRPC – for example, if you need to do a stateQuery on every partition of data.
- partitionBy: partitionBy takes in a set of fields and does semantic partitioning based on that set of fields. The fields are hashed and modded by the number of target partitions to select the target partition. partitionBy guarantees that the same set of fields always goes to the same target partition.
- global: All tuples are sent to the same partition. The same partition is chosen for all batches in the stream.
- batchGlobal: All tuples in the batch are sent to the same partition. Different batches in the stream may go to different partitions.
- partition: This method takes in a custom partitioning function that implements backtype.storm.grouping.CustomStreamGrouping
Aggregation operations
Trident has aggregate and persistentAggregate methods for doing aggregations on Streams. aggregate is run on each batch of the stream in isolation, while persistentAggregate will aggregation on all tuples across all batches in the stream and store the result in a source of state.
Running aggregate on a Stream does a global aggregation. When you use a ReducerAggregator or an Aggregator, the stream is first repartitioned into a single partition, and then the aggregation function is run on that partition. When you use a CombinerAggregator, on the other hand, first Trident will compute partial aggregations of each partition, then repartition to a single partition, and then finish the aggregation after the network transfer. CombinerAggregator’s are far more efficient and should be used when possible.
Here’s an example of using aggregate to get a global count for a batch:
java
mystream.aggregate(new Count(), new Fields("count"))
Like partitionAggregate, aggregators for aggregate can be chained. However, if you chain a CombinerAggregator with a non-CombinerAggregator, Trident is unable to do the partial aggregation optimization.
You can read more about how to use persistentAggregate in the Trident state doc.
Operations on grouped streams
The groupBy operation repartitions the stream by doing a partitionBy on the specified fields, and then within each partition groups tuples together whose group fields are equal. For example, here’s an illustration of a groupBy operation:
If you run aggregators on a grouped stream, the aggregation will be run within each group instead of against the whole batch. persistentAggregate can also be run on a GroupedStream, in which case the results will be stored in a MapState with the key being the grouping fields. You can read more about persistentAggregate in the Trident state doc.
Like regular streams, aggregators on grouped streams can be chained.
Merges and joins
The last part of the API is combining different streams together. The simplest way to combine streams is to merge them into one stream. You can do that with the TridentTopology#merge method, like so:
java
topology.merge(stream1, stream2, stream3);
Trident will name the output fields of the new, merged stream as the output fields of the first stream.
Another way to combine streams is with a join. Now, a standard join, like the kind from SQL, require finite input. So they don’t make sense with infinite streams. Joins in Trident only apply within each small batch that comes off of the spout.
Here’s an example join between a stream containing fields [“key”, “val1”, “val2”] and another stream containing [“x”, “val1”]:
java
topology.join(stream1, new Fields("key"), stream2, new Fields("x"), new Fields("key", "a", "b", "c"));
This joins stream1 and stream2 together using “key” and “x” as the join fields for each respective stream. Then, Trident requires that all the output fields of the new stream be named, since the input streams could have overlapping field names. The tuples emitted from the join will contain:
- First, the list of join fields. In this case, “key” corresponds to “key” from stream1 and “x” from stream2.
- Next, a list of all non-join fields from all streams, in order of how the streams were passed to the join method. In this case, “a” and “b” correspond to “val1” and “val2” from stream1, and “c” corresponds to “val1” from stream2.
When a join happens between streams originating from different spouts, those spouts will be synchronized with how they emit batches. That is, a batch of processing will include tuples from each spout.
You might be wondering – how do you do something like a “windowed join”, where tuples from one side of the join are joined against the last hour of tuples from the other side of the join.
To do this, you would make use of partitionPersist and stateQuery. The last hour of tuples from one side of the join would be stored and rotated in a source of state, keyed by the join field. Then the stateQuery would do lookups by the join field to perform the “join”.


--- layout: post mathjax: true comments: true date: 2012-12-15 title: [Project Euler] #19 Solution excerpt: | This page presents a Ruby solution to Project Euler Problem 19. tags: - project euler problem 19 solution - project euler problem 19 answer - project euler problem 19 ruby ---
You are given the following information, but you may prefer to do some research for yourself.
1 Jan 1900 was a Monday.
Thirty days has September,
April, June and November.
All the rest have thirty-one,
Saving February alone,
Which has twenty-eight, rain or shine.
And on leap years, twenty-nine.
A leap year occurs on any year evenly divisible by 4,
but not on a century unless it is divisible by 400.
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
171


---
title: ComponentName
description: Include your description here
layout: layout-sidenav
category: general
react-link: false
vue-link: false
github-link: false
toc: true
---
{% capture default-component %}
{% include page-component/component-header.html %}
Example
{% include page-component/component-code-snippet.html compTitle="Default Component" compName="default-component" code=default-component %}
{% include page-component/component-code-snippet.html compTitle="Default Component" compName="default-component" code=default-component %}
Anatomy
-
Title: Serves to let the user know exactly what the card is about, ideal to keep this short and to the point
-
Description: Serves to give users information on the card
-
Call to action (situational): When you need users to take a action, this can be omitted if the card is meant to display only information
-
Image: Gives context to the user as to what the card is about
-
Icon: Serves to support the nature of the card. Gives more context to the user about what the card is about. E.g category
-
Selector: Allows users to select one or more cards
Spacing
Within the card
Ensure that there is a min 24px spacing inside of the card and 16px vertical spacing between content.
Outside the card
Ensure that there is a min 32px spacing vertically and horizontally between cards
Usage guidelines
Accordions increases the cognitive load for users, as decisions have to be made when clicking on the headers. Users may also ignore important information if it is hidden in an accordion.
When to use the accordion component:
- There is insufficient space within the page to display the necessary information.
- Users require an overview of specific content that's related to one another.
When not to use the accordion component:
-
There is insufficient space within the page to display the necessary information.
- Accordions hide content, and there may be users who may miss the content or not understand how accordions work.
- If users need to see all information in a single page, you can consider reducing your content, splitting them into smaller sections, or use well-formatted text (e.g. headers, contents, section)
Usability guidelines
Do ensure that the entire heading is clickable to the user.
A larger target will make it easier for users to manipulate
Ensure enough space between content and headings
This is to prevent the user from accidentally closing the accordion
{{page.title}} design tokens
{%- highlight sass -%}{{design-tokens}}{%- endhighlight -%}


CALCULUS II
Unit 1 - The Integrals
Unit 2 - The Integrals
Unit 3 - The Area Between Two Curves
Unit 4 - Integration By Substitutions & By Parts
Unit 5 - Techniques In Integration
Unit 6 - Powers & Products Of Trigonmetric Functions
Unit 7 - Trigonometric Substitution
Unit 8 - Approximate Integrals
Unit 9 - Application Of Integrals: Volume
Unit 10 - Application Of Integrals: Arc Length & Surface Areas
Unit 11 - Application Of Integrals: The Average Value Of A Function
Unit 12 - Conic Sections: Parabolas Ellipses & Hyperbolas
INTRODUCTION TO COMPUTERS FOR MATHEMATICS
Introduction To Computers For Mathematics - All Unit
LINEAR ALGEBRA I
PROBABILITY & STATISTICS
DISCRETE MATHEMATICS
COMMUNICATION SKILLS II


Images should be drawn into a window in the window's on_draw event handler. Usually a "sprite" should be created for each appearance of the image on-screen. Images can also be drawn directly without creating a sprite.
A sprite is an instance of an image displayed in the window. Multiple sprites can share the same image; for example, hundreds of bullet sprites might share the same bullet image.
A sprite is constructed given an image or animation, and drawn with the Sprite.draw method:
sprite = pyglet.sprite.Sprite(image) @window.event def on_draw(): window.clear() sprite.draw()
Sprites have properties for setting the position, rotation, scale, opacity, color tint and visibility of the displayed image. Sprites automatically handle displaying the most up-to-date frame of an animation. The following example uses a scheduled function to gradually move the sprite across the screen:
def update(dt): # Move 10 pixels per second sprite.x += dt * 10 # Call update 60 times a second pyglet.clock.schedule_interval(update, 1/60.)
If you need to draw many sprites, use a Batch to draw them all at once. This is far more efficient than calling draw on each of them in a loop:
batch = pyglet.graphics.Batch() sprites = [pyglet.sprite.Sprite(image, batch=batch), pyglet.sprite.Sprite(image, batch=batch), # ... ] @window.event def on_draw(): window.clear() batch.draw()
When sprites are collected into a batch, no guarantee is made about the order in which they will be drawn. If you need to ensure some sprites are drawn before others (for example, landscape tiles might be drawn before character sprites, which might be drawn before some particle effect sprites), use two or more OrderedGroup objects to specify the draw order:
batch = pyglet.graphics.Batch() background = pyglet.graphics.OrderedGroup(0) foreground = pyglet.graphics.OrderedGroup(1) sprites = [pyglet.sprite.Sprite(image, batch=batch, group=background), pyglet.sprite.Sprite(image, batch=batch, group=background), pyglet.sprite.Sprite(image, batch=batch, group=foreground), pyglet.sprite.Sprite(image, batch=batch, group=foreground), # ...] @window.event def on_draw(): window.clear() batch.draw()
See the Graphics section for more details on batch and group rendering.
For best performance, try to collect all batch images into as few textures as possible; for example, by loading images with pyglet.resource.image (see Application resources) or with Texture bins and atlases).
A simple but less efficient way to draw an image directly into a window is with the blit method:
@window.event def on_draw(): window.clear() image.blit(x, y)
The x and y coordinates locate where to draw the anchor point of the image. For example, to center the image at (x, y):
kitten.anchor_x = kitten.width // 2 kitten.anchor_y = kitten.height // 2 kitten.blit(x, y)
You can also specify an optional z component to the blit method. This has no effect unless you have changed the default projection or enabled depth testing. In the following example, the second image is drawn behind the first, even though it is drawn after it:
from pyglet.gl import * glEnable(GL_DEPTH_TEST) kitten.blit(x, y, 0) kitten.blit(x, y, -0.5)
The default pyglet projection has a depth range of (-1, 1) -- images drawn with a z value outside this range will not be visible, regardless of whether depth testing is enabled or not.
Images with an alpha channel can be blended with the existing framebuffer. To do this you need to supply OpenGL with a blend equation. The following code fragment implements the most common form of alpha blending, however other techniques are also possible:
from pyglet.gl import * glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
You would only need to call the code above once during your program, before you draw any images (this is not necessary when using only sprites).


About Me
People call me Fuad
I'm a Creative Technologist.
Check out my Portfolio
Savant
Quantified Self + Front-End + UX
No i Gitara!
Front-End + Branding + Photography
Leaf
Placemaking + UX + Physical Computing
Graduation Show
Curation + VR + Fabrication
Reflection
VE + Motion Capture + VFX
Vivid Sydney
Vivid SydneyWe Are Waterfall
Vivid Sydney / Projection Mapping
Photography
Travel Photography + Post-Processing
Parsons School of Design
Creative Technologies
Find out more!
More
...HCI, 3D Modelling, Videography, Blog, Radio...
Peek at my Website
LinkedIn me
Email me
CV
Full Fuad


import re
import io
import time
import os.path
import typing
import tarfile
import asyncio
import logging
import tempfile
import functools
import configparser
import yaml
from ..abc import Service
from ..config import Config
from ..log import LOG_NOTICE
#
L = logging.getLogger(__name__)
#
[docs]class LibraryService(Service):
'''
ASAB library (aka LibraryService) is an abstration for unified filesystem-like access to resources.
In the cluster/cloud microservice architectures, it is imperative that all microservices have access to unified resources.
There are technologies such as Apache Zookeeper that provides means for it.
ASAB library builts on top of this concept and brings that into the ASAB microservice.
ASAB library is designed to be read-only.
It also allows to "stack" various libraries into one view (overlayed) that merges content of each library into one united space.
Configuration:
```
[library]
providers:
provider+1://
provider+2://
provider+3://
```
The order of providers *IS* important, the priority (or layering) is top-down.
Each library provider is specified by URL/URI schema:
* `zk://` or `zookeeper://` for ZooKeeper provider
* `file://` or local path for FileSystem provider
* `azure+https://` for Microsoft Azure Storage provider.
The first provider is also responsible for providing `/.disabled.yaml` that controls a visibility of items.
If `/.disabled.yaml` is not present, then is considered empty.
A library is created in "not ready" state, each provider then inform library when it is ready (eg. Zookeeper provider needs to connect to Zookeeper servers).
Only after all providers are ready, the library itself become ready.
The library indicates that by the PubSub event `ASABLibrary.ready!`.
'''
def __init__(self, app, service_name, paths=None):
'''
The library service is designed to "exists" in multiple instances,
with different `paths` setup.
For that reason, you have to provide unique `service_name`
and there is no _default_ value for that.
If `paths` are not provided, they are fetched from `[library]providers` configuration.
'''
super().__init__(app, service_name)
self.Libraries = list()
self.Disabled = {}
if paths is None:
try:
paths = Config.get("library", "providers")
except configparser.NoOptionError:
L.critical("'providers' option is not present in configuration section 'library'.")
raise SystemExit("Exit due to a critical configuration error.")
if isinstance(paths, str):
paths = re.split(r"\s+", paths)
for path in paths:
self._create_library(path)
app.PubSub.subscribe("Application.tick/60!", self.on_tick)
async def finalize(self, app):
while len(self.Libraries) > 0:
lib = self.Libraries.pop(-1)
await lib.finalize(self.App)
async def on_tick(self, message_type):
await self._read_disabled()
def _create_library(self, path):
library_provider = None
if path.startswith('zk://') or path.startswith('zookeeeper://'):
from .providers.zookeeper import ZooKeeperLibraryProvider
library_provider = ZooKeeperLibraryProvider(self, path)
elif path.startswith('./') or path.startswith('/') or path.startswith('file://'):
from .providers.filesystem import FileSystemLibraryProvider
library_provider = FileSystemLibraryProvider(self, path)
elif path.startswith('azure+https://'):
from .providers.azurestorage import AzureStorageLibraryProvider
library_provider = AzureStorageLibraryProvider(self, path)
elif path.startswith('git+'):
from .providers.git import GitLibraryProvider
library_provider = GitLibraryProvider(self, path)
elif path == '' or path.startswith("#") or path.startswith(";"):
# This is empty or commented line
return
else:
L.error("Incorrect/unknown provider for '{}'".format(path))
raise SystemExit("Exit due to a critical configuration error.")
self.Libraries.append(library_provider)
def is_ready(self):
"""
It checks if all the libraries are ready.
:return: A boolean value.
"""
return functools.reduce(
lambda x, provider: provider.IsReady and x,
self.Libraries,
True
)
async def _set_ready(self, provider):
if provider == self.Libraries[0]:
await self._read_disabled()
if self.is_ready():
L.log(LOG_NOTICE, "is ready.", struct_data={'name': self.Name})
self.App.PubSub.publish("ASABLibrary.ready!", self)
[docs] async def read(self, path: str, tenant: str = None) -> typing.IO:
"""
Read the content of the library item specified by `path`.
`None` is returned if the item is not found in the library.
If the item is disabled (globally or for specified tenant) then None is returned.
Example of use:
```
itemio = await library.read('/path', 'tenant')
if itemio is not None:
with itemio:
return itemio.read()
```
:param path: The path to the file, `LibraryItem.name` can be used directly
:param tenant: The tenant to apply. If not specified, the global access is assumed
:return: I/O stream (read) with the content of the libary item.
"""
# item path must start with '/'
assert path[:1] == '/', "Item path must start with a forward slash (/). For example: /library/Templates/item.json"
# Item path must end with the extension
assert len(os.path.splitext(path)[1]) > 0, "Item path must end with an extension. For example: /library/Templates/item.json"
if self.check_disabled(path, tenant=tenant):
return None
for library in self.Libraries:
itemio = await library.read(path)
if itemio is None:
continue
return itemio
return None
[docs] async def list(self, path="/", tenant=None, recursive=False):
"""
List the directory of the library specified by the path.
It returns a list of `LibraryItem` entris.
Tenant is an optional parameter to list method for "disable" evaluation.
and default recursive is False.
When tenant=None
The method returns list of items that are enabled (not disabled).
When tenant='xxxxx'
The method returns list of items that are enabled (not disabled) for tenant 'xxxxx'.
When recursive=True
The method returns list of items that are located at `path` and in subdirectories of that location.
When recursive=False
The method returns list of items that are located at `path`
"""
# Directory path must start with '/'
assert path[:1] == '/', "Directory path must start with a forward slash (/). For example: /library/Templates/"
# Directory path must end with '/'
assert path[-1:] == '/', "Directory path must end with a forward slash (/). For example: /library/Templates/"
# Directory path cannot contain '//'
assert '//' not in path
# List requested level using all available providers
items = await self._list(path, tenant, providers=self.Libraries)
if recursive:
# If recursive scan is requested, then iterate thru list of items
# find 'dir' types there and list them.
# Output of this list is attached to the list for recursive scan
# and also to the final output
recitems = list(items[:])
while len(recitems) > 0:
item = recitems.pop(0)
if item.type != 'dir':
continue
child_items = await self._list(item.name, tenant, providers=item.providers)
items.extend(child_items)
recitems.extend(child_items)
return items
async def _list(self, path, tenant, providers):
# Execute the list query in all providers in-parallel
result = await asyncio.gather(*[
library.list(path)
for library in providers
], return_exceptions=True)
items = []
uniq = dict()
for ress in result:
if isinstance(ress, KeyError):
# The path doesn't exists in the provider
continue
if isinstance(ress, Exception):
L.exception("Error when listing items from provider", exc_info=ress)
continue
for item in ress:
item.disabled = self.check_disabled(item.name, tenant=tenant)
# If the item already exists, merge it
pitem = uniq.get(item.name)
if pitem is not None:
if pitem.type == 'dir' and item.type == 'dir':
# Directories are joined
pitem.providers.extend(item.providers)
# Other item types are skipped
continue
uniq[item.name] = item
items.append(item)
items.sort(key=lambda x: x.name)
return items
async def _read_disabled(self):
# `.disabled.yaml` is read from the first configured library
# It is applied on all libraries in the configuration.
disabled = await self.Libraries[0].read('/.disabled.yaml')
if disabled is None:
self.Disabled = {}
else:
try:
self.Disabled = yaml.safe_load(disabled)
if self.Disabled is None:
self.Disabled = {}
else:
# Disabled must be a dictionary object
assert (isinstance(self.Disabled, dict)), "The 'Disabled' attribute must be a dictionary instance."
except Exception:
self.Disabled = {}
L.exception("Failed to parse '/.disabled.yaml'")
def check_disabled(self, path, tenant=None):
"""
If the item is disabled for everybody, or if the item is disabled for the specified tenant, then
return True. Otherwise, return False
:param path: The path to the item
:param tenant: The tenant name
:return: Boolean
"""
disabled = self.Disabled.get(path)
if disabled is None:
return False
if disabled == '*':
# Item is disabled for everybody
return True
if tenant is not None and tenant in disabled:
# Item is disabled for a specified tenant
return True
return False
[docs] async def export(self, path="/", tenant=None, remove_path=False):
"""
It takes a path, and returns a file-like object containing a gzipped tar archive of the library contents of
that path
:param path: The path to export, defaults to / (optional)
:param tenant: The tenant to use for the operation
:param remove_path: If True, the path will be removed from the tar file, defaults to False
(optional)
:return: A file object.
"""
# Directory path must start with '/'
assert path[:1] == '/', "Directory path must start with a forward slash (/). For example: /library/Templates/"
# Directory path must end with '/'
assert path[-1:] == '/', "Directory path must end with a forward slash (/). For example: /library/Templates/"
# Directory path cannot contain '//'
assert '//' not in path
fileobj = tempfile.TemporaryFile()
tarobj = tarfile.open(name=None, mode='w:gz', fileobj=fileobj)
# List requested level using all available providers
only_first = [self.Libraries[0]]
items = await self._list(path, tenant, providers=only_first)
recitems = list(items[:])
while len(recitems) > 0:
item = recitems.pop(0)
if item.type != 'dir':
continue
child_items = await self._list(item.name, tenant, providers=item.providers)
items.extend(child_items)
recitems.extend(child_items)
for item in items:
if item.type != 'item':
continue
my_data = await self.Libraries[0].read(item.name)
if remove_path:
assert item.name.startswith(path)
tar_name = item.name[len(path):]
else:
tar_name = item.name
info = tarfile.TarInfo(tar_name)
my_data.seek(0, io.SEEK_END)
info.size = my_data.tell()
my_data.seek(0, io.SEEK_SET)
info.mtime = time.time()
tarobj.addfile(tarinfo=info, fileobj=my_data)
tarobj.close()
fileobj.seek(0)
return fileobj
[docs] async def subscribe(self, paths):
"""
It subscribes to the changes in the library
:param paths: A list of absolute paths to subscribe to
"""
for path in paths:
assert path[:1] == '/', "Absolute path must be used when subscribing to the library changes"
for provider in self.Libraries:
await provider.subscribe(path)


[§87A-38] State and county contributions not considered wages or salary. Contributions made by the State or the counties under this part shall not be considered wages or salary of an employee-beneficiary. No employee-beneficiary shall have any vested right in or be entitled to receive any part of any contribution made to the fund. [L 2001, c 88, pt of §1]


BLACK FRIDAY (director: Arthur Lubin; screenwriter: Curt Siodmak/Eric Taylor; cinematographer: Woody Bredell; editor: Phil Cahn; cast: Boris Karloff (Dr. Ernest Sovac), Stanley Ridges (Prof. George Kingsley/Red Cannon), Bela Lugosi (Marnay), Anne Gwynee (Jean Sovac), Anne Nagel (Sunny), Virginia Brissac (Margaret Kingsley); Runtime: 70; Universal; 1940)
Reviewed by Dennis Schwartz
A horror/crime melodrama told in flashback from when Dr. Ernest Sovac (Karloff), in the opening scene, is going to the electric chair and gives a friendly reporter witnessing the execution his diary of the events leading up to the murder he committed.
 But Lugosi couldn't pull it off being a surgeon and ends up in a minor part as the gangster Marnay. A part he also did not distinguish himself in. The one who steals this film is the British actor Stanley Ridges, who will play a dual role of the small-town university professor, George Kingsley, and one of the gangster Red Cannon.
The action perks up when the popular Kingsley teaches his last class and has mixed feelings about transferring to a larger university, already missing the students he loves to teach.  The gangster Red Cannon sustains paralysing spinal injuries and is taken to the same hospital as Kingsley. The prognosis for Kingsley is that he will not recover. Sovac decides to save his friend's life by transplanting part of Cannon's brain into Kingsley, as Cannon begs the doctor to operate on him and correct his spinal injury. The operation proves fatal for Red but successful for Kingsley, except for mood changes, as the gentle professor begins having fits of surliness. In his convalescence, there are times he is not himself. Sovac also discovers that Cannon hid away $500,000, which he wants to get his hands on and use that money to build a medical research facility.
He thereby decides to take the professor to New York, using the excuse that this will help his recovery. But what he is really after, is to rattle his mind so he thinks like Red and leads him to the hidden money. Sovac hypnotizes Kingsley into taking on the character of Red Cannon, but it turns deadly as he starts getting revenge on the gang that was after him and he also kills a few detectives who question him.
Spoilers in the next three paragraphs.
In New York the two stay in the same hotel and the same room that Red stayed at, and when the professor has flashes that he's Red, he changes facial expressions and becomes mean like Red. He kills off the two gang members Devore and Kane and meets his songbird girlfriend Sunny (Nagel) in the night club where she works, remembering everything about her habits and her apartment. She is freaked out by the whole thing and is no longer attracted to him, as he thinks and acts like Red but looks like this nerdy professor-type.
She makes a deal with Marnay and his other henchman Miller to let them follow him to the park where he hid the money, but he outwits them and strangles Miller and follows Marnay back to Sunny's apartment, where he kills both of them.
During this period Kingsley's wife (Brissac) and Sovac's daughter (Gwynee), worried about his health, come to take the professor back to Newcastle. The film concludes as Sovac realizes that the experiment went south, as Kingsley reverts back to being Red while in Newcastle and attacks Sovac's daughter. Sovac then shoots him and is thusly sentenced to death, which is the part where the film opened at.
"Black Friday" was fast-paced, had a good cast, and had an interesting story but it could have probably been more interesting if the story wasn't so convoluted. It's a thriller that could have used a few more thrills, suffering mostly from the flat way it was directed. The results are a mixed bag, but there's enough entertainment to be gotten from this B-film, to make it a satisfying watch.
REVIEWED ON 11/26/2000 GRADE: C+
Dennis Schwartz: "Ozus' World Movie Reviews"
http://www.sover.net/~ozus
<EMAIL_ADDRESS>© ALL RIGHTS RESERVED DENNIS SCHWARTZ
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


SELECT * FROM presenters WHERE name IN ('Christopher Reedijk', 'Gary Stewart'); name | title | company | area | twitter ---------------------+--------------+---------+------+----------- Christopher Reedijk | Dev Engineer | ING | NL | @creedijk Gary Stewart | Dev Engineer | ING | NL | @Gaz_GandA
| Christopher Reedijk | Gary Stewart | |
|
|
challenge 1
challenge 2
| today | tomorrow |
| source: bradfrostweb.com |
challenge 3
Cache is bad, when used incorrectly
Need for locking (transaction) everywhere
Every domain for themselves
Improve availability
Aim to be scalable
Adopt new ways of thinking
fact 1
Proof
No outages in contrast to master-slave architecture
This does make C* chatty
Replication factor is configurable per keyspace
Increasing nodes does not mean higher availability
Increasing the replication factor does
fact 2
Proof
De-normalization is acceptable for solving reads
Large partitions will hurt!
Adding nodes will increase your throughput through sharding
fact 3
Focus on the data model and the flow of data is key
noSQL versus SQL
Consistency (all nodes see the same data at the same time)
Availability (a guarantee that every request receives a response about whether it was successful or failed)
Partition tolerance (the system continues to operate despite arbitrary message loss or failure of part of the system)
C* v2.0 reduces the complexity by using lightweight transactions (paxos)
Availability is easier | challenge 1: availability & consistency
Performance is easier | challenge 2 easier scalable
Consistency is harder | challenge * availability & consistency, easier scalable, new way of thinking
Split batch files into single units of work
Also process single unit of work
Merge into a single batch file for processing
Batches can be scheduled and processed before certain times
Single unit of work MUST be processed ONCE only
>NOT at least 1 and NOT at the most 1!
Easy - Split batches into single units
Hard - Single units collected into a batch file
Commonly known as Synchronize Issue
1 Query
SELECT .... FOR UPDATE FROM .... a JOIN .... b ON a.= b. //optional WHERE status = 'NEW' AND timestamp between ... and ... AND rownum < X NO WAIT
DONE - thank you for your time...
Hang on - what about scalability, resilience and availability?
Will infra solve that? Too easy :-)
SELECT .... FOR UPDATE FROM .... a JOIN .... b ON a.= b. //optional WHERE status = 'NEW' AND timestamp between ... and ... AND rownum < X NO WAIT
"FOR UPDATE" No - C* - No client side locking
"WHERE" Filtering on status and timestamps = tricky
e.g. could use clustering columns
Table scan over partitions - C* = slow(er)
Large partitions can be cumbersome
Not looking good for C* :-(
Remember the goal is to improve availability
without trading consistency
Application should have more responsibility
What if we track the size of the 'file'
|
we will call out-going files - trains And single units of work - passengers |
No Lock
Counters
Paxos
Carriages
SELECT TrainTotal FROM TrainTotal WHERE trainid = ? BEGIN BATCH INSERT INTO TrainPassenger (TrainId, PassengerId) VALUES (?,?); UPDATE TrainTotal SET TrainTotal = ? WHERE TrainId = ?; APPLY BATCH CREATE TABLE TrainTotal ( CREATE TABLE TrainPassenger ( TrainId text, TrainId text, TrainTotal int, PassengerId text, PRIMARY KEY ( TrainId ) PRIMARY KEY ( TrainId, PassengerId) ); );
Assign passenger to train
Keep total of trainsize in TrainTotal table
Requires read before write
Read current size before writing new size
Is this consistent? In sequence this would be perfect
Expected results: TrainTotal and TrainPassenger out-of-sync
INSERT INTO TrainPassenger (TrainId, PassengerId) VALUES (?,?); UPDATE Traincounter SET TrainTotal = TrainTotal + 1 WHERE TrainId = ?; CREATE TABLE TrainCounter ( CREATE TABLE TrainPassenger ( TrainId text, TrainId text, TrainTotal counter, PassengerId text, PRIMARY KEY ( TrainId ) PRIMARY KEY ( TrainId, PassengerId) ); );
No client-side read-before-write
Separate table - counters not allowed in batches
with other statements
Document says - Counters are made for this
but overcounts are possible
Expected results: TrainCounter and TrainPassenger are in-sync
SELECT CarriageTotal FROM CarriageTotal WHERE Carriageid = ? UPDATE CarriageTotal SET CarriageTotal = ? WHERE Carriageid = ? IF CarriageTotal= ?; if [applied] == true then INSERT INTO CarriagePassenger (CarriageId, PassengerId) VALUES (?,?); CREATE TABLE CarriageTotal ( CREATE TABLE CarriagePassenger ( CarriageId text, CarriageId text, CarriageTotal int, PassengerId text, PRIMARY KEY ( CarriageId ) PRIMARY KEY ( CarriageId, PassengerId) ); );
Still need a read-before-write
Even though the document says use for 1% of your application -
use wisely - costs are high
Lightweight in features BUT not in 'execution'
We don't need 100.000 tps so this should be fine - possible solution!
Expected results: Consistent but slower
BEGIN BATCH INSERT INTO CarriagePassenger (CarriageId, PassengerId) VALUES (?,?); UPDATE CarriageTotal SET CarriageTotal = ? WHERE CarriageId = ?; APPLY BATCH CREATE TABLE CarriageTotal ( CREATE TABLE CarriagePassenger ( CarriageId text, CarriageId text, CarriageTotal int, PassengerId text, PRIMARY KEY ( CarriageId ) PRIMARY KEY ( CarriageId, PassengerId) ); );
Each application is responsible for their own carriage
Board Carriage instead of train
No read-before-write - application knows it's carriage size
All statements fit in a batch - atomic
Expected results: Consistent and fast but requires more logic
|
No Lock |
Expected results: TrainTotal and TrainPassenger out-of-sync | |
|
Counters |
Expected results: TrainCounter and TrainPassenger are in-sync | |
|
Paxos |
Expected results: Consistent but slower | |
|
Carriages
|
Expected results: Consistent and fast but requires more logic |
Datastax Community C* v2.0.6
Gatling performance tester
4 users each doing 250 runs
Call each step in a sequence
Running the test...
cqlsh:meetup> select * from traintotal; cqlsh:meetup> select * from traintotal; trainid | traintotal trainid | traintotal ---------------+------------ ---------+------------ paxos | 753 counter | 1000 no_lock | 930 cqlsh:meetup> select * from carriagetotal; carriageid | carriagetotal ---------------+-------------- carriage_3001 | 400 carriage_3000 | 600
but what about the trains
Carriage capacity is kept in application
When carriage is FULL - Attach to train and create new one
Any action on train requires cluster wide locking to ensure consistency!
Basically needed to ensure no-one else is working on the object - train
Only applications will fight for the lock - not threads
Use TTL to ensure locks are not kept endlessly
lockid = UuidGenerator.generate(); INSERT INTO clusterlock (name, lockid) values ( ?, ?) IF NOT EXISTS USING TTL ?; if (rows.get(0).getBool('[applied]') ) { return lockid.toString(); } else { return NOK; }
CREATE TABLE ClusterLock ( Name text, LockId text, PRIMARY KEY ( Name ) );
UPDATE clusterlock USING TTL ? SET lockid=? WHERE name= ? IF lockid=?; if (rows.get(0).getBool('[applied]') ) { return OK; } else { return NOK; }
CREATE TABLE ClusterLock ( Name text, LockId text, Hostname text, PRIMARY KEY ( Name ) );
DELETE FROM clusterlock WHERE name= ? IF lockid=?; if (rows.get(0).getBool('[applied]') ) { return OK; } else { return NOK; }
CREATE TABLE ClusterLock ( Name text, LockId text, Hostname text, PRIMARY KEY ( Name ) );
Train departure - requires cluster lock
Depot - table of all unlinked carriages - should be empty helps with error situations
Scheduling - based on deadlines etc...
Maintenance - ensure that all operations are running smoothly - complete the feedback loop
More responsibility in the application results in more scalable solution
Reduced contention in the cluster
MUCH more responsibility in application
Get it right - rewards are great
Get it wrong - penalties can be huge
Only you can decide
Hailo and NetFlix are rapidly deploying in
new countries within weeks
Ensures that upgrades will be easier and safer!
Paxos + TTL combined did not work after a minor upgrade
We spotted this issue within hours after an upgrade of our cluster
Datastax solved it within a week
SOLR: full text search
SPARK: real-time analysis for big-data
Hystrix: control your clients on your cluster
...
Thank you
...graceful bow


I’ve sunken into the depths of an all-too-familiar melancholy.
She is gone. I am alone. My emotions swing to the erratic cadence of an unforgiving metronome.
I’m fine. Tick.
I’m not. Tick.
I missed the jade of her eyes, those luminescent opals I so often lose myself in. The ease of her smile, it was always able to bring about my own. The way she plucked those juicy blackberries from their thorny brambles, always a tad out of reach, the hem of her shirt lifting ever so slightly in the process, revealing the contours of a titillating landscape I secretly wished to explore.
I missed her laugh, her presence, the way she made me feel: Whole. Complete. Loved. I missed my Camino soulmate.
Absence: the paradoxical presence of nothingness. A palpable emptiness. A space defined by its non-existence. A torturous conundrum that slowly gnaws away the seams of my mind.
A universe without incandescence.
…
S has decided to stay another night in Burgos. Strange. He’s not taking the leave well.
I have to go. I have to walk.
The sky reflects my mood – gray, somber, displaced. I’m walking through a park between a row of trees. A runner waves at me and says, “Buen Camino!” I force a smile and wave back.
I’m lost – the hostel we stayed at was located somewhere deep within the city, far from the familiar path of the Camino. I need to find a yellow arrow.
Surprisingly, Google Maps is able to lead me back on track. I spot a yellow arrow on a blue signpost pointing towards a stone bridge. A group of Spanish schoolchildren are crossing. I follow. They turn and smile at me. “Un peregrino!”” I feel an unforced grin. What I would do to be a child right now: they are experts at getting over things.
The past 15 days I have walked with another. Now she’s gone.
A remnant of what was, a reminder of what isn’t.
I walk.
…
At the western edge of Burgos, I noticed an older man trailing me. Some minutes later he appeared at my shoulder, decelerated, and matched my pace.
“Ah, hello. You are young.”
“No I’m Phil.”
He didn’t get the joke.
He would not let me mope alone – we walked together for the next 2 hours. He was a Korean Catholic priest on sabbatical. We talked about religion, the Camino, life. It was refreshing to hear another voice, to have a moment of mental relief. He noticed the concern on my face and asked why I was walking.
“I’m not sure anymore. I guess I was looking for a purpose, but I don’t even know if I believe in such a thing. But I feel like I have been going through life on a path that is not my own. Also, my friend just left. We had been walking together for the past 2 weeks, and now she’s gone.”
That must be hard… let me ask you something: What are the most important things in your life?
“…I… I don’t know.” I felt ashamed for not knowing, but he reassured me:
Don’t worry. Most people have answers right away. But they haven’t thought about why; Why are those things important? It’s ok not to know.
What makes you excited and happy?
“Well… right now, walking. And I’m enjoying my conversation with you. I like to learn. I like to travel and meet people. Anything that makes me feel alive.”
Why?
“Ok, I see where you’re going with this.”
It’s ok not to know. You don’t have to know where you’re going, you just need to keep going. And as long as you ask Why, you will go where you need to be. You might be searching for a clear answer, but it’s ok if you don’t find one by the end of your journey. Just keep asking Why, and be open to whatever comes.
As a child, I had the calling to become a priest. But I decided to go to university to study architecture instead. I designed buildings for almost 15 years. I thought it was what I wanted. But something inside me told me it wasn’t. That was my heart speaking. It was still saying I had to become a priest. So I listened, and here I am! Ha ha.
“But I don’t have a calling.”
But you do. Callings! You just need to listen. Listen to your heart.
We went on like this for awhile.
Can we take a picture together?
He took out his phone and snapped a selfie of us.
I will always remember you.
He laughed, quickened his pace, and walked into the distance.
I never saw him again.
…
After 34 kilometers I arrived in Hontanas. I checked-in, unpacked, showered, and made dinner – pasta, tomatoes, and garbanzo beans. I walked aimlessly around town for a bit, then went into the church and sat in silence. I thought the presence of God would help to fill the void, but it didn’t. He didn’t help non-believers.
I left and clambered up a narrow flight of stairs behind the albergue. At the top was a swing-set and what looked like an abandoned bar. I continued to climb the hill until the people below were nothing more than ants. Barren hilltops and stretched clouds were pressed against the distance. The sun was beginning its daily descent.
Why do I feel this way? I thought I had let her go. I thought I had accepted what was. Yesterday I was fine, today I’m not. What happened? Is this what it feels like to let go of something, someone you love? Do I though? Do I really love her?
I began to vocalize my thoughts by talking to the sky, as if someone were listening to my grievances.
I accept it. Yes, I miss her. Maybe I do love her. I don’t know. What is love anyways? It’s so cliche. Boy meets girl in Spain. Falls in love. She flies away. and he lies to himself, tells himself he’s ok. He’s not. I miss her.
A weight was lifting as I shouted.  But I knew she would understand.
A latch released. Gratitude, clarity, stillness, tears.
The sky was poppy red, M’s favorite flower and color, a deep and radiant crimson.
The journey had just begun.


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Inter Canada Telecom Ltd
Legal Name:
Inter Canada Telecom Ltd
Operating Name:
SPL Coatings Technology
Mailing Address:
151 North Rivermede RdCONCORD, Ontario
L4K 0C4
Location Address:
151 North Rivermede RdCONCORD, Ontario
L4K 0C4
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Company Profile
SPL Coatings Technology has a unique and proprietary coating
technology for restoring used telecommunication and office
equipment products to a like-new appearance. SPL has licensed
its technology around the world. Services are provided by those
facilities to telecoms, office equipment dealers and original
equipment manufacturers.
SPL process is unique. Its Re-Coat Material chemically bonds with
the surface substrate, ensuring no chipping or peeling. SPL
manufactures its own Re-Coat Material, thereby guaranteeing an
accurate colour match every time. Many companies are purchasing
used equipment as a cost saving device. Companies are now able to
provide a product that looks new at the price of a used product
by re-coating the external parts of the product.
Full profile
Full profile
Contact information
Company description
Product / Service / Licensing
material for plastic products manufactured from the
Acrylonitrile Butadiene Styrene family of plastics.
SPL has licensed it's proprietary coating system to companies
involved in refurbishing equipment in the telecommunications and
office equipment industries. As part of the process, SPL
manufactures a unique re-coat material which it sells to its
licensees for application in their facilities. In the past two
years, including 1996, licenses have been concluded in Florida,
Arizona, and Minnesota in the United States, Mexico, Denmark and
Australia and supply agreements have been concluded with
companies in Pennsylvania in the United States, Poland,
South Africa, Thailand and England.
thermoplastics used in the telecommunications, office equipment
and computer fields. Our coatings do not affect the recylability
of the coated product.
The products are used to hide mould marks, blemishes and to
provide colour options on new products and to return the
external surfaces of used products to their original appearance.
ADHESION
SPL Re-Coat Material (RCM) when applied to Acrylonitrile
Butadiene Styrene (ABS) or a compatible polymeric surface will
adhere through a solvent welding adhesion process. The substrate
polymer solvates with the coating to produce a homogeneous blend
that changes in composition between the top surface and the
substrate. Once dry, the top surface of the plastic is entirely
new. Below this surface the material composition gradually
changes to the original substrate. This gradation is less than
0.10 millimetre deep.
By virtue of this adhesion process, no chipping or
peeling is possible between the substrate and the coating.
Adhesion between SPL's RCM and metal or thermoset
surfaces is achieved through the use of a primer coat to ensure
adequate bonding occurs.
HARDNESS
The main vehicle resin used in SPL's RCM is ABS. Thus,
the chemical and physical properties of the coating are those of
ABS resin. The surface hardness of the coated ABS is, after
appropriate drying time has passed, identical to that of the
original surface.
COLOUR MATCH
SPL's RCM is formulated using an unique method of mixing
base tint colours. The method is very consistent and tint colours
have an indefinite shelf life. Acceptable colour match tolerances
are less than visually perceptibility differences.
COLOURANTS
Colourants used in SPL's RCM are selected from organic
pigments. Heavy metal pigments are not used and are only
considered when specified by the customer.
RE-COATING AND SUBSTRATE DIMENSIONAL CHANGES
SPL's RCM are no more than 0.025 millimetre to 0.050
millimetres thick. This thin coating allows for repeated
application of the RCM with very limited changes in item
dimensions. Each application is unique as the thickness of the
coating will depend on substrate condition and the colour hiding
required. As coating thickness is generally very small, substrate
thickness are not altered significantly.
SOLVENTS
The solvents use in SPL's RCM were selected carefully for
their performance regarding minimum substrate damage, residence
time, solvation and coating surface quality and recyclability.
Workplace safety and environmental acceptability were of
paramount importance in the selection of these solvents.
requirements, be they related to office products (our priority),
PVC or any other products, although our specialty is primarily
related to the coating of thermoplastics, both new and used. Our
coatings do not affect the recyclability of the coated product.
for use on a range of plastic substrates, including ABS, PC, PS,
etc. The material is substrate compatible and does not affect the
recyclability of the coated product. Environmentally friendly.
The product available in any colour can be used by injection
moulders to offer colour choices to their customers while
satisfying local environmental requirements.
Market profile
Alliances:
- Financial
- Sales/Marketing
- Technology
Strategic alliances:
We currently license our coating technology to companies inCanada, USA, England, Denmark, Poland, South
Africa and Australia. This specialty technology permits
companies to use our proprietary coating to re-coat telephones,
office equipment and certain other products to their original
appearance. Under our licensing agreements, we provide initial
set up assistance as well as ongoing technical advice to enable
our partners to meet the ongoing requirements of their
marketplace.
We are now making our coatings available to manufacturers as a
means of offering unique colours including metallics, such as
silvers to hide blemishes, mould marks and for offering custom
colours in small volumes.
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
Products, services and licensing
Product / Service / Licensing
material for plastic products manufactured from the
Acrylonitrile Butadiene Styrene family of plastics.
SPL has licensed it's proprietary coating system to companies
involved in refurbishing equipment in the telecommunications and
office equipment industries. As part of the process, SPL
manufactures a unique re-coat material which it sells to its
licensees for application in their facilities. In the past two
years, including 1996, licenses have been concluded in Florida,
Arizona, and Minnesota in the United States, Mexico, Denmark and
Australia and supply agreements have been concluded with
companies in Pennsylvania in the United States, Poland,
South Africa, Thailand and England.
thermoplastics used in the telecommunications, office equipment
and computer fields. Our coatings do not affect the recylability
of the coated product.
The products are used to hide mould marks, blemishes and to
provide colour options on new products and to return the
external surfaces of used products to their original appearance.
ADHESION
SPL Re-Coat Material (RCM) when applied to Acrylonitrile
Butadiene Styrene (ABS) or a compatible polymeric surface will
adhere through a solvent welding adhesion process. The substrate
polymer solvates with the coating to produce a homogeneous blend
that changes in composition between the top surface and the
substrate. Once dry, the top surface of the plastic is entirely
new. Below this surface the material composition gradually
changes to the original substrate. This gradation is less than
0.10 millimetre deep.
By virtue of this adhesion process, no chipping or
peeling is possible between the substrate and the coating.
Adhesion between SPL's RCM and metal or thermoset
surfaces is achieved through the use of a primer coat to ensure
adequate bonding occurs.
HARDNESS
The main vehicle resin used in SPL's RCM is ABS. Thus,
the chemical and physical properties of the coating are those of
ABS resin. The surface hardness of the coated ABS is, after
appropriate drying time has passed, identical to that of the
original surface.
COLOUR MATCH
SPL's RCM is formulated using an unique method of mixing
base tint colours. The method is very consistent and tint colours
have an indefinite shelf life. Acceptable colour match tolerances
are less than visually perceptibility differences.
COLOURANTS
Colourants used in SPL's RCM are selected from organic
pigments. Heavy metal pigments are not used and are only
considered when specified by the customer.
RE-COATING AND SUBSTRATE DIMENSIONAL CHANGES
SPL's RCM are no more than 0.025 millimetre to 0.050
millimetres thick. This thin coating allows for repeated
application of the RCM with very limited changes in item
dimensions. Each application is unique as the thickness of the
coating will depend on substrate condition and the colour hiding
required. As coating thickness is generally very small, substrate
thickness are not altered significantly.
SOLVENTS
The solvents use in SPL's RCM were selected carefully for
their performance regarding minimum substrate damage, residence
time, solvation and coating surface quality and recyclability.
Workplace safety and environmental acceptability were of
paramount importance in the selection of these solvents.
requirements, be they related to office products (our priority),
PVC or any other products, although our specialty is primarily
related to the coating of thermoplastics, both new and used. Our
coatings do not affect the recyclability of the coated product.
for use on a range of plastic substrates, including ABS, PC, PS,
etc. The material is substrate compatible and does not affect the
recyclability of the coated product. Environmentally friendly.
The product available in any colour can be used by injection
moulders to offer colour choices to their customers while
satisfying local environmental requirements.
Market
Market profile
Alliances:
- Financial
- Sales/Marketing
- Technology
Strategic alliances:
We currently license our coating technology to companies inCanada, USA, England, Denmark, Poland, South
Africa and Australia. This specialty technology permits
companies to use our proprietary coating to re-coat telephones,
office equipment and certain other products to their original
appearance. Under our licensing agreements, we provide initial
set up assistance as well as ongoing technical advice to enable
our partners to meet the ongoing requirements of their
marketplace.
We are now making our coatings available to manufacturers as a
means of offering unique colours including metallics, such as
silvers to hide blemishes, mould marks and for offering custom
colours in small volumes.


--- layout: post status: publish published: true title: Fail. author: display_name: Andy login: Andy email<EMAIL_ADDRESS>url: '' author_login: Andy author_email<EMAIL_ADDRESS>excerpt: |- At the end of the Cubs' 2007 playoff three-and-out, we once again said, "Wait 'til next year," and for once the words weren't sarcastic or an empty phrase meant to soften defeat. We felt confident saying them. So for the past couple of days, I've been casually sifting through Cubs-related internet commentary and media for some closure on this exciting yet ultimately disappointing season. Instead of video clips of Soriano saying that even though we were the better team, the Dodgers just played better, I want a news clip saying that Soriano was seen late at night dejectedly practicing hitting breaking balls to right field for base hits. Though the players have expressed plenty of frustration and regret, I find myself wanting more than a simple, "Wait 'til next year." So here are a few of the write-ups I've read that have helped me get some perspective and closure on this season: wordpress_id: 260 wordpress_url: http://ivyenvy.wordpress.com/?p=260 date: '2008-10-06 11:53:32 +0000' date_gmt: '2008-10-06 16:53:32 +0000' categories: - The Cubs tags: - fail - NLDS - the weight of history comments: [] ---
At the end of the Cubs' 2007 playoff three-and-out, we once again said, "Wait 'til next year," and for once the words weren't sarcastic or an empty phrase meant to soften defeat. We felt confident saying them.
So for the past couple of days, I've been casually sifting through Cubs-related internet commentary and media for some closure on this exciting yet ultimately disappointing season. Instead of video clips of Soriano saying that even though we were the better team, the Dodgers just played better, I want a news clip saying that Soriano was seen late at night dejectedly practicing hitting breaking balls to right field for base hits. Though the players have expressed plenty of frustration and regret, I find myself wanting more than a simple, "Wait 'til next year." So here are a few of the write-ups I've read that have helped me get some perspective and closure on this season:
Here, Matt Veto gives some perspective on what it means to be a Cubs fan in the wake of this most recent defeat.
Here, LoserPoet from Thunder Matt's Saloon gives us some interesting thoughts on the "weight of history" affecting the Cubs' play in the NLDS.
And here we have an offseason roster shake-up plan from the View from the Bleachers.


http://knowhow3.com/search
GET
| Key | Description |
|---|---|
| query | search query. URI enconding needs to be done on your end |
| know | 0 or 1. When you want to search in know, then use 1 |
| how | 0 or 1. When you want to search in how, then use 1 |
| exmpale | 0 or 1. When you want to search in example, then use 1 |
$ curl http://knowhow3.com/search -X GET -d "query=linux" -d "know=1"
{"6":"The way to see memory usage with #linux command","32":"How to add a user to group on #centos #linux","28":"How to make user id to run sudo on CentOS #linux","21":"How to obtain the number of files within XX days last modified #linux","7":"change space with newline on #linux","17":"Find the files which has a string, 'xxx', on #linux","2":"This is know2 #linux","20":"How to check #linux performance","22":"How to see binary with #linux command","18":"Replace text1 to text2 on #linux","30":"How to disable root login with #ssh #linux","24":"How to use RCS on #linux","19":"Get the common columns in two files on #linux","29":"How to set default PATH of #sudo # linux"}
GET : http://knowhow3.com/search&query=linux&know=1&how=0&example=0
http://knowhow3.com/knowhow/:id
GET
$ curl http://knowhow3.com/knowhow/10 -X GET


{% load i18n %}
{% trans "Say to the caller" %}:
{% trans "Do you have any other questions that I can answer?" %}


Dozens of sex toys among illegal goods destroyed by Denpasar customs and excise office
by Coconuts BaliThe customs and excise office in Denpasar destroyed illegal goods worth more than IDR1.7 billion (US$121,107) on Wednesday, comprising items that the agency has seized since January and includes sex toys, cigarettes and alcoholic beverages.
“Until now we are still finding many taxable goods that are sold without excise tapes or labeled with fake ones in Bali,” Abdul Kharis, who heads the Customs and Excise Supervision and Service Office (KPPBC) in Denpasar, told reporters this week.
As reported by Tribun-Bali, the items include 47 units of sex toys that were allegedly sent from China, 157 liquid vape bottles, and 626 bottles of alcohol. There are also cosmetics as well as electronic and health-related goods among them.
The items were seized between January and August of this year, and most of it during screening of goods delivered from abroad. Abdul said many of these items had been purchased online and are worth IDR1.7 billion in total.
According to authorities, the items had incurred a state loss of IDR 1.3 billion.
“We [destroy the items] by burning, cutting, breaking, pouring and burying them onto the ground, with the intent of damaging them and destroying their functions,” Abdul explained.
We’re not sure what purpose destroying sex toys serves other than possibly robbing some people of their orgasms. But, of course, Indonesian authorities love to make public spectacles of destroying illegal goods, like that time they burned a pile of seized marijuana in West Jakarta, which made people in the area feel “dizzy.”
Read more news and updates from Bali here.


{% load branding i18n static %} {% load load_config from horizon %} {% load_config as CONF %} {% comment %} NB: The context for 500 pages is an empty dict. Don't add any content here that depends on things from the context. {% endcomment %}
{% trans "An unexpected error has occurred. Try refreshing the page. If that doesn't help, contact your local administrator." %}
{% endblock %}


FOR A FREE CAR INSURANCE RATE QUOTE THAT COULD SAVE YOU SUBSTANTIAL MONEY WWW.GEICO.COM OR CALL 1-888-395-6349, 24 HOURS A DAY
If you have an comments about our WEB page, you can either write us at the address shown above or e-mail us at<EMAIL_ADDRESS>However, due to the limited number of personnel in our corporate office, we are unable to provide a direct response.
Copyright © 1978-2014Berkshire Hathaway Inc.


---
layout: archive
title: Lean Prover Zulip Chat Archive
permalink: 113488general/72416NoetherNormalizationNullstellensatz.html
---
The archive URL format has changed. Please find this page at:
https://leanprover-community.github.io/archive/stream/113488-general/topic/Noether.20Normalization.2FNullstellensatz.html


Total Sales
Open Campaign
Daily Sales
Total Sales
Open Campaign
Total Sales
Open Campaign
Daily Sales
| Project Name | Start Date | Due Date | Team | Status | Clients |
|---|---|---|---|---|---|
| App design and development | Jan 03, 2015 | Oct 12, 2018 | Work in Progress | Halette Boivin | |
| Coffee detail page - Main Page | Sep 21, 2016 | May 05, 2018 | Pending | Durandana Jolicoeur | |
| Poster illustation design | Mar 08, 2018 | Sep 22, 2018 | Completed | Lucas Sabourin | |
| Drinking bottle graphics | Oct 10, 2017 | May 07, 2018 | Work in Progress | Donatien Brunelle | |
| Landing page design - Home | Coming Soon | May 25, 2021 | Coming Soon | Karel Auberjo |


This page is a list of certifications and participation in various cybersecurity events throughout my career.
I think they're just one small part of the big picture when it comes to learning. However I do believe that it's important to keep up with the constantly evolving field, and this is meant to be an extension of that.


Connecting to Device
Device is Ready BROWSER
Settings
Log
Settings
Distance
Features:
Feature A
Feature B
Cancel
Save
Log


I'm a software engineer at Airtable, a tool to democratize software creation.
Previously, I was at Facebook, where I worked on Presto, an open-source distributed SQL query engine. Before that, I was a grad student in Computer Science at Princeton, advised by Dr. Michael Freedman. I completed my bachelor's degree at IIIT-Delhi.
Send me an email (GPG), or follow me on Twitter. Sometimes I take pictures that turn out okay.
Presto: SQL on Everything
[web]
Raghav Sethi, Martin Traverso, Dain Sundstrom, David Phillips, Wenlei Xie, Yutian Sun, Nezih Yigitbasi, Haozhun Jin, Eric Hwang, Nileema Shingte, Christopher Berner. In IEEE International Conference on Data Engineering (ICDE), Macau SAR. 2019.
Be Fast, Cheap and in Control with SwitchKV
[pdf]
[web]
Xiaozhou Li, Raghav Sethi, Michael Kaminsky, David G. Andersen and Michael J. Freedman. In 13th USENIX Symposium on Networked Systems Design and Implementation (NSDI), Santa Clara, CA. 2016.
WhACKY! - What Anyone Could Know About You from Twitter
[pdf]
Denzil Correa, Ashish Surekha and Raghav Sethi. In Proceedings of the 10th Annual Conference on Privacy, Security and Trust (PST), Paris, France. 2012.
© 2019. All rights reserved.


React Examples
Hello, World!
Random Facts
Button Click Counter
Bar Graph
Bar Graphs - global warming consensus
Calendar Entry
Simple form
Calendar App
Brought to you by the
Loyc
guy.


s6
Software
skarnet.org
The s6-ipcserver-socketbinder program
s6-ipcserver-socketbinder binds a Unix domain
socket, then executes a program.
Interface
s6-ipcserver-socketbinder [ -d | -D ] [ -b backlog ] [ -M | -m ] [ -a perms ] [ -B ] path prog...
- s6-ipcserver-socketbinder creates a Unix domain socket
and binds it to path. It prepares the socket to accept
connections by calling
listen().
- It then execs into prog... with the open socket
as its standard input.
Options
- -d : allow instant rebinding to the same path
even if it has been used not long ago - this is the SO_REUSEADDR flag to
setsockopt()
and is generally used with server programs. This is the default. Note that
path will be deleted if it already exists at program start time.
- -D : disallow instant rebinding to the same path.
- -b backlog : set a maximum of
backlog backlog connections on the socket - extra
connection attempts will rejected by the kernel. The default is SOMAXCONN,
i.e. the maximum number allowed by the system. If backlog
is 0, then the socket will be created, but it will not be
listening.
- -M : the type of the socket will be SOCK_STREAM. This is
the default.
- -m : the type of the socket will be SOCK_DGRAM. Note
that by default SOCK_DGRAM sockets are not connection-mode, and listen()
will fail - so you should always give the -b0 option to
s6-ipcserver-socketbinder along with -m.
- -a perms : create the socket with
permissions perms, which is an octal number from 0000 to 0777.
Default is 0777, meaning everyone can connect to it. 0700 means only processes having the
same uid as the s6-ipcserver-socketbinder process can connect to it.
- -B : the socket will be blocking. The default is nonblocking.
Notes
- The socket is provided non-blocking by default.
- s6-ipcserver-socketbinder is part of a set of basic blocks used to
build a flexible Unix super-server. It normally should be given a
command line crafted to make it execute into
s6-ipcserverd to accept connections
from clients, or into a program such as
s6-applyuidgid
to drop privileges before doing so.
- The s6-ipcserver program does
exactly this. It implements
a full Unix super-server by building a command line starting with
s6-ipcserver-socketbinder and ending with s6-ipcserverd followed by the
application program, and executing into it.


class YARD::Server::Commands::LibraryCommand
This is the base command for all commands that deal directly with libraries. Some commands do not, but most (like {DisplayObjectCommand}) do. If your command deals with libraries directly, subclass this class instead. See {Base} for notes on how to subclass a command.
@abstract
Constants
- CAN_FORK
Attributes
@return [Boolean] whether to reparse data
@return [LibraryVersion] the object containing library information
@return [LibraryOptions] default options for the library
@return [Serializers::Base] the serializer used to perform file linking
@return [Boolean] whether router should route for multiple libraries
@return [Boolean] whether or not this adapter calls fork
when
serving
library requests. Defaults to false.
Public Class Methods
# File lib/yard/server/commands/library_command.rb, line 62 def initialize(opts = {}) super self.serializer = DocServerSerializer.new end
Public Instance Methods
# File lib/yard/server/commands/library_command.rb, line 67 def call(request) if can_fork? call_with_fork(request) { super } else begin save_default_template_info call_without_fork(request) { super } ensure restore_template_info end end end
Private Instance Methods
# File lib/yard/server/commands/library_command.rb, line 95 def call_with_fork(request, &block) reader, writer = IO.pipe fork do log.debug "[pid=#{Process.pid}] fork serving: #{request.path}" reader.close writer.print(Marshal.dump(call_without_fork(request, &block))) end writer.close Marshal.load(reader.read) end
# File lib/yard/server/commands/library_command.rb, line 82 def call_without_fork(request) self.request = request self.options = LibraryOptions.new options.reset_defaults options.command = self setup_library options.title = "Documentation for #{library.name} " + (library.version ? '(' + library.version + ')' : '') yield rescue LibraryNotPreparedError not_prepared end
# File lib/yard/server/commands/library_command.rb, line 108 def can_fork? CAN_FORK && use_fork end
Hack to load a custom fulldoc template object that does not do any rendering/generation. We need this to access the generate_*_list methods.
# File lib/yard/server/commands/library_command.rb, line 170 def fulldoc_template tplopts = [options.template, :fulldoc, options.format] tplclass = Templates::Engine.template(*tplopts) obj = Object.new.extend(tplclass) class << obj; define_method(:init) {} end obj.class = tplclass obj.send(:initialize, options) class << obj attr_reader :contents define_method(:asset) {|_, contents| @contents = contents } end obj end
# File lib/yard/server/commands/library_command.rb, line 146 def load_yardoc raise LibraryNotPreparedError unless library.ready? if Thread.current[:__yard_last_yardoc__] == library.yardoc_file log.debug "Reusing yardoc file: #{library.yardoc_file}" return end Registry.clear Templates::ErbCache.clear! Registry.load_yardoc(library.yardoc_file) Thread.current[:__yard_last_yardoc__] = library.yardoc_file end
# File lib/yard/server/commands/library_command.rb, line 158 def not_prepared options.update(:template => :doc_server, :type => :processing) self.caching = false self.status = 202 self.body = render self.headers = {'Content-Type' => 'text/html'} [status, headers, [body]] end
# File lib/yard/server/commands/library_command.rb, line 117 def restore_template_info Templates::Engine.template_paths = @old_template_paths Templates::Template.extra_includes = @old_extra_includes end
# File lib/yard/server/commands/library_command.rb, line 112 def save_default_template_info @old_template_paths = Templates::Engine.template_paths.dup @old_extra_includes = Templates::Template.extra_includes.dup end
# File lib/yard/server/commands/library_command.rb, line 122 def setup_library library.prepare! if request.xhr? && request.query['process'] load_yardoc setup_yardopts true end
# File lib/yard/server/commands/library_command.rb, line 129 def setup_yardopts @@library_chdir_lock.synchronize do Dir.chdir(library.source_path) do yardoc = CLI::Yardoc.new if incremental yardoc.run('-c', '-n', '--no-stats') else yardoc.parse_arguments end yardoc.send(:verify_markup_options) yardoc.options.delete(:serializer) yardoc.options.delete(:serialize) options.update(yardoc.options.to_hash) end end end


Address of company | 1508-168 1st Avenue West Vancouver, BC. V5Y 0H6
Copyright 2017 © Locum OD. All rights reserved. Terms and conditions


Mobile Mix: Sigfox slings into Singapore
In this week’s episode Manny travels to Singapore to discover some very grand IoT ambitions from Sigfox. Meanwhile Yanitsa has a report on how UK operator BT is using 5G tech – along with AR and VR – for remote health services, while Chris has the week’s biggest news headlines.


{% extends "base.html" %} {% block title %}kchart.io | About{% endblock %} {% block content %}
kchart.io is a Korean music service chart aggregator. Currently, the realtime top 100 charts for the four largest Korean digital music services (Melon, Genie, Bugs, Mnet) are indexed.
Updated chart data is generally available at around 5 minutes past each hour (i.e. 00:05 KST, 01:05 KST, and so on).
kchart.io's overall chart scoring is similar to instiz. Each service's charts are weighted based on their relative userbase sizes (i.e. being rated #1 on Melon is worth more that being rated #1 on Genie)
Yes, except for Melon. All the chart services except melon provide historical data, and eventually all of the publically available historical data for Genie, Bugs and Mnet will be made available on kchart.io, but it will take some time for the backlog scripts to complete.
Charts are indexed via web scraping. Missing chart data most likely means the kchart.io scraper was unable to connect to the chart service's website for some reason, but missing data will eventually be filled in by the backlog scripts.
It's not, and intiz's data is almost certainly more reliable. However, instiz's interface for accessing historical chart data is slow and painful to use. kchart.io's intended purpose is to make it easy to see a particular song's chart history (i.e. where and when the song peaked on each chart, along with some other historical trend data).


Blockchain based data certification
Trusti lets you easily certify documents, business contracts, or any digital information in the Blockchain.
Proof is the evidence establishing a fact or the truth of a statement. You own the data and control the processes — we create the proofs.
Verify your data on the blockchain
You must use the exact same data file that has been certified


!Castle gates:
Strengthens castle gates and walls. As it significantly increases the durability of the current castle gates and castle walls, it can prevent in advance the incursion of enemy troops into the castle.
[npc_%objectId%_door_manage 23220001 1|Outer castle gate (left)]
[npc_%objectId%_door_manage 23220002 1|Outer castle gate (right)]
[npc_%objectId%_door_manage 23220005 2|Inner castle gate (left)]
[npc_%objectId%_door_manage 23220006 2|Inner castle gate (right)]
[npc_%objectId%_door_manage 23220003 3|Castle wall (left)]
[npc_%objectId%_door_manage 23220004 3|Castle wall (right)]
[npc_%objectId%_default|Go back]