Azure Building Blocks – IaC Tool
Whilst researching Infrastructure as Code alternatives to Azure Resource Manager templates I stumbled across the Azure Building Blocks (AZBB) tool. It’s not widely adopted and you’ll see why later on this in blog.
Because I’m not keen on authoring large JSON files (aka ARM templates) for IaC I’m going to put Azure Building Blocks to the test with a simple Hub & Spoke VNET deployment. Later on I’ll also demonstrate the same deployment using an AzureCLI script – my current preferred alternative to ARM Templates – so you’ll see the differences.
FYI – AZBB currently supports the following resource types:
- Virtual Networks
- Virtual Machines (including load balancers)
- Virtual Machine Extensions
- Route Tables
- Network Security Groups
- Virtual Network Gateways
- Virtual Network Connection
Note: Before writing this blog I also tested deploying VMs to Azure using the AZBB tool and ran into an issue which turned out to be a blocker for further tests. You can view open/closed AZBB project issues here.
What is AZBB?
The Azure Building Blocks project is a command line tool and set of Azure Resource Manager templates designed to simplify deployment of Azure resources. Users author a set of simplified parameters to specify settings for Azure resources, and the command line tool merges these parameters with best practice defaults to produce a set of final parameter files that can be deployed with the Azure Resource Manager templates – source: Microsoft
Based on the above description – a key advantage behind using Azure Building Blocks is to save you time by merging your JSON parameter files with it’s pre-defined ARM templates as part of it’s deployment flow to Azure.
These pre-defined ARM templates also apply some best-practice defaults such as:
- Enables diagnostics on all VMs
- Deploys the VMs in an availability set
- All VM disks are managed
- OS is latest Windows Server 2016 image
- Public IP created for each VM
Unfortunately these best-practice defaults are not easily found – so to discover what defaults are applied (and to override them when needed) have a look at the reference wiki for each supported resource e.g. https://github.com/mspnp/template-building-blocks/wiki/Virtual-Machines
Demo Deployment
For this demo I’m deploying a basic HUB/SPOKE Virtual Network architecture common with production Azure environments where the Hub VNET may contain shared services such as a Firewall, Domain Controllers, JumpBoxes, and an ExpressRoute Gateway.
This deployment is sourced from premade AZBB parameter files publicly available here: https://github.com/mspnp/template-building-blocks/tree/master/scenarios
Step 1 – Install NPM/Node.js
To run the AZBB tool locally we first need to install NPM/Nodejs so on my local machine I downloaded/ran the Windows x64 client installer from https://www.npmjs.com/get-npm.
Then I ran npm install from a VSCode terminal to setup Azure Building Blocks and then azbb to test the tool was installed correctly.
npm install -g @mspnp/azure-building-blocks
azbb
Seeing this screen is a good sign 🙂
Step 2 – Generate/Copy a .JSON parameter file
Before we can deploy into Azure we either need to create a new parameter file or use a premade one. To save time I cloned the AZBB repo from GitHub and referenced a premade parameter file matching the demo deployment details e.g. VNETs, TAGS, PEERINGS, DNS SERVERS.
cd c:\temp
git clone https://github.com/mspnp/template-building-blocks
The parameter file we are using (below) is at \template-building-blocks\scenarios\multi-tier\vnet-complete.json. If you are already familiar with using ARM templates you’ll quickly pickup on using AZBB parameter files.
{
"$schema": "https://raw.githubusercontent.com/mspnp/template-building-blocks/master/schemas/buildingBlocks.json",
"contentVersion": "<IP_ADDRESS>",
"parameters": {
"buildingBlocks": {
"value": [
{
"type": "VirtualNetwork",
"settings": [
{
"name": "msft-hub-vnet",
"addressPrefixes": [
"<IP_ADDRESS>/16"
],
"subnets": [
{
"name": "firewall",
"addressPrefix": "<IP_ADDRESS>/24"
},
{
"name": "ad",
"addressPrefix": "<IP_ADDRESS>/24"
},
{
"name": "mgmt",
"addressPrefix": "<IP_ADDRESS>/24"
},
{
"name": "GatewaySubnet",
"addressPrefix": "<IP_ADDRESS>/27"
}
],
"dnsServers": [
"<IP_ADDRESS>",
"<IP_ADDRESS>",
"<IP_ADDRESS>"
],
"virtualNetworkPeerings": [
{
"remoteVirtualNetwork": {
"name": "msft-spoke1-vnet"
},
"allowForwardedTraffic": true,
"allowGatewayTransit": true,
"useRemoteGateways": false
}
],
"tags": {
"department": "Central IT",
"managedBy": "Admins"
}
},
{
"name": "msft-spoke1-vnet",
"addressPrefixes": [
"<IP_ADDRESS>/16"
],
"subnets": [
{
"name": "web",
"addressPrefix": "<IP_ADDRESS>/24"
},
{
"name": "biz",
"addressPrefix": "<IP_ADDRESS>/24"
},
{
"name": "data",
"addressPrefix": "<IP_ADDRESS>/24"
}
],
"dnsServers": [
"<IP_ADDRESS>",
"<IP_ADDRESS>",
"<IP_ADDRESS>"
],
"virtualNetworkPeerings": [
{
"remoteVirtualNetwork": {
"name": "msft-hub-vnet"
},
"allowForwardedTraffic": true,
"allowGatewayTransit": false,
"useRemoteGateways": false
}
],
"tags": {
"department": "HR",
"managedBy": "DevOps"
}
}
]
}
]
}
}
}
Step 3 – Deploy with Azure Building Blocks
From my VSCode terminal I authenticated into Azure then noted my Subscription ID which I’ll need soon.
# AuthN to Azure
az login
# Note Subscription ID
az account show
Next I ran azbb to kickoff the deployment of the demo deployment referencing the existing .JSON parameter file which we cloned earlier.
azbb -g "VNET-AZBB-RG" -s "your-subscription-id" -l "your-azure-region" -p "C:\Temp\template-building-blocks\scenarios\multi-tier\vnet-complete.json" --deploy
After azbb completed running I could see the deployment tasks had succeeded from the Azure Portal > Resource Group > Deployments tab.
azbb switches you should be aware of:
- -g is the resource group you are deploying to
- -s is your subscription id
- -l is the Azure region your are deploying to
- -p is the parameter file (.JSON) which contains deployment *details
- –deploy is required to initiate the deployment to Azure
3x deployment artefacts are also generated which you can use for redeployment/troubleshooting/documentation:
Deploy with AzCLI
To demonstrate the difference with JSON vs azcli I’ve included the exact same VNET architecture deployed above and transferred it to .azcli format so you can see the differences in structure. I can deploy this script directly from a VSCode terminal using the AzureCLI extension for VSCode https://github.com/microsoft/vscode-azurecli.
I find azcli scripting very compact in terms of structure/layout on your screen, making to simplier to deploy multiple Azure resources from the same script. Azcli has also been easier for me to learn/adopt because of the built-in help snippets provided and Microsoft’s wiki.
#AuthN
az login
#Create RG
az group create -n "VNET-AZCLI-RG" -l "Australia East"
#Create Hub VNET
az network vnet create -n "msft-hub-vnet" --address-prefix "<IP_ADDRESS>/16" --subnet-name "firewall" --subnet-prefix "<IP_ADDRESS>/24" --dns-servers "<IP_ADDRESS>" "<IP_ADDRESS>" "<IP_ADDRESS>" --tags department="Central IT" managedBy="Admins" -g "VNET-AZCLI-RG"
az network vnet subnet create -n "ad" --address-prefix "<IP_ADDRESS>/24" --vnet-name "msft-hub-vnet" -g "VNET-AZCLI-RG"
az network vnet subnet create -n "mgmt" --address-prefix "<IP_ADDRESS>/24" --vnet-name "msft-hub-vnet" -g "VNET-AZCLI-RG"
az network vnet subnet create -n "GatewaySubnet" --address-prefix "<IP_ADDRESS>/27" --vnet-name "msft-hub-vnet" -g "VNET-AZCLI-RG"
#Create Spoke VNET
az network vnet create -n "msft-spoke1-vnet" --address-prefix "<IP_ADDRESS>/16" --subnet-name "web" --subnet-prefix "<IP_ADDRESS>/24" --dns-servers "<IP_ADDRESS>" "<IP_ADDRESS>" "<IP_ADDRESS>" --tags department="HR" managedBy="DevOps" -g "VNET-AZCLI-RG"
az network vnet subnet create -n "biz" --address-prefix "<IP_ADDRESS>/24" --vnet-name "msft-spoke1-vnet" -g "VNET-AZCLI-RG"
az network vnet subnet create -n "data" --address-prefix "<IP_ADDRESS>/24" --vnet-name "msft-spoke1-vnet" -g "VNET-AZCLI-RG"
#Create VNET Peerings
az network vnet peering create -g VNET-AZCLI-RG -n msft-hub-vnet-to-msft-spoke1-vnet --vnet-name msft-hub-vnet --remote-vnet msft-spoke1-vnet --allow-vnet-access --allow-forwarded-traffic --allow-gateway-transit
az network vnet peering create -g VNET-AZCLI-RG -n msft-spoke1-vnet-to-msft-hub-vnet --vnet-name msft-spoke1-vnet --remote-vnet msft-hub-vnet --allow-vnet-access --allow-forwarded-traffic
Conclusion
Azure Building Blocks showed potential as an alternative to ARM templates but I’ve been disappointed by a lack of further development and some ongoing issues with deploying VMs using the tool. The best-practice defaults that are applied as part of the pre-defined ARM templates are a necessary inclusion but we all know Azure is moving faster than the speed at which these best-practice defaults are updated in the templates – which leads you to situations where you’ll need to override these defaults and that’s where things can get painful.
For now I’m sticking with AzureCLI as my IaC tool for deployments.
Would be interesting to hear your thoughts on this.


please follow @Nenshi_bot
@Nenshi_bot
Technology that Connects Citizens to Their City
Created by Team Some9s / Github
Team Some9s
- Samson Nguyen
- Brooks Riley
- Tom Dyer
- Rob Woolley
We connect people to useful, accurate, and relevant information
Problem
How do we connect citizens to useful, relevant and accurate information in a way that embodies the spirit of Calgary?
Demonstration
Say hello to our new robotic twitter overlord...
Fire at the Disco!

Brooks is using the Amenities open dataset
- Brooks is an avid golf enthusiast:
- Brooks also likes encouragement when he's running:
Beat the Traffic
Samson is using the traffic incidents and traffic cams open datasets
- Samson wants to check traffic on is route home:
- Samson now wants to find all the traffic cams:
Not just Twitter
Command Shell Bot!
Wait, how did you do that?
Can you do more?
Values
- Citizens
- Twitter is easily accessible
- Interactive
- Fun and engaging!
Values
- City Ops
- Reduce burden on human resources
- Increased exposure to available services
Values
- Business
- Highly scalable and easy to implement
Dollars and Sense
We have a desire to optimize for OpEx over CapEx. This service would be highly elastic and should make use of as much OSS as possible. Ideally we want to come in under the $75k limit to avoid the bid process (we are lazy).
| Item |
Value |
Cost |
| Google Big Query |
Fast Web Based Queries of ODS |
Free for less than 1TB of data storage and Free for less than 1TB of Queries |
| AWS EC2 |
hosting the parsing and reply engine |
~$20/month |


A tool for custimizing LabVIEW user interfaces using style sheets similar to CSS used for webpage development. Developed by Shane Coles
This LabVIEW Add On is designed to quickly stylize a user interface using a language formatted similar to the Cascading Style Sheets used to stylize webpages. This offers some unique advantages over standard methods of controlling user interface appearance in LabVIEW. By applying styles using style sheets, a user has the ability to change the background color of any user interface object using a single common name like "background-color" instead of digging through the property node menus. This same idea can be used to set the size, position, and many other properties for UI objects. This Add On provides a helpful tool as well as examples to help a user get familiar with how to stylize the front panel.
Additionally, common parts of a style sheet can be shared between applications in order to ensure the same look and feel is shared between applications. This can be particularly helpful if multiple developers are working on different software packages that will all be delivered to the same customer. A style sheet can be defined that spells out things like background color and font size, and then applied to each application using the same methods.
LabVIEW 2015 or later
None
LabVIEW Style Sheets (LSS) attempts to replicate the behavior of actual CSS code as closely as possible. In
order to do this, LSS works by attaching a set of "applicable selectors" to each control on the LabVIEW user
interface. These selectors function as the set of classes and identifiers that can be used to as references.
For example, a section of HTML code might look like this:

My Header is Here!

When writing CSS later, a user could reference this header using either the class name or id, or both. Some
CSS that could be applied to this HTML would be:
#My_Header {
background-color: blue;
}
.Header_style {
font-size: 50px;
}
Applying these two styles would change the background color of the header text to blue, and the font size to
50 pixels. The '#' character is for id, and the '.' is for class. If multiple properties exist for a specific
item, the most specific one will be applied. For example, adding a third item to the style sheet as follows:
.Header_style #My_Header {
font-size: 100px;
}
Would override the 50px font size, and replace it with a 100px font size instead. All of these same principles
apply with LabVIEW style sheets. The style sheet is written in a very similar fashion, but instead of HTML, a
user creates a front panel using LabVIEW. For this example, we will start with a very basic user interface that
has a string indicator named "My_Header" to show something similar to the HTML code above.
While this toolkit and example would work very similarly with a front panel free label, since we have chosen to
use a string control, we will set it's value to a default value. At this point we can begin to use the API for
the LSS toolkit. For this example we will use only two VIs. First, place the "Obtain References" VI on the
block diagram. This VI requires a reference to the VI that will be stylized using LSS. Drop the "This VI" reference
and wire it into the "Obtain references" VI. This VI acquires all front panel object references, and configures
the CSS like keys so we can reference our front panel objects using LSS code. Next we will use the "Apply styles to GObjects"
VI. Drop this on the diagram and wire up the "Front Panel Objects" output terminal of the "Obtain References" VI
to the "Front Panel Objects" input terminal on the "Apply styles to GObjects" VI. Create a string constant off of
the "Style Sheet" input, this is where you will write your style sheet code. Place the code for background-color in
the string constant at this point and run the application. Instead of blue, we will make the background-color transparent.
Note that white space is ignored and so the LSS can be formatted to your preference. The code should look as follows:
After running, the front panel should look as follows.
Note that the border did not change color. This is because certain
properties in LabVIEW are not exposed to property nodes, there is no way to change the color of the border programatically.
To work around this problem, activate the paint brush tool then right click on the border on the front panel, click the "tab"
key and select Transparent for the border color. Now the software will be able to apply any background color and the border
will not be visible. Let's do this, and we will add in a few more styles to change the font size, make the label invisible,
and position our header. Here is the code now and the resulting header (in run mode, so the grid doesn't show):
Next lets add a 2D image control to the front panel and give it the path to a picture to show as a logo image. We will style
this image using LSS as well. The LSS code here will change the image size, position, and zoom. See the code and results:
Our logo and header name are now ready appearance wise. While most of this may be more convenient to do by hand, the real power
of LSS comes when this code must be replicated to another application, or when the appearance must be changed at run time. For
this example lets say that the logo and header must change appearance when the user clicks a certain button. To do this we will
simply add an event that will overwrite the LSS code we applied earlier:
Another important feature LSS gives is the ability for properties to be shared between items. Since both the #My_Header string
control and the #My_Logo picture are on the same front panel, they both share the "Pane" identifier. By moving the "labels.visible=false"
property into a LSS section identified by "Pane", we can remove them from both other sections. We also can remove all properties from the
second set method that do not change, only new properties need to be added in each set, old properties will not be reset. The following
code segment is functionally identical to the last image:
While these features are neat, the biggest disadvantage of using LSS is that the developer must learn how to use the sudo CSS language. In
order to lower the barrier to entry and allow developers to generate the LSS to stylize their application quickly the LSS toolkit comes with
a Live Modification Dialog VI. This VI automatically pulls all front panel objects off of every VI in memory and lists all properties that
can be modified for that VI. This VI can be run stand alone with any other application running to begin generating your custom LSS. Run the
"Example After.vi" and click the "CUSTOM" button to launch the Live Modification Dialog window. It will pull in the controls for the Example
application and should look as follows:
In this image the "Unique Identifiers" section contains the full list of LSS names that can be specified in a LabVIEW Style Sheet. Once clicked
on as has been done in this image, the "Available Properties" section populates with the full list of properties that can be customized for that
boolean. Double click on the bool.false-color to add it to the diagram with default LSS formatting:
Use the color picker color box control or the RGB controls to generate a hexidecimal value for the color and replace the default black color. For
convenience LSS also provides a color map. If you would like to define all your company colors and then reference them by name instead of by their
hexidecimal representation add them to the color map. In this image below we have used the color picker to change the bool.false-color for the button
named ATK to a green color. We have also changed the boolean text color to marsblue, which is in the color map as #00abc8. Once the properties are set
apply the change by clicking the "Apply" button:
In the "More Generic Identifiers" section, it can be seen that "Boolean" is a more generic identifier for this button. This is because it falls into
the Boolean control class. If we could like this style to be applied to all buttons on the front panel instead of just to the #ATK Button, we could change
the LSS as follow to get the following result:
If we scroll down in the "Unique Identifiers" list and click on the "Boolean" identifier we can see that there are certain Identifiers that are more generic
as well as some that are more specific. The "More Specific Identifiers" list has all of the buttons listed, since they are all booleans. The "More Generic Identifiers"
list has things like #Upper, which is the name of the panel above the horizontal splitter bar. We can also see the "Applicable Controls" list has the same items as the
"More Generic Identifiers" list. This is because the bool.false-color property will be applied to all controls that have the boolean class as an identifier.
Use the "Save" or "Load" buttons in the Live Modification Dialog to save the custom LSS as a style sheet that can be loaded from disk later or copy paste the text into a
string control and use as has been done in the above example. The "Clear" button will erase the LSS in the LSS Editor.
Another benefit of LSS is the ability to apply styles to objects that are not of the same type or class. In order to do this in CSS, each item will have a class assigned
to it that will give it certain properties just as was done in the CSS example above with the .Header_style class. We have so far demonstrated how to set properties for
things using either their name as an identifier or their class, such as boolean. Now we will group together items that are not of the same type. The "Control Grouping"
example VI shows this the best. On the block diagram you can see that the "grouping" input of the "Obtain References.vi" has been wired to a string constant. This string
constant defines groups by adding each item to a group. The format for adding items to the group is groupName:#controlName. To add multiple items to the same group, simply
repeat the line of code for each control to be added as can be seen in this image.
Run this example and play with the "Style Controls" on the front panel to see how changing the "background-color" property for group1 and group2 affects multiple items of
different LabVIEW class type in a similar manner.
To get an idea of the variety of things LSS is capable of controlling, you can also open the "Varity of Controls" example. Here there are two VIs. The first is named "Unstylized UI -
Run to Apply LSS Example.vi". Open and run this VI according to the instructions, then run the Live Modification Dialog and configure as you wish you get a feel for LSS. If you open
"Unstylized UI - After LSS has been run .vi", you can see a simple example of the kind of properties that can be changed for each of those controls.
Many sections of user inteface control code in LabVIEW are repetitious, such as adding an event structure to stylize certain front panel controls based on some button. Since this
code is very similar, we can use a control engine to handle all this code for us with a few simple directions. To get a feel for what this looks like, start by opening the "Property
Control" example. Run this VI then modify the controls to get an idea of how the user interface changes based on the input data. Then navigate to the block diagram and observe just
how little software must be written in order to make all these UI changes.
The "Launch Control Engine.vi" on this block diagram takes care of most of the work for us. This VI launches a property control engine asycnrhonously into the background. Once running
the property control engine will watch for value change events on the controls we specify in the "Rules String" input. This string constant here is the only code necessary to perform all the UI style control for
this VI. All whitespace is ignored, so format as desired. Note that it is also okay for control
names to have spaces, so long as what you type in for NAME_OF_THE_CONTROL in the
control string is an exact match of what the label name of the control is.
The format for the control string is:
IF NAME_OF_THE_CONTROL CONDITION VALUE (Multiple Conditions are supported with || or &&)
THEN LSS
ELSE LSS
These items are defined as follows:
There are hundreds of property nodes in LabVIEW, and as such not all of them have been implemented in this framework. It is, however, very easy to add more properties to the framework if there are some in particular
that you need for your task. This section will walk through how to add properties to the framework.
The first thing to do is open the VI named "Apply styles to GObjects.vi" as seen below. There are two outer for loops that iterate through the various properties passed to this VI which performs the modification. Do
not modify either of these outer for loops. On the inside of the second for loop you will see that an unbundle is providing a "Property" and a "Value" string (cirled in this image).
These two values are given to a set of case structures. To decide at which level to place the new property, first decide wether the property can be applied to many different objects, or wether it will only apply to a
specific type of object such as a graph. If it can be applied to many objects (such as the "position" property), then add it to the first case structure. Since "position" is a property all GObjects share, it resides in
the top case structure, the reference is cast as a GObject and the position is set:
To add a more specific property, leave the outer case structure at default and then navigate in the inner case structure to the class of the object you are modifying. For example, to add the zoom property to a Picture
class control, navigate to the Picture class and add the zoom property as seen here. You can also add new object classes if the one you are searching for is not in the case structure.
In order to get your new class to work with the "Live Modification Dialog", two more VIs must be modified. First, open "Find Properties that apply to Object.vi" and add the new property into the inner most case structre
seen here if adding a new control. For example, if adding a property to the "Digital" class, you would add it to the the list here if it can also be applied to the "Enum", "Ring", and "String" classes. If it cannot, you
will need to modify how this VI works to pass out the additional property for only that class.
If the item you are adding is not a control class object, you will need to add it a level up from here, such as how the properties for the "Decoration" class have been added here:
The last VI that must be modified is the "Generate Default LSS.vi". This VI only needs to be modified if the property you are adding will not have the same default value as an already existing property. This VI defines
what is places into the LSS Editor when the property is double clicked in the "Live Modification Dialog" window. For example, background-color will place the following LSS into the Editor.
#selectedControl{
background-color:#000000;
}
To add a new one such as a default value of 0.5 for the zoom property added for the picture class, add it as follows to the case structure:


{% assets 'playsounds_js' %} {% endassets %}
Playsounds available for AdmiralBullbot can be found and tested here
Gachi
Bulldog
Personalities
Weeb
Other


Bows and arrows and Molotov cocktails as protests in Hong Kong enter sixth month
A police officer was shot in the leg with an arrow when a fresh round of violence erupted during protests in Hong Kong.
Gasoline bombs were also launched with catapults as the city’s streets threatened to tip further into chaos in what is now the sixth month of demonstrations against Chinese influence.
Authorities were today trying to drive back protesters occupying a university campus and blocking a major road tunnel under Hong Kong’s harbour.
The protesters retreated into Hong Kong Polytechnic University last night under a barrage of police tear gas, barricading entrances.
They warned off a large group of suspected plain-clothed Chinese soldiers who arrived in the morning to try to tidy the road.
Police responded with another volley of tear gas canisters, some of which bounced off a wall of the movement’s symbolic umbrellas.
Protesters started launching gasoline bombs into nearby bushes and trees, setting them on fire.
Advertisement Advertisement
Police called in water cannons in the early afternoon, using blue-dyed water to drench demonstrators.
The picture of the officer’s impaled calf was shared by Hong Kong police, who said he was taken to hospital.
Protesters have retreated from a number of other campuses they were holding as of last week, but are still blocking access to one of the three main road tunnels between Hong Kong Island and the rest of the city.
The movement was sparked by a government attempt to pass a law allowing the extradition of criminal suspects to mainland China.
Critics called it an attempt to undermine Hong Kong’s autonomy, which is protected by the ‘one country, two systems’ principle brought when the UK ceded the territory to China in 1997.
The bill was shelved last month but protests have continued as part of a self-described resistance movement against interference by the Communist Party of China in Hong Kong affairs, calling for stronger democracy in the territory.
Chinese soldiers dressed in plain shorts and T-shirts took to the streets yesterday for what is thought to be the first time since the protests began. Armed only with brooms, they helped dismantle abandoned barricades and clean up debris.
The mainland military is only allowed to be deployed at the request of the Hong Kong government.
Advertisement Advertisement
The government said it had not requested the military assistance, describing it as a voluntary community activity.
Hong Kong’s education department said schools would remain suspended on Monday over safety concerns, after cancelling classes on Thursday and Friday.
The territory’s economy has entered its first recession in a decade as the tensions continue to affect tourism and local businesses.
Got a story for Metro.co.uk?
Get in touch with our news team by emailing us at<EMAIL_ADDRESS>For more stories like this, check our news page.


3 hours ago
Lorem Ipsum and such.
4/07/2014
Hope the weather gets a bit nicer...
Y'know, with more sunlight.
3/22/2014
In memory of Steve Jobs.
3/16/2014
Here you'll find some beautiful photography for your viewing pleasure, courtesy of lorempixel.
3/03/2014
Write up a quick summary of the event.
3/01/2014
This might be a follow-up post with related info. Maybe we include some extra links, tweets, user comments, photos, etc.
02/23/2014
Gee time really flies when you're having fun.
02/11/2014
Wasn't this fun though?


Cloud Sidekick
On the Web: http://www.cloudsidekick.com
Version:
Database:
Licensed To:
Utilization: Instances
Expires:
© 2014 Cloud Sidekick
| Name: | |
| User Name: | |
| Email: | |
| Password: | |
| Password Confirm: | |
| Security Question: | |
| Security Answer: |


--- layout: default title: Italics and Bold number: 1 ---
We'll start by learning two basic elements in text formatting: italics
and bold. In these lessons, you'll notice some formatted red text
;
this text is actually written in Markdown! Regular Markdown doesn't look any different
than regular text, but we're providing some highlighting to make it easier to see.
To make a phrase italic in Markdown, you can surround words with an
underscore (_
). For example, _this_
word would become
italic.
For this next lesson, make the word "not" italic.
Awesome! Great job.
Similarly, to make phrases bold in Markdown, you can surround
words with two asterisks ( **
). This will **really**
get your point across.
In the box below, make the word "will" bold.
Good work!
Of course, you can use _both italics and bold_
in the same line.
You can also span them **across multiple words**
.
In the box below, make the words "Of course" italic, and the words "a little moxie" bold.
Fantastic!
For the final exercise in this lesson, we're going to make some words bold and italic.
In general, it doesn't matter which order you place the asterisks or underscores.
In the box below, make the words "This is unbelievable" both bold and italic.
Place the asterisks **_on the outside_**
, just to make it more legible.


src/client.ts
STOMP Client Class.
Properties |
|
Methods |
|
constructor(conf: StompConfig)
|
||||||
|
Defined in src/client.ts:151
|
||||||
|
Create an instance.
Parameters :
|
| Public connectHeaders |
connectHeaders:
|
Type : StompHeaders
|
|
Defined in src/client.ts:56
|
|
Connection headers, important keys - |
| Public debug |
debug:
|
Type : debugFnType
|
|
Defined in src/client.ts:139
|
|
By default, debug messages are discarded. To log to
This method is called for every actual transmission of the STOMP frames over the WebSocket. |
| Public disconnectHeaders |
disconnectHeaders:
|
Type : StompHeaders
|
|
Defined in src/client.ts:61
|
|
Disconnection headers |
| Public heartbeatIncoming |
heartbeatIncoming:
|
Type : number
|
Default value : 10000
|
|
Defined in src/client.ts:25
|
|
Incoming heartbeat interval in milliseconds. Set to 0 to disable |
| Public heartbeatOutgoing |
heartbeatOutgoing:
|
Type : number
|
Default value : 10000
|
|
Defined in src/client.ts:30
|
|
Outgoing heartbeat interval in milliseconds. Set to 0 to disable |
| Public maxWebSocketFrameSize |
maxWebSocketFrameSize:
|
Type : number
|
Default value : 16 * 1024
|
|
Defined in src/client.ts:39
|
|
Maximum WebSocket frame size sent by the client. If the STOMP frame is bigger than this value, the STOMP frame will be sent using multiple WebSocket frames (default is 16KiB) |
| Public onConnect |
onConnect:
|
Type : frameCallbackType
|
|
Defined in src/client.ts:96
|
|
Callback, invoked on every successful connection to the STOMP broker. The actual frame is passed as parameter to the callback. |
| Public onDisconnect |
onDisconnect:
|
Type : frameCallbackType
|
|
Defined in src/client.ts:108
|
|
Callback, invoked on every successful disconnection from the STOMP broker. It will not be invoked if the STOMP broker disconnected due to an error. The actual frame is passed as parameter to the callback. The way STOMP protocol is designed, the connection may close/terminate without the client receiving the DISCONNECT frame. You might find Client#onWebSocketClose more appropriate. |
| Public onStompError |
onStompError:
|
Type : frameCallbackType
|
|
Defined in src/client.ts:118
|
|
Callback, invoked on an ERROR frame received from the STOMP Broker. A compliant STOMP Broker will close the connection after this type of frame. The actual frame is passed as parameter to the callback. See https://stomp.github.io/stomp-specification-1.2.html#ERROR. |
| Public onUnhandledFrame |
onUnhandledFrame:
|
Type : frameCallbackType
|
|
Defined in src/client.ts:82
|
|
Will be invoked if we receive an unknown frame type from the STOMP broker |
| Public onUnhandledMessage |
onUnhandledMessage:
|
Type : messageCallbackType
|
|
Defined in src/client.ts:70
|
|
This function will be called for any unhandled messages. It is useful to receive messages sent to temporary queues (for example RabbitMQ supports such queues). It can also be called for stray messages while the server is processing a request to unsubcribe from an endpoint. |
| Public onUnhandledReceipt |
onUnhandledReceipt:
|
Type : frameCallbackType
|
|
Defined in src/client.ts:77
|
|
STOMP brokers can be requested to notify when an operation is actually completed. Prefer using Client#watchForReceipt. See Client#watchForReceipt for examples. |
| Public onWebSocketClose |
onWebSocketClose:
|
Type : closeEventCallbackType
|
|
Defined in src/client.ts:125
|
|
Callback, invoked when underlying WebSocket is closed. Actual |
| Public reconnectDelay |
reconnectDelay:
|
Type : number
|
Default value : 5000
|
|
Defined in src/client.ts:20
|
|
automatically reconnect with delay in milliseconds, set to 0 to disable |
| Public webSocketFactory |
webSocketFactory:
|
Type : function
|
|
Defined in src/client.ts:15
|
|
This function should return a WebSocket or a similar (e.g. SockJS) object. |
| Public abort | ||||||
abort(transactionId: string)
|
||||||
|
Defined in src/client.ts:432
|
||||||
|
Abort a transaction. It is preferable to abort a transaction by calling abort directly on Transaction returned by client.begin.
See: http://stomp.github.com/stomp-specification-1.2.html#ABORT ABORT Frame
Parameters :
Returns :
void
|
| Public ack | ||||||||||||||||
ack(messageId: string, subscriptionId: string, headers: StompHeaders)
|
||||||||||||||||
|
Defined in src/client.ts:451
|
||||||||||||||||
|
ACK a message. It is preferable to acknowledge a message by calling ack directly on the Message handled by a subscription callback:
See: http://stomp.github.com/stomp-specification-1.2.html#ACK ACK Frame
Parameters :
Returns :
void
|
| Public activate |
activate()
|
|
Defined in src/client.ts:190
|
|
Initiate the connection. If the connection breaks it will keep trying to reconnect. Call Client#deactivate to disconnect and stop reconnection attempts.
Returns :
void
|
| Public begin | ||||||
begin(transactionId: string)
|
||||||
|
Defined in src/client.ts:398
|
||||||
|
Start a transaction, the returned Transaction has methods - commit and abort. See: http://stomp.github.com/stomp-specification-1.2.html#BEGIN BEGIN Frame
Parameters :
Returns :
Transaction
|
| Public commit | ||||||
commit(transactionId: string)
|
||||||
|
Defined in src/client.ts:415
|
||||||
|
Commit a transaction. It is preferable to commit a transaction by calling commit directly on Transaction returned by client.begin.
See: http://stomp.github.com/stomp-specification-1.2.html#COMMIT COMMIT Frame
Parameters :
Returns :
void
|
| Public configure | ||||||
configure(conf: StompConfig)
|
||||||
|
Defined in src/client.ts:180
|
||||||
|
Update configuration. See StompConfig for details of configuration options.
Parameters :
Returns :
void
|
| Public deactivate |
deactivate()
|
|
Defined in src/client.ts:277
|
|
Disconnect and stop auto reconnect loop. Appropriate callbacks will be invoked if underlying STOMP connection is connected. See: http://stomp.github.com/stomp-specification-1.2.html#DISCONNECT
Returns :
void
|
| Public nack | ||||||||||||||||
nack(messageId: string, subscriptionId: string, headers: StompHeaders)
|
||||||||||||||||
|
Defined in src/client.ts:470
|
||||||||||||||||
|
NACK a message. It is preferable to acknowledge a message by calling nack directly on the Message handled by a subscription callback:
See: http://stomp.github.com/stomp-specification-1.2.html#NACK NACK Frame
Parameters :
Returns :
void
|
| Public publish | ||||||
publish(params: publishParams)
|
||||||
|
Defined in src/client.ts:312
|
||||||
|
Send a message to a named destination. Refer to your STOMP broker documentation for types and naming of destinations. The headers will, typically, be available to the subscriber. However, there may be special purpose headers corresponding to your STOMP broker. Note: Body must be String. You will need to covert the payload to string in case it is not string (e.g. JSON)
See: http://stomp.github.com/stomp-specification-1.2.html#SEND SEND Frame
Parameters :
Returns :
void
|
| Public subscribe | ||||||||||||||||
subscribe(destination: string, callback: messageCallbackType, headers: StompHeaders)
|
||||||||||||||||
|
Defined in src/client.ts:372
|
||||||||||||||||
|
Subscribe to a STOMP Broker location. The callbck will be invoked for each received message with the Message as argument. Note: The library will generate an unique ID if there is none provided in the headers. To use your own ID, pass it using the headers argument.
See: http://stomp.github.com/stomp-specification-1.2.html#SUBSCRIBE SUBSCRIBE Frame
Parameters :
Returns :
StompSubscription
|
| Public unsubscribe | ||||||||||||
unsubscribe(id: string, headers: StompHeaders)
|
||||||||||||
|
Defined in src/client.ts:388
|
||||||||||||
|
It is preferable to unsubscribe from a subscription by calling
See: http://stomp.github.com/stomp-specification-1.2.html#UNSUBSCRIBE UNSUBSCRIBE Frame
Parameters :
Returns :
void
|
| Public watchForReceipt | |||||||||
watchForReceipt(receiptId: string, callback: frameCallbackType)
|
|||||||||
|
Defined in src/client.ts:342
|
|||||||||
|
Watch for a receipt, callback will receive the STOMP frame as parameter. The receipt id needs to be unique for each use. Typically a sequence, a UUID, a random number or a combination would be used. Example:
Parameters :
Returns :
void
|
| webSocket |
getwebSocket()
|
|
Defined in src/client.ts:44
|
|
Underlying WebSocket instance, READONLY
Returns :
WebSocket
|
| connected |
getconnected()
|
|
Defined in src/client.ts:87
|
|
Returns :
boolean
|
| version |
getversion()
|
|
Defined in src/client.ts:144
|
|
version of STOMP protocol negotiated with the server, READONLY
Returns :
string
|
import {StompHeaders} from "./stomp-headers";
import {StompSubscription} from "./stomp-subscription";
import {Transaction} from "./transaction";
import {closeEventCallbackType, debugFnType, frameCallbackType, messageCallbackType, publishParams} from "./types";
import {StompConfig} from './stomp-config';
import {StompHandler} from "./stomp-handler";
/**
* STOMP Client Class.
*/
export class Client {
/**
* This function should return a WebSocket or a similar (e.g. SockJS) object.
*/
public webSocketFactory: () => any;
/**
* automatically reconnect with delay in milliseconds, set to 0 to disable
*/
public reconnectDelay: number = 5000;
/**
* Incoming heartbeat interval in milliseconds. Set to 0 to disable
*/
public heartbeatIncoming: number = 10000;
/**
* Outgoing heartbeat interval in milliseconds. Set to 0 to disable
*/
public heartbeatOutgoing: number = 10000;
// public heartbeat: { outgoing: number; incoming: number };
/**
* Maximum WebSocket frame size sent by the client. If the STOMP frame
* is bigger than this value, the STOMP frame will be sent using multiple
* WebSocket frames (default is 16KiB)
*/
public maxWebSocketFrameSize: number = 16 * 1024;
/**
* Underlying WebSocket instance, READONLY
*/
get webSocket(): WebSocket {
return this._webSocket;
}
/**
* Underlying WebSocket instance
* @internal
*/
protected _webSocket: WebSocket;
/**
* Connection headers, important keys - `login`, `passcode`, `host`
*/
public connectHeaders: StompHeaders;
/**
* Disconnection headers
*/
public disconnectHeaders: StompHeaders;
/**
* This function will be called for any unhandled messages. It is useful to receive messages sent to
* temporary queues (for example RabbitMQ supports such queues).
*
* It can also be called for stray messages while the server is processing a request to unsubcribe
* from an endpoint.
*/
public onUnhandledMessage: messageCallbackType;
/**
* STOMP brokers can be requested to notify when an operation is actually completed.
* Prefer using [Client#watchForReceipt]{@link Client#watchForReceipt}. See
* [Client#watchForReceipt]{@link Client#watchForReceipt} for examples.
*/
public onUnhandledReceipt: frameCallbackType;
/**
* Will be invoked if we receive an unknown frame type from the STOMP broker
*/
public onUnhandledFrame: frameCallbackType;
/**
* `true` if there is a active connection with STOMP Broker
*/
get connected(): boolean {
return (!!this._stompHandler) && this._stompHandler.connected;
}
/**
* Callback, invoked on every successful connection to the STOMP broker.
*
* The actual frame is passed as parameter to the callback.
*/
public onConnect: frameCallbackType;
/**
* Callback, invoked on every successful disconnection from the STOMP broker. It will not be invoked if
* the STOMP broker disconnected due to an error.
*
* The actual frame is passed as parameter to the callback.
*
* The way STOMP protocol is designed, the connection may close/terminate without the client
* receiving the DISCONNECT frame.
* You might find [Client#onWebSocketClose]{@link Client#onWebSocketClose} more appropriate.
*/
public onDisconnect: frameCallbackType;
/**
* Callback, invoked on an ERROR frame received from the STOMP Broker.
* A compliant STOMP Broker will close the connection after this type of frame.
*
* The actual frame is passed as parameter to the callback.
*
* See https://stomp.github.io/stomp-specification-1.2.html#ERROR.
*/
public onStompError: frameCallbackType;
/**
* Callback, invoked when underlying WebSocket is closed.
*
* Actual `event` is passed as parameter to the callback.
*/
public onWebSocketClose: closeEventCallbackType;
/**
* By default, debug messages are discarded. To log to `console` following can be used:
*
* ```javascript
* client.debug = function(str) {
* console.log(str);
* };
* ```
*
* This method is called for every actual transmission of the STOMP frames over the
* WebSocket.
*/
public debug: debugFnType;
/**
* version of STOMP protocol negotiated with the server, READONLY
*/
get version(): string {
return this._stompHandler ? this._stompHandler.version : undefined;
}
private _stompHandler: StompHandler;
private _active: boolean = false;
private _reconnector: any;
/**
* Create an instance.
*/
constructor(conf: StompConfig = {}) {
// Dummy callbacks
const noOp = () => {};
this.debug = noOp;
this.onConnect = noOp;
this.onDisconnect = noOp;
this.onUnhandledMessage = noOp;
this.onUnhandledReceipt = noOp;
this.onUnhandledFrame = noOp;
this.onStompError = noOp;
this.onWebSocketClose = noOp;
// These parameters would typically get proper values before connect is called
this.connectHeaders = {};
this.disconnectHeaders = {};
this.webSocketFactory = () => null;
// Apply configuration
this.configure(conf);
}
/**
* Update configuration. See {@link StompConfig} for details of configuration options.
*/
public configure(conf: StompConfig): void {
// bulk assign all properties to this
(<any>Object).assign(this, conf);
}
/**
* Initiate the connection. If the connection breaks it will keep trying to reconnect.
*
* Call [Client#deactivate]{@link Client#deactivate} to disconnect and stop reconnection attempts.
*/
public activate(): void {
// Indicate that this connection is active (it will keep trying to connect)
this._active = true;
this._connect();
}
private _connect(): void {
if (!this._active) {
this.debug('Client has been marked inactive, will not attempt to connect');
return;
}
if (this.connected) {
this.debug('STOMP: already connected, nothing to do');
return;
}
this.debug("Opening Web Socket...");
// Get the actual Websocket (or a similar object)
this._webSocket = this._createWebSocket();
this._stompHandler = new StompHandler(this, this._webSocket, {
debug: this.debug,
connectHeaders: this.connectHeaders,
disconnectHeaders: this.disconnectHeaders,
heartbeatIncoming: this.heartbeatIncoming,
heartbeatOutgoing: this.heartbeatOutgoing,
maxWebSocketFrameSize: this.maxWebSocketFrameSize,
onConnect: (frame) => {
if (!this._active) {
this.debug('STOMP got connected while deactivate was issued, will disconnect now');
this._disposeStompHandler();
return;
}
this.onConnect(frame);
},
onDisconnect: (frame) => {
this.onDisconnect(frame);
},
onStompError: (frame) => {
this.onStompError(frame);
},
onWebSocketClose: (evt) => {
this.onWebSocketClose(evt);
if (this._active) {
this._schedule_reconnect();
}
},
onUnhandledMessage: (message) => {
this.onUnhandledMessage(message);
},
onUnhandledReceipt: (frame) => {
this.onUnhandledReceipt(frame);
},
onUnhandledFrame: (frame) => {
this.onUnhandledFrame(frame);
}
});
this._stompHandler.start();
}
private _createWebSocket() {
const webSocket = this.webSocketFactory();
webSocket.binaryType = "arraybuffer";
return webSocket;
}
private _schedule_reconnect(): void {
if (this.reconnectDelay > 0) {
this.debug(`STOMP: scheduling reconnection in ${this.reconnectDelay}ms`);
this._reconnector = setTimeout(() => {
this._connect();
}, this.reconnectDelay);
}
}
/**
* Disconnect and stop auto reconnect loop.
*
* Appropriate callbacks will be invoked if underlying STOMP connection is connected.
*
* See: http://stomp.github.com/stomp-specification-1.2.html#DISCONNECT
*/
public deactivate(): void {
// indicate that auto reconnect loop should terminate
this._active = false;
// Clear if a reconnection was scheduled
if (this._reconnector) {
clearTimeout(this._reconnector);
}
this._disposeStompHandler();
}
private _disposeStompHandler() {
// Dispose STOMP Handler
if (this._stompHandler) {
this._stompHandler.dispose();
this._stompHandler = null;
}
}
/**
* Send a message to a named destination. Refer to your STOMP broker documentation for types
* and naming of destinations. The headers will, typically, be available to the subscriber.
* However, there may be special purpose headers corresponding to your STOMP broker.
*
* Note: Body must be String. You will need to covert the payload to string in case it is not string (e.g. JSON)
*
* ```javascript
* client.send({destination: "/queue/test", headers: {priority: 9}, body: "Hello, STOMP"});
*
* // Only destination is mandatory parameter
* client.send({destination: "/queue/test", body: "Hello, STOMP"});
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#SEND SEND Frame
*/
public publish(params: publishParams) {
this._stompHandler.publish(params);
}
/**
* Watch for a receipt, callback will receive the STOMP frame as parameter.
*
* The receipt id needs to be unique for each use. Typically a sequence, a UUID, a
* random number or a combination would be used.
*
* Example:
* ```javascript
* // Receipt for Subscription
* let receiptId = randomText();
*
* client.watchForReceipt(receiptId, function() {
* // Will be called after server acknowledges
* });
*
* client.subscribe(TEST.destination, onMessage, {receipt: receiptId});
*
* // Receipt for message send
* receiptId = randomText();
*
* client.watchForReceipt(receiptId, function() {
* // Will be called after server acknowledges
* });
* client.send(TEST.destination, {receipt: receiptId}, msg);
* ```
*/
public watchForReceipt(receiptId: string, callback: frameCallbackType): void {
this._stompHandler.watchForReceipt(receiptId, callback);
}
/**
* Subscribe to a STOMP Broker location. The callbck will be invoked for each received message with
* the {@link Message} as argument.
*
* Note: The library will generate an unique ID if there is none provided in the headers.
* To use your own ID, pass it using the headers argument.
*
* ```javascript
* callback = function(message) {
* // called when the client receives a STOMP message from the server
* if (message.body) {
* alert("got message with body " + message.body)
* } else {
* alert("got empty message");
* }
* });
*
* var subscription = client.subscribe("/queue/test", callback);
*
* // Explicit subscription id
* var mySubId = 'my-subscription-id-001';
* var subscription = client.subscribe(destination, callback, { id: mySubId });
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#SUBSCRIBE SUBSCRIBE Frame
*/
public subscribe(destination: string, callback: messageCallbackType, headers: StompHeaders = {}): StompSubscription {
return this._stompHandler.subscribe(destination, callback, headers);
}
/**
* It is preferable to unsubscribe from a subscription by calling
* `unsubscribe()` directly on {@link StompSubscription} returned by `client.subscribe()`:
*
* ```javascript
* var subscription = client.subscribe(destination, onmessage);
* // ...
* subscription.unsubscribe();
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#UNSUBSCRIBE UNSUBSCRIBE Frame
*/
public unsubscribe(id: string, headers: StompHeaders = {}): void {
this._stompHandler.unsubscribe(id, headers);
}
/**
* Start a transaction, the returned {@link Transaction} has methods - [commit]{@link Transaction#commit}
* and [abort]{@link Transaction#abort}.
*
* See: http://stomp.github.com/stomp-specification-1.2.html#BEGIN BEGIN Frame
*/
public begin(transactionId: string): Transaction {
return this._stompHandler.begin(transactionId);
}
/**
* Commit a transaction.
* It is preferable to commit a transaction by calling [commit]{@link Transaction#commit} directly on
* {@link Transaction} returned by [client.begin]{@link Client#begin}.
*
* ```javascript
* var tx = client.begin(txId);
* //...
* tx.commit();
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#COMMIT COMMIT Frame
*/
public commit(transactionId: string): void {
this._stompHandler.commit(transactionId);
}
/**
* Abort a transaction.
* It is preferable to abort a transaction by calling [abort]{@link Transaction#abort} directly on
* {@link Transaction} returned by [client.begin]{@link Client#begin}.
*
* ```javascript
* var tx = client.begin(txId);
* //...
* tx.abort();
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#ABORT ABORT Frame
*/
public abort(transactionId: string): void {
this._stompHandler.abort(transactionId);
}
/**
* ACK a message. It is preferable to acknowledge a message by calling [ack]{@link Message#ack} directly
* on the {@link Message} handled by a subscription callback:
*
* ```javascript
* var callback = function (message) {
* // process the message
* // acknowledge it
* message.ack();
* };
* client.subscribe(destination, callback, {'ack': 'client'});
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#ACK ACK Frame
*/
public ack(messageId: string, subscriptionId: string, headers: StompHeaders = {}): void {
this._stompHandler.ack(messageId, subscriptionId, headers);
}
/**
* NACK a message. It is preferable to acknowledge a message by calling [nack]{@link Message#nack} directly
* on the {@link Message} handled by a subscription callback:
*
* ```javascript
* var callback = function (message) {
* // process the message
* // an error occurs, nack it
* message.nack();
* };
* client.subscribe(destination, callback, {'ack': 'client'});
* ```
*
* See: http://stomp.github.com/stomp-specification-1.2.html#NACK NACK Frame
*/
public nack(messageId: string, subscriptionId: string, headers: StompHeaders = {}): void {
this._stompHandler.nack(messageId, subscriptionId, headers);
}
}


A Scribe is a run-time component that interprets user gestures. User gestures may be detected by the sensors that are available (keyboard, mouse, voice, camera). The Scribe translates gestures into a string which may then be matched to a dialog pattern. This separates the dialog concerns from the sensor concerns.
See: Dialog Frame Notation.


SIRENS A film review by James Berardinelli Copyright 1994 James Berardinelli
Rating (Linear 0 to 10): 6.6
Date Released: 3/4/93 (limited) Running Length: 1:34 Rated: R (Nudity, sex, language)
Starring: Hugh Grant, Tara Fitzgerald, Sam Neill, Elle MacPherson, Portia De Rossi, Kate Fischer, Mark Gerber Director: John Duigan Producer: Sue Milliken Screenplay: John Duigan Music: Rachel Portman Released by Miramax Films
On the surface, it's easy to assume that SIRENS is a lighthearted erotic romp through the secluded wilds of Australia's Blue Mountains in the 1930s. Like in some modern-day garden of Eden, there are snakes, ripening fruit, and plenty of naked bodies. However, SIRENS is not content merely to churn through the frothy waters of a sex comedy. By introducing the issue of religious repression, John Duigan's script ventures into an area it is unprepared to deal with.
A young Anglican clergyman, Anthony Campion (Hugh Grant), and his somewhat naive wife Estella (Tara Fitzgerald) have recently arrived in Australia from England. At the request of the Bishop, the pair pause in their journey to Campion's new parish to visit artist Norman Lindsay (Sam Neill), whose paintings are threatening to create a scandal at the opening of an upcoming exhibition. They are to attempt to persuade Lindsay to withdraw something called "The Crucified Venus." Once on his estate, however, Tony and Estella find that life is far different from anything they have previously experienced. There are few taboos, and the presence of three young models (Elle MacPherson, Portia De Rossi, and Kate Fischer) begins to exert an influence on the visiting couple.
Filmed on the actual land once owned by Norman Lindsay (who died in 1969), SIRENS does not attempt to be autobiographical, but instead to draw upon the reputation of the artist to furnish background. Writer/director John Duigan readily acknowledges that, with the exception of Lindsay and his family, all of the characters are fictitious.
The potential is here for a delightful comedy/fantasy with a decidedly erotic edge, but certain elements of the movie work against that aim. There is an underlying current of mean-spiritedness that feels inappropriate in a film striving for a light tone. The most sympathetic character emerges from SIRENS with the "short end of the stick."
Also, the serious discussions involving the Church's repression of eroticism suffer from two problems. Not only are these weightier portions of the script at odds with what the rest of the film is trying to accomplish, but they're too sketchy and incomplete to add anything noteworthy to the overall story. They appear to have been included to inject an intellectual aspect into what is an otherwise lightweight motion picture.
The acting is top-notch. Hugh Grant and Sam Neill are both excellent as friendly adversaries. Tara Fitzgerald, who played Nancy in HEAR MY SONG, gives an effective rendering of a woman caught between two worlds. Elle MacPherson's performance is limited in scope, but the role thankfully doesn't require the model-turned-actress to overextend herself.
Atmosphere is another major element of SIRENS, and that's handled well, aided by numerous shots of undulating snakes and lush vistas. As might be expected, nudity abounds, but most instances avoid seeming excessive or gratuitous, and men as well as women are displayed in various stages of undress.
Nevertheless, by trying to do perhaps too much with this film, Mr. Duigan has limited its effectiveness. As a vehicle for examining the subject of religion versus the freedom of artists, SIRENS is shallow, but the presentation of the issue dampens some of the lighthearted fun. Sometimes, it's better not to try for substance with a basic premise this earthy.
- James Berardinelli<EMAIL_ADDRESS>.
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


Each notebook entry below will discuss the approach, the problems with that approach and potential solutions. This leads into the next version of the analysis.
We set out to measure the \(D_{ap}\) for PYO in the IDA grown biofilm based on a sensitive generator/collector (gc) measurement.
Approach: Originally, we were just soaking a biofilm in a concentration of PYO and looking at how current increased. Recall, the main goal was to see if the relationship was linear or nonlinear.
Problem: We realized that most of the signal is coming from the solution phase PYO, not necessarily PYO associated with the biofilm.
Solution: Try to transfer the biofilm to fresh media.
Approach: We decided to transfer the biofilm to a fresh reactor after soaking, so that we would be measuring biofilm associated PYO. In the course of monitoring the PYO equilibrate out of the biofilm into the fresh media, we realized it might be possible to measure \(D_m\). We no longer knew the concentration of PYO at the electrode, so we then adopted the SWV vs. GC measurement. Typically, we waited for the PYO to equilibrate between the biofilm and the fresh solution.
Problem: At “equilibrium,” , the solution concentration of PYO was no longer negligible, presenting the same problem as in V1 above. This was seen by measuring the solution with a blank IDA after the biofilm IDA measurements.
Solution: Measure in the transfer reactor before equilbrium when we can be confident PYO is associated with the biofilm. Also, try to carry over less PYO into the transfer reactor and explicitly measure the background solution PYO with a blank IDA.
Approach: Measure while PYO is equilibrating with the transfer solution, by taking a 1 segment GC scan (~3min) immediately followed by a ~2sec SWV scan. By measuring before equilibrium, we can be confident that we are measuring biofilm associated PYO, and not solution phase PYO. Also, because we can get multiple datapoints following soak in one PYO concentration, we can gather more datapoints in less time.
Potential problem: Multiple GC measurements during equilibration may effectively drive PYO out of the biofilm, disrupting the measurement of \(D_m\).
Potential solution: Make separate measurement of \(D_m\) by monitoring a separate equilibration with only intermittent SWV (as in V2).
From monitoring PYO equilibration for \(D_{ap}\) V2, it seemed possible to measure the physical diffusion coefficient of PYO \(D_m\) from the consecutive SWVs taken to monitor the equilibration.
Approach: Monitor equilibration with successive SWV scans (slow - 40sec each). Estimate the initial current, \(I_0\), with the first datapoint, \(P_1\).
Problem: The first datapoint, \(P_1\), is not at all a reasonable estimate of initial current, \(I_0\). This throws off the estimate of \(D_m\) by orders of magnitude. This became clear by analyzing a blank IDA where the soak SWV is known to be \(I_0\). blank IDA analysis notebook
Solution: We can accept that we may never know the true \(I_0\), but we should be able to bound our estimates by assuming that \(I_0\) lies between the SWV signal from the soak (preceding transfer) and \(P_1\).
Simulating these SWV decay curves from our diffusion equation further convinces me that we cannot estimate \(I_0\) from any type of analysis of the transfer SWVs.
This experiment has not been attempted yet.


--- layout: post title: Lovely generalisation date: 2006-10-26 00:00:00 category: personal ---
Lovely generalisation: "There are two kinds of people: people that make things complex and people that simplify."
I pray I'm in the latter camp, being a strong believer in the untapped power of stupidity...


| Earnings | {{employee.m1}} | {{employee.m2}} | {{employee.m3}} | Deductions | {{employee.x1}} | {{employee.x2}} | {{employee.x3}} |
|---|---|---|---|---|---|---|---|
| BASIC PAY/PAY | {{employee.pay1}} | {{employee.pay2}} | {{employee.pay3}} | P.F. | {{employee.pf1}} | {{employee.pf2}} | {{employee.pf3}} |
| D.P/AGP | {{employee.dp1}} | {{employee.dp2}} | {{employee.dp3}} | PROFESSIONAL TAX | {{employee.pt1}} | {{employee.pt2}} | {{employee.pt3}} |
| D.A | {{employee.da1}} | {{employee.da2}} | {{employee.da3}} | INCOME TAX | {{employee.it1}} | {{employee.it2}} | {{employee.it3}} |
| H.R.A | {{employee.hra1}} | {{employee.hra2}} | {{employee.hra3}} | REVENUE STAMP | {{employee.r1}} | {{employee.r2}} | {{employee.r3}} |
| C.C.A | {{employee.cca1}} | {{employee.cca2}} | {{employee.cca3}} | OTHER DEDUCTIONS | {{employee.o1}} | {{employee.o2}} | {{employee.o3}} |
| T.A | {{employee.ta1}} | {{employee.ta2}} | {{employee.ta3}} | TOTAL DEDUCTIONS | {{employee.t1}} | {{employee.t2}} | {{employee.t3}} |
| GROSS SALARY(Rs.) | {{employee.g1}} | {{employee.g2}} | {{employee.g3}} | NET SALARY(Rs.) | {{employee.n1}} | {{employee.n2}} | {{employee.n3}} |
This certificate is issued on request of {{employee.name}} without any financial obligation /liability on the part of institution ; netither this certificate should be treated as any commitment from the institution in whatsover matter.


The authorities must be advised of the yacht's ETA and the vessel must proceed without stopping to an official port of entry. Boats coming from the south should keep well away from the Burmese coast after leaving Thai territorial waters and only head inshore when ready to enter Kawthaung (Victoria Point) harbour.
Stopping at any islands is prohibited and should be avoided.
A cruising permit must be obtained in advance: a personal visit must be made to Yangon to pay the fee for a two year permit that can cover three yachts. Alternatively permits can be obtained from yacht agents in Phuket. There are several agents in Phuket that can arrange entry permits. See the list of Noonsite/Myanmar/ClearanceAgents below.
A copy of the yacht(s) registration must be given along with a photo each of the front, side and stern view of the yacht. The department handling yachts in Yangon is MTT and the email is<EMAIL_ADDRESS>Before arrival, email a full crew and passenger list to MTT in Yangon and a photocopy faxed to the agent at the port of entry in Kawthaung.
Also on arrival, you must produce 1 copy of the crew and passenger list, 2 passport size photos and 2 copies of the passport (the page with the photo is sufficient) plus the entry fees (see below).
It is compulsory to take a Burmese guide on board while the vessel is in Burmese waters.
Last updated February 2015.
Passports must be vaild for 6 months.
All nationals require visas. The maximum length of stay being 28 days. Visas can be obtained from Myanmar embassies in Bangok, Kuala Lumpur or Singapore.
Visas are valid from three months from the date of issue.
The new e-visa only permits entry to the country through Yangon, Nay Pyi Taw and Mandalay international airports and also requires the visitor to stay in registered accommodation. It is not possible to use one when arriving by sea or staying on a yacht.
It is possible to obtain a Visa on arrival, but only on production of a pre-approval letter, which takes 2 weeks to obtain. Visas on arrival will not allow any crew or passenger to fly to Yangon or Mergui from Kawthaung. These visas are strictly for sailing the islands in the Mergui Archipelago.
Holders of North Korean passports are refused admission.
Note: Visa regulations change frequently.
Last checked January 2015.
Inspections are thorough and firearms as well as valuables (including cameras and electronic equipment) should be declared.
Any currency must also be declared on arrival and may have to be accounted for on departure.
Visitors may bring in one laptop computer per person and must declare it upon arrival.
Export of antiques, Buddha images and gems without official dealer's receipt, is strictly prohibited.
Last checked February 2015.
Cholera is a serious risk. Malaria, as well as tuberculosis, hepatitis, and other infectious diseases are endemic in most parts of the country.
Medical facilities are inadequate for even routine medical care. There are few trained medical personnel. Avoid intrusive medical treatments, if possible.
Most foreign drugs on sale have been smuggled into the country, and are often counterfeit or adulterated and thus unsafe to use.
Bottled water should always be used.
A permit must be obtained in advance. The fee for one boat is the same as for three boats and requires a trip to Yangon to organize the permit and make the payment. This covers the three vessels.
No matter what the "official" fees might be, the total cost, in reality, is likely to be a substantial amount.
The fees below are for visiting sailing yachts. For luxury motor or sailing yachts the fees are substantially higher. Please clear with your agent for these fees.
Cruising permit fee is $2500 excluding the agent's fee.
Yacht crew are "passengers", if they do not have a Seaman book. If they have a Seaman book, they do not have to pay visa fee or any other fees.
To get a better overview, there are per person fees and yacht fees:-
Per person fees:
Visa fee of $ 30/person.
Entry fee up to the Northern tip of Lampi island US$ 120 - valid for up to 5 days.
Entry fee for the Southern Mergui and North of Lampi island US$ 170 - valid for up to 5 days.
After day 5 there is an additional US$ 20 - to be added per person per day.
Yacht fees:
Clearing in fee THB 5000.
Fee for the obligatory Burmese guide ($40/day – which the guide does not receive but it’s called that).
Guide salary about THB 2-3000 per week plus a tip if he is helpful, which most of them are.
Port clearance THB 1000.
Mergui Mooring & lighthouse fee US$ 100
Mergui port clearance fee (for large yachts) US$ 180
(not applicable if not visiting that port)
Amounts are quoted in US$ and Thai Baht
Last updated March 2013.
Internet connections are strictly controlled, very expensive and all emails are read by military intelligence. The government prohibits access to most free international e-mail services.
Mobile phones services are not available outside Kawthaung and they have Thai mobile phone system coverage only around Kawthaung.


MS in Geographic Information Systems
August,2021 - Arizona State University – Tempe, Arizona GPA: InProgress/4.0
Bachelors of Science in Geographic Information Science
December 2019 Arizona State University – Tempe, Arizona GPA: 3.99/4.0 Dean’s List 2019
Associates of Science, Liberal Arts and AGEC December 2014
Pima Community College – Tucson, Arizona GPA: 2.8
August 2020 to Present
September 2018 to August 2019
October 2017 to March 2018
March 2016 to April 2020
October 2014 to March 2016


Treatment
- Notify surgeon, stop nitrous oxide and volatile agents. Increase O2 to 100%
- Stop air entrainment: Find air entry point, stop source, and limit further entry.
-
Ask surgeon to:
- Flood wound with irrigation/soaked saline dressing
- Turn off all pressurized gas sources, e.g. laparoscope, endoscope
- Place bone wax or cement on exposed bone edges
- Check for open venous lines or air in IV tubing
- Lower surgical site below level of heart (if possible)
- Perform Valsalva on patient using hand ventilation
- Consider:
- Compress jugular veins intermittently if head or cranial case
- Aspirate from central venous catheter
- Most important is to stop air entrainment (See
DX tab)
-
Hemodynamic support if hypotensive:
- Give EPINEPHrine 1-10 MICROgrams/kg, followed by infusion of EPINEPHrine 0.02-1 MICROgrams/kg/min or NOREPInephrine
0.05-2 MICROgrams/kg/min
-
Give EPINEPHrine MICROgrams (1-10 MICROgrams/kg), followed by infusion
of EPINEPHrine MICROgrams/min (0.02-1 MICROgrams/kg/min)
or NOREPInephrine MICROgrams/min (0.05-2 MICROgrams/kg/min)
- Chest compressions: 100-120/min to force air through lock, even if not in cardiac arrest
- If available, call for transesophageal echocardiography


We want to make it easier to keep track of the players that play for the US national soccer team. Do you ever wonder who has played for the team or who could possibly be playing for the team in the next game? We are keeping track of those players and letting you know a little bit of information about them.


#parse("header.html")
Site Map
#parse("menu.html")
MATRIKA: A Project to Reclaim Indigenous Midwifery
The Traditional Birth World in North India
Complications, Safety, Caesarians, and the Politics of Birth
Reproductive Health Matters and Perspectives
Featured Articles & Archives
Yoni Knowledge
Matrika Workshop Transcripts
Discussions
Upcoming Events
$pageBody
#parse("footer.html")


Whale Story
A playable narrative built with p5.js and Vue.js
Hello. You have been turned into a whale.
What kind of whale would you rather be?
Congratulations! You are now a {{sketch.whale}}.
A swarm of fish approach.
In the background, you hear a faint whale song.
oooooOOOOOOOOooooooo
Mmmmmm. That was delicious.
You have eaten {{sketch.fishEaten}} fish.
Uh-oh.
One of the fish you ate was a poisonous puffer fish.
You start to feel dizzy.
You arrive at the surface and spout water through your blowhole.
People in a boat see you and wave.
You feel much better.
The whale song grows louder.
ooooooooOOOOOOOOooooooo
The whale song grows even louder.
ooooooooOOOOOOOOoooooooOOOOOOOOoooooooooo
The whale song grows louder still.
ooooooooOOOOOOOOoooooooOOOOOOOOooooooooooOOOOOOOOoooooooooo
The sun has set. The ocean turns dark.
You are somewhat lost and no longer hear the song.
It is now morning.
Another whale hears your whale song!!
You approach the other whale.
"Hi!", says the other whale.
"Would you like to follow me to a secret underwater garden?"
The other whale approaches.
"Hi!", says the other whale.
"Would you like to follow me to a secret underwater garden?"
Together, you frolick in the garden.
THE END
This is an example of an interactive narrative.
You can find the source code here.
To remix:
Download the code and run it on your own computer.
Modify the story
Change the animations
Publish your own story
This work is released into the public domain, so you can do what you like with it, and use it however you want.
Have fun!


SkopeRules¶
The documentation of the SkopeRules module.
-
class
skrules.skope_rules.
SkopeRules
(feature_names=None, precision_min=0.5, recall_min=0.01, n_estimators=10, max_samples=0.8, max_samples_features=1.0, bootstrap=False, bootstrap_features=False, max_depth=3, max_depth_duplication=None, max_features=1.0, min_samples_split=2, n_jobs=1, random_state=None, verbose=0)[source]¶ An easy-interpretable classifier optimizing simple logical rules.
Parameters: - feature_names : list of str, optional
The names of each feature to be used for returning rules in string format.
- precision_min : float, optional (default=0.5)
The minimal precision of a rule to be selected.
- recall_min : float, optional (default=0.01)
The minimal recall of a rule to be selected.
- n_estimators : int, optional (default=10)
The number of base estimators (rules) to use for prediction. More are built before selection. All are available in the estimators_ attribute.
- max_samples : int or float, optional (default=.8)
The number of samples to draw from X to train each decision tree, from which rules are generated and selected.
- If int, then draw max_samples samples.
- If float, then draw max_samples * X.shape[0] samples.
If max_samples is larger than the number of samples provided, all samples will be used for all trees (no sampling).
- max_samples_features : int or float, optional (default=1.0)
The number of features to draw from X to train each decision tree, from which rules are generated and selected.
- If int, then draw max_features features.
- If float, then draw max_features * X.shape[1] features.
- bootstrap : boolean, optional (default=False)
Whether samples are drawn with replacement.
- bootstrap_features : boolean, optional (default=False)
Whether features are drawn with replacement.
- max_depth : integer or List or None, optional (default=3)
The maximum depth of the decision trees. If None, then nodes are expanded until all leaves are pure or until all leaves contain less than min_samples_split samples. If an iterable is passed, you will train n_estimators for each tree depth. It allows you to create and compare rules of different length.
- max_depth_duplication : integer, optional (default=None)
The maximum depth of the decision tree for rule deduplication, if None then no deduplication occurs.
- max_features : int, float, string or None, optional (default=”auto”)
The number of features considered (by each decision tree) when looking for the best split:
- If int, then consider max_features features at each split.
- If float, then max_features is a percentage and int(max_features * n_features) features are considered at each split.
- If “auto”, then max_features=sqrt(n_features).
- If “sqrt”, then max_features=sqrt(n_features) (same as “auto”).
- If “log2”, then max_features=log2(n_features).
- If None, then max_features=n_features.
Note: the search for a split does not stop until at least one valid partition of the node samples is found, even if it requires to effectively inspect more than
max_features
features.- min_samples_split : int, float, optional (default=2)
The minimum number of samples required to split an internal node for each decision tree.
- If int, then consider min_samples_split as the minimum number.
- If float, then min_samples_split is a percentage and ceil(min_samples_split * n_samples) are the minimum number of samples for each split.
- n_jobs : integer, optional (default=1)
The number of jobs to run in parallel for both fit and predict. If -1, then the number of jobs is set to the number of cores.
- random_state : int, RandomState instance or None, optional
- If int, random_state is the seed used by the random number generator.
- If RandomState instance, random_state is the random number generator.
- If None, the random number generator is the RandomState instance used
by np.random.
- verbose : int, optional (default=0)
Controls the verbosity of the tree building process.
Attributes: - rules_ : dict of tuples (rule, precision, recall, nb).
The collection of n_estimators rules used in the
predict
method. The rules are generated by fitted sub-estimators (decision trees). Each rule satisfies recall_min and precision_min conditions. The selection is done according to OOB precisions.- estimators_ : list of DecisionTreeClassifier
The collection of fitted sub-estimators used to generate candidate rules.
- estimators_samples_ : list of arrays
The subset of drawn samples (i.e., the in-bag samples) for each base estimator.
- estimators_features_ : list of arrays
The subset of drawn features for each base estimator.
- max_samples_ : integer
The actual number of samples
- n_features_ : integer
The number of features when
fit
is performed.- classes_ : array, shape (n_classes,)
The classes labels.
Methods
decision_function
(X)Average anomaly score of X of the base classifiers (rules). fit
(X, y[, sample_weight])Fit the model according to the given training data. get_params
([deep])Get parameters for this estimator. predict
(X)Predict if a particular sample is an outlier or not. predict_top_rules
(X, n_rules)Predict if a particular sample is an outlier or not, using the n_rules most performing rules. rules_vote
(X)Score representing a vote of the base classifiers (rules). score_top_rules
(X)Score representing an ordering between the base classifiers (rules). set_params
(**params)Set the parameters of this estimator. deduplicate f1_score -
decision_function
(X)[source]¶ Average anomaly score of X of the base classifiers (rules).
The anomaly score of an input sample is computed as the weighted sum of the binary rules outputs, the weight being the respective precision of each rule.
Parameters: - X : array-like, shape (n_samples, n_features)
The training input samples.
Returns: - scores : array, shape (n_samples,)
The anomaly score of the input samples. The higher, the more abnormal. Positive scores represent outliers, null scores represent inliers.
-
fit
(X, y, sample_weight=None)[source]¶ Fit the model according to the given training data.
Parameters: - X : array-like, shape (n_samples, n_features)
Training vector, where n_samples is the number of samples and n_features is the number of features.
- y : array-like, shape (n_samples,)
Target vector relative to X. Has to follow the convention 0 for normal data, 1 for anomalies.
- sample_weight : array-like, shape (n_samples,) optional
Array of weights that are assigned to individual samples, typically the amount in case of transactions data. Used to grow regression trees producing further rules to be tested. If not provided, then each sample is given unit weight.
Returns: - self : object
Returns self.
-
predict
(X)[source]¶ Predict if a particular sample is an outlier or not.
Parameters: - X : array-like, shape (n_samples, n_features)
The input samples. Internally, it will be converted to
dtype=np.float32
Returns: - is_outlier : array, shape (n_samples,)
For each observations, tells whether or not (1 or 0) it should be considered as an outlier according to the selected rules.
-
predict_top_rules
(X, n_rules)[source]¶ Predict if a particular sample is an outlier or not, using the n_rules most performing rules.
Parameters: - X : array-like, shape (n_samples, n_features)
The input samples. Internally, it will be converted to
dtype=np.float32
- n_rules : int
The number of rules used for the prediction. If one of the n_rules most performing rules is activated, the prediction is equal to 1.
Returns: - is_outlier : array, shape (n_samples,)
For each observations, tells whether or not (1 or 0) it should be considered as an outlier according to the selected rules.
-
rules_vote
(X)[source]¶ Score representing a vote of the base classifiers (rules).
The score of an input sample is computed as the sum of the binary rules outputs: a score of k means than k rules have voted positively.
Parameters: - X : array-like, shape (n_samples, n_features)
The training input samples.
Returns: - scores : array, shape (n_samples,)
The score of the input samples. The higher, the more abnormal. Positive scores represent outliers, null scores represent inliers.
-
score_top_rules
(X)[source]¶ Score representing an ordering between the base classifiers (rules).
The score is high when the instance is detected by a performing rule. If there are n rules, ordered by increasing OOB precision, a score of k means than the kth rule has voted positively, but not the (k-1) first rules.
Parameters: - X : array-like, shape (n_samples, n_features)
The training input samples.
Returns: - scores : array, shape (n_samples,)
The score of the input samples. Positive scores represent outliers, null scores represent inliers.


WITNESS LIST Public School Finance, Select Committee September 10, 2003 -10:00A Public School Finance ON: Burbach, Edward (Office of the Attorney General), Austin, TX Casey, Daniel (Moak, Casey & Associates, LLP), Austin, TX Clark, Catherine (Texas Association of School Boards), Austin, TX Dover, Merle (Office of the Attorney General), Austin, TX Moak, Lynn (Moak, Casey & Associates, LLP), Austin, TX Smith, Terry (ESC-Region 20), San Antonio, TX Stavinoha, Larry (Fort Sam Houston ISD), Poth, TX Thompson, David (Self), Houston, TX Wisnoski, Joe (Texas Education Agency), Austin, TX


| About Dailyrotten |
|
Feedback
If you like this page, hate it, or would like to suggest changes,
<EMAIL_ADDRESS>is listening. This page
is experimental and somewhat different from what we usually offer, so please
do send your feedback.
Adding Stories
If you are a rotten newshound and you would like to suggest a story,
visit our submit page to
send us the URL. Stories that are accepted will have your name credited.
Posting Comments
In order to post comments to stories, you will have to
create an account.
Accounts will generally be validated within 24 hours, and of
course will be disabled if there is abuse.
Viewership
On the first full day this page went live, 100,000 people visited this Rotten
News page. Of course that was the day after the WTC attacks, so that number is
somewhat distorted. Right now this page gets between 50,000 and 75,000 people
every day.
Linking
We encourage everyone to link to this page; if you like it, others probably
will as well.
Other Rotten
Rotten
Gaping Maw
Celebrity Morgue
Mugshots
Rotten Store
Rate My Poo
Rate My Kitten
Rate My Finger
Penny Postcards
Phallic
Boners
Home
Make Dailyrotten your start page
|
|
|
May 26, 2002
Bono, O'Neill tour catches scent of marijuana
Yahoo! India | Submitted by: John
"As Irish rocker Bono and U.S. Treasury Secretary Paul O'Neill toured a
huge Ford Motor Co. plant near Pretoria on Friday, the pungent odour of
marijuana smoke attracted the attention of some of their entourage...
The Ford official said the practice was not unusual at a huge industrial
plant and indicated there was some tolerance as long as safety
was not jeopardised."
|
|
Read article...
|
|
Dog eaters threaten to kill Brigitte Bardot
Reuters | Submitted by: ian m.
The Latest in the South Korean dog-eating saga: "French actress turned
animal rights activist Brigitte Bardot said Saturday she had been sent
thousands of death threats for criticizing the South Korean practice of
eating dog... "I have received 7,000 death threats... they are furious
with me for my criticism and have said, 'this is our traditional culture,"
Bardot told a news conference"
|
|
Read article...
|
|
Over the bridge for a cellphone
Electric New Paper | Submitted by: anonymous
"A man fell off an aerobridge at Changi Airport yesterday, because of
a lost-and-found handphone. The 19-year-old Chinese national is lucky to
be alive after falling almost 9m at Changi Airport's Terminal 2 early
yesterday morning. The passenger suffered leg and head injuries in the
three storey drop onto the tarmac."

"A painting of David Bowie throwing up. That's one of 70 paintings Paul
McCartney is displaying at an art gallery in Liverpool, England.
It has the appropriate title of Bowie Spewing."
|
|
Read article...
|
|
How to 0wn the Internet in your spare time
ICIR | Submitted by: Soylent
"The ability of attackers to rapidly gain control of vast numbers of Internet
hosts poses an immense risk to the overall security of the Internet. Once
subverted, these hosts can not only be used to launch massive denial of service
floods, but also to steal or corrupt great quantities of sensitive information,
and confuse and disrupt use of the network in more subtle ways.
We present an analysis of the magnitude of the threat..."
|
|
Read article...
|
|
Clinton gets $250K for bumbling speech
Guardian | Submitted by: Soylent
"Asked to predict the outcome of the Middle East crisis, Mr Clinton smiled
ingenuously and confessed: "I don't know, I really don't know." The entire
audience, which included the mayor of Guangzhou and 300 invited foreign and
Chinese guests, burst out laughing."
|
|
Read article...
|
|
|
|
|


TDI offers certification programs that revolve around artificial intelligence, blockchain, cryptography, and data science. All programs at TDI are formed around the theme of five levels, or the “Five Levels of ABCD”.
TRAIN: learn the fundamentals
Students are taught from fundamental first principles to the latest cutting-edge techniques and technologies through sets of richly-interactive on-demand and in-class courses, instructed by certified trainers.


📚 What I'm reading right now.
ux | website + events | capstone
ux + code | website | co-op
ux | app | @publicis sapient
ux | app | classwork
ux | website | hackathon
typography | print | classwork
ux | website | classwork
code | github | classwork
ux + code | app | classwork
code | website | classwork


Home
Statistics
Contact
Blog
Education For All
Everyone deserves an education
Education is the most powerful weapon which you can use to change the world
-Nelson Mandela
Our Logo
The Facts
1 in 5 children around the world don't attend school.
50% of out school children of primary school age live in conflict affected areas and can't attend school.
Over 150 million children aged 3-5 around the world don’t attend preschool.
Over 500,000 computers work fine, but don't get used by schools who destroy them instead of being sent to schools that are less fortunate.
Our Team
Christian Boodram
Najee Abdullah-Smith
Massimo Marino
Brianna Boodram
How you can help
Visit our slideshow presentation to learn more about our cause and how you can help
Click Here!


Book is a window
to the world
Photo by Mark Pan4ratte on Unsplash
Login
Welcome Back, Please Login to your Account
Register
Welcome! Please Register to your Account
Forgot Password
Forgot your password? Don't worry, we got you covered.
By signing up, you agree to Book’s
Terms and Conditions & Privacy Policy


‘The Index Of The Volume Of Speculation’ Is Rolling Over
“Even the most circumspect friend of the market would concede that the volume of brokers’ loans—of loans collateraled by the securities purchased on margin—is a good index of the volume of speculation.” -John Kenneth Galbraith, The Great Crash 1929
The “index of the volume of speculation,” as Galbraith called it, last year hit a high not seen at any point since prior to the Great Crash of 1929. And, while the S&P 500 recently hit new highs, margin debt relative to GDP recently fell below its lows from late last year. This suggests that investor risk appetites, after soaring to a euphoric extreme in 2018, are simply not supportive of stock prices in a broad sense in 2019.
What’s more, over the past 20 years, with the exception of the 2016 episode, when margin debt has begun to fall from such lofty levels it has coincided with a major market peak in stocks. Indeed, along with margin debt, the NYSE Composite, Russell 2000 and the Dow Transportation Average all remain below their 2018 highs. Investors chasing the new highs in the S&P 500 clearly believe, “this time is different.”


Define your preferences
Notify on upvotes:
Notify on comments:
Notify on mentions:
Notify on new follower:
Notify on resteem:
Notifications to store:
Sound notification:
Sound preference:
Tick
Tock
Save


21
1 Yahweh gave me another message. He said,
2 "Son of man, turn toward the south. Set yourself against them.   I will get rid of everyone, from the south to the north.
5 Then everyone will know that it is as though I, Yahweh, have struck people with my sword, and I will not put it back in its sheath again.'
6 Therefore, Son of man, groan! Groan in front of the Israelite people very sadly and sorrowfully.
7 And when they ask you, 'Why are you groaning?' tell them that it is because of the news that they soon will hear. Everyone will be very fearful, and their hands will tremble uncontrollably, while their knees become as weak as water. A great disaster will soon occur. This is what Yahweh the Lord is promising."
8 Yahweh gave me another message. He said,
9 "Son of man, prophesy and say to them, 'This is what the Lord says:
I will sharpen my sword
and polish it.
10 It will be sharp in order that I can slaughter many people with it;
I will polish it so that it will flash like lightning.
The people of Judah will not celebrate about their king's scepter,
because it will not resist the sword that is coming against it.
11 So I will polish the sword,
and the right person will then hold it in his hand.
Now it is sharp; now it shines,
ready for the killer to use!
12 So, Son of man, cry and wail,
because I will use my sword to kill my people,
including the leaders of Israel.

That is what I, Yahweh the Lord, say.
14 So, Son of man, prophesy;
clap your hands to show that you are very sad about what is going to happen.
My sword will strike my people again and again;
it is a sword for slaughtering many people,
while I attack them from every side.
15 In order that people will be very much afraid
and that many people will die,
I have placed soldiers at every city gate,
ready to slaughter people.
My sword will flash like lightning,
as the soldiers slaughter the people.
16 I will tell my sword to slash to the right
and then to the left,
and to turn in every direction until no one remains alive.
17 Then I will clap my hands triumphantly;
and then I will no longer be angry.
That will surely happen because I, Yahweh, have said it.' "
18 Yahweh gave me another message. He said,
19 "Son of man, draw on a map two roads for the king of Babylonia to march on with his army. When they depart from their own country, they will come to a signpost where a single road divides into those two roads.
20 If they take one of those roads, they will attack the city of Rabbah, the capital of the Ammon people group. If they take the other road, they will come to Judah and Jerusalem, a city with walls around it.
21 When the army of Babylon comes to where the road divides, the army will stop, while the king performs magic rituals to decide which road to go on. He will throw arrows; then he will consult his idols about which road to go on, and he will examine the liver of a sheep.
22 With his right hand he will pick up the arrow marked with the name of Jerusalem. He will then command his soldiers to go to Jerusalem. When they arrive there, they will set up rams to batter down the walls, and then the king will give the command for them to slaughter the people. They will shout the battlecry, and they will set up the rams against the city gates. They will build a dirt ramp against the the walls around the city, and set walls against the city.
23 The people in Jerusalem who had promised to be loyal to the king of Babylonia will think that those magic rituals must be wrong. They will think that his army should not be attacking them. But he will remind them of the disloyalty of which they are guilty, and he will say that they have violated their agreement with him.
24 Therefore, tell the Israelite people that this is what Yahweh the Lord says: 'You people have allowed everyone to see that you are openly rebelling against the king of Babylonia, and by doing that you have shown that everything that you do is sinful.  It is the time for Yahweh to punish you.'
26 And this is what I, Yahweh the Lord, say to you about your king in Jerusalem, 'Take off the king's turban and his crown, because now things will be different than they were before. I will give power to those who had none, and I will disgrace those who had power.
27 I will cause the Babylonians to destroy everything. No one will be king of Judah again, not until the man comes who deserves to be king. Then I will make him become king.'
28 And, Son of man, prophesy and say that this is what I, Yahweh the Lord, say about the Ammon people group, and about how I will disgrace them:
The king of Babylon will say,
'My soldiers have swords;
they have pulled out those swords to slaughter many people.

So swords will strike the necks
of those wicked people;
it is time for my soldier to kill them;
it is the day when I will punish them because they have not been loyal to me.'
30 But later the soldiers of Babylon will have to put their swords back into their sheaths,
because the time for them to slaughter their enemies will end.
I will judge these Babylonians in the country where they were born.
31 I will pour out my punishment on them.

I will allow brutal men to capture them,
men who are experts at killing people.
32 They will be like fuel that is burned in a fire.
Their blood will flow in their own land.
No one will remember them anymore.
That will surely happen because I, Yahweh, have said it."


Preparation time
30 mins to 1 hour
Cooking time
30 mins to 1 hour
Serves
Makes 40
First, make the spiced yoghurt. Combine all the yoghurt ingredients in a large bowl. Leave for an hour to allow the flavours to develop.
For the lamb koftas, soak the bulgar wheat in cold water for 30 minutes. Drain and squeeze dry.
Heat half the olive oil in a frying pan, then add the chilli, onion, ground coriander and ground cumin and cook on a low heat for 15 minutes. Allow to cool.
Place the lamb in a food processor along with the egg and the cooled onion mixture. Blend until the mixture has the consistency of a smooth paste.
Remove the lamb mixture and place in a bowl. Add the bulgar wheat along with the pine kernels and the chopped mint and parsley.
Wet your hands and shape 1 tsp of the mixture into a small log-shaped koftas. Repeat with the remaining mixture.
Heat remaining one tablespoon olive oil in a frying pan, then add the koftas in batches, turning regularly until brown and cooked through. This should take approximately 10 minutes.
When cooked, drain the koftas on absorbent kitchen paper and keep warm in the oven.
Serve with spiced yoghurt dip and salad leaves.


{{address.receiving_name}}
{{address.phone_number}}
{{address.address_region+' '+address.address_region}}
张川的总店
{{item.describe}}
购买数量
提交订单


WITNESS LIST Transportation Committee April 20, 1999-3:00P HB 89 For: Skeen, Buddy (Self and Tax Assessor Collector Association of Texas) Registering, but not testifying: For: Burson, Janelle (Self and Tax Assessor-Collectors Association of Texas) Garrett, Rovin (Self and Tax Assessor-Collectors Association of Texas) Gradel, Gary (Self) Keller, Dorothy (Tax Assessor-Collectors Association of Texas) Roe, Kristeen (Self and Tax Assessor-Collectors Association of Texas) Winn, Buddy (Self and Tax Assessor Collectors Association) On: Hunt, Darrel (Texas Department of Transportation) HB 1032 For: Elfant, Bruce (Self) Laux, Lauren (Self) On: Geyer, Bob (Self) Registering, but not testifying: For: Albrecht, Joel (Self and Texas Parking Association) Garrett, Rovin (Self and Tax Assessor-Collectors Association of Texas) Waldrop, Jr., Kent (Self and National Paralysis Foundation and Texas Rehabilitation Commission) On: Hunt, Darrel (Texas Department of Transportation) HB 1070 For: Palmquist, Michael (Self and Texas Coalition of Veterans Organizations) Against: Albrecht, Joel (Self and Texas Parking Association) Geyer, Bob (Self) Registering, but not testifying: For: McLemore, William (Texas Coalition of State Veterans Organizations) On: Green, Billy (Texas Veterans Commission) Hunt, Darrel (Texas Department of Transportation) HB 1659 For: Albrecht, Joel (Self and Texas Parking Association) Against: Geyer, Bob (Self) On: Brown, Martha (Texas Tech University) Registering, but not testifying: Against: Murgia, Sandra (Coalition of Texans with Disabilties) HB 1943 On: Winstead, Pete (Texas Turnpike Authority) Registering, but not testifying: On: Griffin, James (Texas Turnpike Authority) Russell, Phillip (Texas Turnpike Authority) HB 2149 On: Bohuslav, Thomas (Texas Department of Transportation) HB 2207 For: Davis, Ruben (Self) Registering, but not testifying: For: Allison, Jim (County Judges & Commisioners Association of Texas) Drones, Paster (Self and Ridgegate Community Improvement Association) Lee, Donald (Texas Conference of Urban Counties) Miller, Jaqueline (Self) Patterson, James (Self) Richard, Jim (Self) HB 2311 On: Russell, Phillip (Self and Texas Department of Transportation/Texas Turnpike Authority) Registering, but not testifying: On: Griffin, James (Texas Turnpike Authority) Winstead, Pete (Texas Turnpike Authority) HB 2679 For: Allison, Jim (County Judges & Commissioners Association of Texas) Davis, Jimmy (Self and Panola County Texas Commissioners Court) Miller, Darryl (Self and I.E. Miller/Fowler Trucking) Sims, Randy (Self and County Judges & Commissioners Association of Texas) Sullivan, Patty (Self and Rusk County Commissioner's Court) Against: Currie, Bob (Texas Logging Council) Dructor, Daniel (Self and BMP Logging Inc.) Gearheart, James (Scurlock Permian LLC) Hufford, Ron (Texas Forestry Association) Key, Robert (Self and Associations of Energy Service Companies) Webb, Bill (Texas Motor Transportation Association) On: Heald, Wes (Texas of Department of Transportation) Registering, but not testifying: For: Armstrong, Betty (Navarro County Commissioners Court & County Judges & Commissioners of Texas) Chaffin, Joe (Self) Hale, Bill (Self) Hodges, Sandra (Self and Rusk County) Howell, Harold (Self) La Grone, Ronnie (Self and Panola County) Lee, Donald (Texas Conference of Urban Counties) Villareal, Tony (West Texas Judges & Commissioners Association) Against: Blankenship, Margia (Marathon Oil Company) Dingmore, Lindsay (Texas Independent Producers and Royalty Owners (TIPRO)) King, Joyce (Self) Stewart, Michael (Texas Aggregates & Concrete Association) SB 60 For: Donaldson, Janet (Self) Floyd, M.D., Gary (Cook Children's Medical Center) Merrifield, John (Self) Taylor, Gary (National Highway Traffic Safety Administration) Registering, but not testifying: For: Berger, Ed (Seton Healthcare Network) Berlanga, Hugo (Driscoll Childrens Hospital and Christus Health System) Feather, Robert (Cook Children's Health Care System and Children's Hospital Association of Texas) Gilchrist, Alfred (Texas Medical Association and Texas Pediatric Society) Hooser, Greg (Scott & White Hospital & Clinic) Miller, Karen (Self and Texas Congress of Parents and Teachers) On: Lopez, Carlos (Texas Department of Transportation)