The Watcher
When most critics describe a movie as being "by the books" or "follows all the rules" they usually mean it in a derogatory way. I was thinking of using one of those kinds of phrases to review "The Watcher." After all, it is a big budget Hollywood serial killer flick with marquee names, but that doesn't make it a bad movie. Sophomoric maybe, but definitely not bad.
Serial killer movies are a big box office draw but they're not exactly the easiest films to make, or make well at least. You need a hero you can really stand behind but one with some kind of personal weakness or character flaw so that they're not invincible. You also need a nasty killer who has a sick style in the way he operates. The better criminal he is, the more we want him caught.
A good screenplay and tight direction are also needed to bring it all together and make it work. You want a story that's complex but not so intricate that it's confusing, and you need good direction to keep the pace moving for consistent suspense.
"The Watcher" does a fair job in balancing these components, walking a fine line between making just another formula movie and making a GOOD formula movie.
Our hero and villain are played by James Spader and Keanu Reeves, respectively. The setting is Chicago and Spader's a pill-popping burned-out FBI agent with constant flashbacks to his days tracking a serial killer when he lived in Los Angeles. He visits a psychiatrist twice a week to help deal with his guilty conscience of his failure to catch the killer. He's the classic obsessed hero but he's also a hobbled one as we see the mess his life currently is. He can't seem to get his act together and is so strung out on medication it's like he's an escapee from the ICU. His introductory scenes are intercut with surreal flashbacks to that time he almost got the bad guy. It's a good way to keep the film energized but it's a little more than necessary. Spader's character is basically an exaggerated version of Fox Mulder from "The X-Files."
Reeves plays the killer, a man who has a penchant for stalking women without them knowing it and learning their every move and daily routine. He waits for them in their homes and strangles them with piano wire but not after spending some "quality time" with them. We never get a motive or even a clue as to what turned him into the sickie he is. He's a really charming, handsome man who appears to have some money and isn't a drug-addled vagrant or anything. If he's lonely he should just go to a bar because the women would be all over him. Many critics say Reeves and Spader should have switched roles, I agree, it would have been much more effective. So the film does a fairly good job in establishing an insecure, weak good guy vs. a cocky, vain bad guy. But can it string them through a good story?
For the most part yes, except for the fact that there is barely a story. It's mostly just thriller filler, but it works well. As you may have seen from the commercials and trailers Reeves tells Spader he'll send him a picture of his next victim and he can have 24 hours to find her. Whenever a serial killer gives the authorities an inkling of a clue, especially on purpose, it creates for great tension and "The Watcher" takes advantage of this situation. The second act of the film picks up the pace quickly and keeps the going and going. Kind of like a Jerry Bruckheimer movie but instead of explosions and chase scenes it's police work (hey wait a second, there ARE a few explosions and chase scenes!).
If you're a cop in a city with several million people and you know one of them is going to be killed how to you prevent it from happening? Even with the photograph of the victim and the help of the media and officers handing out flyers all over the city would it still be possible in this day and age for a person to be essentially invisible among thousands of other people? The answer we get here is a clear "yes" and that's what gives "The Watcher" so much energy and intrigue through most of its running time. The teamwork the Ch icago Police and the FBI do to avert this crime is pretty amazing and the film doesn't take shortcuts around the detective work either. How DO you find a needle in a haystack? The killer knows you don't but the hero has to believe you can with a lot of hard work and a little bit of luck.
I shouldn't even analyze or discuss the ending. I mean this is a formula serial killer flick, how else can it end? Is it suspenseful? Sort of. Is justice served? Yes, but it's not as satisfying as you'd think. Is it cheesy? On paper it would be, seeing it on the big screen it's not.
You can take "The Watcher" at face value and enjoy the ride or be more cynical and see it for what it really is. Either way you'll agree it's decent but neither terrible nor terrific.
GRADE: B-
You can also read this review at: http://www.epinions.com/mvie-review-4B11-4923A6B-39D29B39-prod1 And other reviews on the same topic at: http://www.epinions.com/mvie Check out my profile page at: http://www.epinions.com/user-chad9976
***** Chad'z Movie Page is back! In-depth reviews of nearly all mainstream films playing at your local cineplex. There's also reviews of a few classic films and some of your personal favorites.
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


Dr. Chaos' Secret Bookshelf:
A cluttered array of books and documents litter the bookshelf. A trace of something burned lingers in the air.


5 years from now, I started to become obsessed by the idea of organizing a Salsa congress in the very heart of Paris.
In my humble opinion, Paris is where History, Art, Culture, Architecture and of course Dance meet in the most harmonious and natural way. Anyone who has visited Paris knows that this city never stops surprising by her unique beauty and her charm.
The concept matured in my mind years after years and I can’t recall the number of times I talked about it with my dear salsa buddies who will surely recognize themselves.
To me, not having our own major salsa congress where French and international salseros would meet to dance together on the same dance floor every year was simply not acceptable, and I was thinking like CRAZY how to make it happen..
Now PISC is finally becoming a reality and I feel so happy and so excited about it!
Being a Salsa performer and teacher for more than 15 years, I had and I still have now the privilege to travel to many countries and to create strong bounds with amazing people from the salsa and kizomba world. We are all part of a big family and I am already so grateful to all my dancer friends who responded so quickly and positively to my call, and also for the huge enthusiasm everyone is showing after hearing the news.
Of course, this project cannot be put together alone. I am very lucky to have together with me a trustful and talented team of Salsa addicts who put all their heart and passion to help me in this adventure.
Some of you might know that in “my previous life” I have been practicing intensively a Martial Art called Karate-do. Karate is all about humility, selflessness, honesty and perseverance and I wish to commit here to everyone that my team and I, driven by those key values, will do everything in our power to make sure you have the most amazing experience at the first edition of the PISC.
This congress is not possible without you, we need you, we need your support that is why it is not about me, but “About us”.
I can’t wait for the Congress to start to welcome you all my friends.
Mouaze Konaté
Salsa, chachacha instructor, performer & choreographer
Organizer of Paris International Salsa Congress
Mouaze Konaté
Cf. artist section
Mouaze is a fundamental element in the organisation of the Paris International Salsa Congress. Demanding, he sets the ambition to make Paris a recognized reference within the salsa congress community. He is also the light that motivates and guides the PISC organisation team.
Last of all, he brings his sense of detail and esthetic on several areas, from artist management to communication.
ELEONORA JAUK
Cf. artist section
Ella is definitely a multi-tasking machine within the PISC organisation.
From artist booking, to ticket management, to workshop planning, she makes sure that there is no gap in the preparation of this event which will gather dancers from the 5 continents.
Freddy Bellon
Native from Reunion Island , Freddy moved to Paris when he was 18. He discovered salsa in 2007 and decided to take it to the next level after watching Terry & Cecile perform one of their early shows but his encounter with Mouaze was the real revelation. Since he joined Mouaze School 5 years ago, first as a student then as a dancer and now a teacher, his passion for On2 New York style salsa never stopped.
Former consultant now working in finance, Freddy puts his finance and project management skills at the service of the PISC. He is in charge of sales, treasury as well as the global project oversight.
Wafa Abdelmoula
Born in Tunis, Wafa joins the National Ballet of Tunis at the age of 5. She will dance there for 8 years, following a very diverse training in classical, contemporary and oriental.
In Paris since 2010, Wafa continues her dance training in Hip Hop, Ragga Dancehall and salsa. She is lucky enough to learn alongside world famous teachers such as the Maestro Mouaze Konaté
Thanks to her skills in project management, in communication and her passion for dancing, Wafa joined the adventure and is in charge of the Communication department.
Fanny Frosini
Cf. artist section
Originally in charge of the Mouaze School Newsletter, Fanny is in charge of all physical and virtual promotion for the PISC. She works alongside Wafa for the Communication department
Muriel Dimiccoli
French with an Italian flavor, Muriel loves to be on stage!
She began learning salsa at the end of her studies and chose to perfect her technique at the Mouaze School, under Mouaze and Ella's guidance, where she rapidly becomes part of the Mouaze Dancers dance team in 2013.
She has had the opportunity to perform several times in France and abroad with the team: Paris, Bordeaux, Copenhagen, Rabat, Pisa...
A former management consultant now in charge of Client Relationship Management in the consumer goods industry, Muriel puts her skills in human resources management at the service of the PISC.
She is in charge of managing our team of helpful volunteers who will do everything to make this congress an unforgettable experience for you.
Eleonor Morales
Born in the Balearic islands, Léo grew up in Paris and took classical and modern jazz lessons before discovering the salsa world.
In 2009, she falls in love with the NY Style, first with Sève, then with Mouaze who will become her mentor.
In Parallel, she recently started to learn the lift and tricks technique linked to accro yoga practice and also developed a liking for the samba rythms.
Expert in the organisation of tailor made trips, Léo is in charge of the artists from arrival to departure. She is our Artist relationship coordinator.
Yoann Dambrun
Discreet but with a knack for the stage, Yoann entered the world of salsa in 2005. He started to learn cuban style in Rennes when he was still a student and keeps practicing the On2 style in Paris under Mouaze Konaté's guidance today. Portoricans rythms delight him, make him stamp his feet, shake his head until body and mind exult... on the dancefloor!
Yoann brings his practical mind to the team in charge of organizing the congress. Amongst other things, he is in charge of organizing and preparing the congress center. He will make sure that each and everyone of you are welcomed in the best conditions for a memorable experience.
Julien Sarton
Julien has been dancing Hip Hop and salsa for 12 years now. He trained himself at the Mouaze School for 3 years before leaving for new adventures in Argentina where he got inspired by new influences, among which Rumba and Afro Cuban.
Back in Paris since 2014, he keeps learning alongside the best salsa teachers, amongst which the famous Mouaze Konaté.
Julien puts his entrepreneurial spirit (he is the founder of Fit Factory, a sport marketing agency) and his talent as event organizer at the service of the PISC. Amongst other things, he works for the Corporate Sponsorship department.
Stéphane Coué
Native from the west indies, Stéphane is a dance addict since 2003. Cuban salsa, then tango for 6 years, he has since then become a mambo enthusiast. Living in Paris for 2 years now, he is one of the soldier of the Mouaze School where he keeps learning and developping his technique ("Again and Again"). In parallel, he discovered Afro Cuban, which makes him think that he still has a long way to go before mastering all these different rythms.
Specialised in the new information and communication technologies, Stéphane put his IT skills at the service of the congress. He works for the Web and Digital department.
Yannick
Yannick started learning portorican salsa in 2009 in Lille. He picked interest in the NY style after attending the Antwerp Diamond Salsa Congress where had the opportunity to attend a workshop with the Maestro Mouaze Konaté. Thanks to a career opportunity he moves to Paris in 2012 and starts taking classes at Mouaze School in order to learn the style that inspired him so. He was honored to join the Mouaze dancers in 2014.
Yannick is the handyman of the PISC organisation. He brings his support in all urgent matters and helps us promote the PISC in all the parisian parties.


My name is Laura. I was born in 20th July in 1996. I live in Atyrau, Kazakhstan. My parents are engineers at oil and gas company TCO.
My mother says, that I used to be very powerful child. Even we walk to somwhere, I used to jump or run, or talk everytime :). Father dreamt about sending me to England to study, and he started preparing me from 2 years. I learnt how to count in English and knew the alphabet as well.
After all, I went to the pre-school academy, where I met my friends and started preparing to the school.
Stories at school always were funny and crazy. I have studied at 3 schools. In undergraduate I have studied at school #22 (Atyrau), from 5th grade to 7th grade I have studied at KAU (Kazakh-American University) and the last, from 8th grade till highschool I have studied at lyceum #17 (Atyrau).
Since I have had many changes in society, I was stressed to get used in one place after another. It was really hard to see new faces everytime, to meet with new teachers and again-again show them my knowledge, prove that I know the material from previous grades, and simply to have a good relationship with classmates. As you know from first grade, there are grouppings from few people, where girls made their own friends. At first and second schoolswe didn't have it in our class, however, at the last school we had it. I will tell about that in my other posts ;).
My mom at 9th grade, sent me to England. It was small town named Bournamouth, I have studied at summer Kings school. I have studied there for one month. Honestly, I didn't like this town and England itself because of the weather. It was rainy all the time, what gave us sad mood, and we wanted to come back home everytime.
Next year after England, I travelled to Toronto, Canada for one month. I have been in ILAC school in the summer. Toronto was very beautiful. I visited Niagara waterfall and other places. It was amazing! After that, I have decided to study at Toronto.
After graduation from school, I was preparing my documents for Columbia College in Vancouver, Canada. (The reason why I didn't go to the Toronto's college and why I have choosen the college not university, will write in the next posts). I have studied for 2 years there by program "University Transfer". And have transfered to Kazakh-British Technical University in Almaty. Now, I study there.


Hessonite
Download
Telegram channel
Test ISOs are now being built!
Join @hessonite_win on telegram for updates!
© Amy Grace, 2021


UKCloud Limited (“UKC”) and Virtual Infrastructure Group Limited (“VIG”) (together “the Companies”) – in Compulsory Liquidation
On 25 October 2022, the Companies were placed into Liquidation with the Official Receiver appointed as Liquidator and J Robinson and A M Hudson simultaneously appointed as Special Managers to manage the liquidation process on behalf of the Official Receiver.
Further information regarding the Liquidations can be found here: https://www.gov.uk/government/news/virtual-infrastructure-group-limited-and-ukcloud-limited-information-for-creditors-and-interested-parties
Contact details:
For any general queries relating to the Liquidations please email<EMAIL_ADDRESS>For customer related queries please email<EMAIL_ADDRESS>For supplier related queries please email<EMAIL_ADDRESS>How to use the VMware OVF Tool
Overview
The VMware OVF Tool is a conversion program freely downloadable from VMware that assists in the distribution of virtual machines (VMs) and vApps, converting them between OVF, VMX and OVA formats. It also includes a command‑line facility to import and export OVF packages between environments or from third party suppliers. The OVF Tool is a command‑line interface (CLI) tool only.
OVF (Open Virtualisation Format) is a packaging standard created by leading virtualisation vendors. It is a platform independent, efficient, open packaging and distribution format for VMs.
VMX (the VM configuration file) is a simple text file with various parameters relating to the guest VM.
The OVA file extension is associated with Open Virtual Machine Format. Compared to the OVF file format, the OVA format contains all VM files and
*.ovf
files compressed into one single OVA archive file instead of many files in a folder.
Downloading the OVF Tool
You can download the OVF Tool via the following link:
https://customerconnect.vmware.com/downloads/get-download?downloadGroup=OVFTOOL443
You must have a VMware account to download the tool. You can download the OVF Tool for Windows 32-bit and 64-bit, Linux 32-bit and 64-bit, or Mac OS X.
After downloading and installing the OVF Tool, you must then go to the directory in which you installed the tool to run it. There is no icon or program logo on your desktop for the OVF Tool, so to launch it, you must use the command prompt. Go to the installation folder and run:
ovftool
Getting started with the OVF Tool
The OVF Tool is a CLI tool, so some level of familiarity with CMD commands helps in using the tool. There are a number of help commands, which are a good source of information:
ovftool --help
ovftool --help examples
ovftool --help locators
ovftool --help config
You can also find the OVF Tool User Guide at:
https://developer.vmware.com/docs/11748/ovf-tool-user-s-guide
Basic import and export commands
You'll mainly use the OVF Tool to import (deploy) and export VMs or appliances into and out of your UKCloud environment.
The basic syntax to do this using the OVF Tool is:
ovftool <source> <target>
Refer to the OVF Tool User Guide for further commands and switches.
Importing a .vmx file to a vApp template
To import a .vmx
file:
In your UKCloud environment, create a catalog to contain the vApp template.
For detailed instructions, see How to create a catalog.
Make sure you are in the correct directory, that is, the directory containing the file you want to import.
Run the following command:
ovftool --vCloudTemplate --acceptAllEulas --overwrite <filename> "vcloud://<username>@<apiURL>?org=<computeServiceID>&vappTemplate=<newTemplate>&catalog=<catalogID>"
Where:
vCloudTemplate
indicates that you're uploading a new vApp templateacceptAllEulas
indicates that you accept all end user licence agreementsoverwrite
indicates that you're replacing an existing vApp with the new one being uploadedfilename
is the name of the.vmx
file that are importingusername
is your UKCloud Portal user IDapiURL
is your Cloud Director API URL. This URL is different depending on the region in which your environment is located. For more information, see How to access VMware Cloud Director through the Cloud Director API.computeServiceID
is the ID of your UKCloud compute service (sometimes also called an org or vOrg)vappTemplate
is the ID of the vApp templatecatalogID
is the ID of the catalog in which the vApp template is located
For example:
ovftool --vCloudTemplate --acceptAllEulas --overwrite centos71.vmx "vcloud://auser@vcd.portal.skyscapecloud.com:443?org=1-2-3-a4b56c& vappTemplate=centos71&catalog=OVFTool-test"
Tip
Make sure you use double quotes (
"
) rather than single quotes ('
).The
.vmx
file is uploaded as a vApp template into your environment.In VMware Cloud Director, expand the Recent Tasks panel to check the status.
Importing an .iso file to a vApp template
To upload an ISO image:
Make sure you are in the correct directory, that is, the directory containing the ISO file you want to import.
Run the following command:
ovftool -sourceType="ISO" "<path>\<filename>.iso" "vcloud://<username>@<apiURL>?vdc=<targetVDC>&org=<computeServiceID> &media=<name>&catalog=<catalogID>"
Where:
sourceType
(orst
) indicates the type of the source file:ISO
path\filename.iso
is the full location of the source.iso
file you want to importusername
is your UKCloud Portal user IDapiURL
is your Cloud Director API URL. This URL is different depending on the region in which your environment is located. For more information, see How to access VMware Cloud Director through the Cloud Director API.targetVDC
is the VDC where you want to upload the filecomputeServiceID
is the ID of your UKCloud compute service (sometimes also called an org or vOrg)name
is the name to display for the file in VMware Cloud DirectorcatalogID
is the ID of the catalog to which you want to upload the file
For example:
ovftool -st="ISO" "C:\example.iso\" "vcloud://auser@vcd.portal.skyscapecloud.com:443?vdc=myVDC&org=1-2-3-a4b56c&media=CentOS_ISO&catalog=OVFTool-test"
Tip
Make sure you use double quotes (
"
) rather than single quotes ('
).When the
ovftool
command has finished, the source and target locations are listed and then you're prompted for your username and password. When you are authenticated, the upload process is initiated.
Feedback
If you find a problem with this article, click Improve this Doc to make the change yourself or raise an issue in GitHub. If you have an idea for how we could improve any of our services, send an email to feedback@ukcloud.com.


--- layout: post title: PowerShell Script to Download a List of Files date: 2009-03-04 20:42:17.000000000 +01:00 categories: [] tags: - PowerShell status: publish type: post published: true meta: _edit_last: '1' author: login: admin email<EMAIL_ADDRESS>display_name: Philippe first_name: Philippe last_name: Vlérick excerpt: !ruby/object:Hpricot::Doc options: {} ---
Lately I have been playing around with PowerShell. I decided that I will write scripts in order to perform some simple actions, actions that could be scripted generally are not due to the fact that writing the script takes longer than manually doing it.
So here is the first task I would like to automate: sequentially download each file in a list, the list being provided as a text file.
For this part, I simply "stole" the code from somewhere else: http://community.bartdesmet.net/blogs/bart/archive/2006/11/25/PowerShell-_2D00_-How-to-download-a-file_3F00_.aspx, plain simple, I don't think I'll be able to do better.
I was expecting this to be a bit more complicated, but it turns out to be piece of cake:
$array = Get-Content TextFile.txt
Not too much trouble.
So now we need to do make these things work together. First, read the content of the file (given as parameter) in an array, then for each item in the array get the client to download it.
Now, there is one little trick here. The WebClient.DownloadFile method's second argument is the local file. In this case, we want it to have the same file name as the source file name. Leveraging the .NET framework, System.IO.Path is the way to go.
$list = Get-Content $args
$clnt = New-Object System.Net.WebClient
foreach($url in $list)
{
#Get the filename
$filename = [System.IO.Path]::GetFileName($url)
#Create the output path
$file = [System.IO.Path]::Combine($pwd.Path, $filename)
Write-Host -NoNewline "Getting ""$url""... "
#Download the file using the WebClient
$clnt.DownloadFile($url, $file)
Write-Host "done."
}
Two remarks on of the Path class:
The script is not error proof, but it good enough for me now.
Edit: I added some Host-Write lines in order to display something in the shell. When downloading a long list of files, it is nice to see the progress.


import {MatChipsModule} from '@angular/material/chips';
MatChip
Material design styled Chip base component. Used inside the MatChipSet component.
Extended by MatChipOption and MatChipRow for different interaction patterns.
Selector: mat-basic-chip [mat-basic-chip] mat-chip [mat-chip]
Exported as: matChip| Name | Description |
|---|---|
@Input('aria-description')
|
ARIA description for the content of the chip. |
@Input('aria-label')
|
ARIA label for the content of the chip. |
@Input()
|
Theme color palette for the component. |
@Input()
|
Whether ripples are disabled. |
@Input()
|
Whether the component is disabled. |
@Input()
|
Colors the chip for emphasis as if it were selected. |
@Input()
|
A unique id for the chip. If none is supplied, it will be auto-generated. |
@Input()
|
Determines whether or not the chip displays the remove styling and emits (removed) events. |
@Input()
|
Role for the root of the chip. |
@Input()
|
The value of the chip. Defaults to the content inside
the |
@Output()
|
Emitted when the chip is destroyed. |
@Output()
|
Emitted when a chip is to be removed. |
|
The unstyled chip selector for this component. |
|
Default color to fall back to if no value is set. |
|
Tabindex to which to fall back to if no value is set. |
|
The chip's leading icon. |
|
Action receiving the primary set of user interactions. |
|
The chip's trailing remove icon. |
|
The chip's trailing icon. |
Deprecated
|
Reference to the MatRipple instance of the chip. |
| focus | |
|---|---|
|
Allows for programmatic focusing of the chip. |
| remove | |
|---|---|
|
Allows for programmatic removal of the chip. Informs any listeners of the removal request. Does not remove the chip from the DOM. |
MatChipOption
extends
MatChip
An extension of the MatChip component that supports chip selection. Used with MatChipListbox.
Unlike other chips, the user can focus on disabled chip options inside a MatChipListbox. The user cannot click disabled chips.
Selector: mat-basic-chip-option [mat-basic-chip-option] mat-chip-option [mat-chip-option]
| Name | Description |
|---|---|
@Input('aria-description')
|
ARIA description for the content of the chip. |
@Input('aria-label')
|
ARIA label for the content of the chip. |
@Input()
|
Theme color palette for the component. |
@Input()
|
Whether ripples are disabled. |
@Input()
|
Whether the component is disabled. |
@Input()
|
Colors the chip for emphasis as if it were selected. |
@Input()
|
A unique id for the chip. If none is supplied, it will be auto-generated. |
@Input()
|
Determines whether or not the chip displays the remove styling and emits (removed) events. |
@Input()
|
Role for the root of the chip. |
@Input()
|
Whether or not the chip is selectable. When a chip is not selectable, changes to its selected state are always ignored. By default an option chip is selectable, and it becomes non-selectable if its parent chip list is not selectable. |
@Input()
|
Whether the chip is selected. |
@Input()
|
The value of the chip. Defaults to the content inside
the |
@Output()
|
Emitted when the chip is destroyed. |
@Output()
|
Emitted when a chip is to be removed. |
@Output()
|
Emitted when the chip is selected or deselected. |
|
The ARIA selected applied to the chip. Conforms to WAI ARIA best practices for listbox interaction patterns. From WAI ARIA Listbox authoring practices guide: "If any options are selected, each selected option has either aria-selected or aria-checked set to true. All options that are selectable but not selected have either aria-selected or aria-checked set to false." Set |
|
The unstyled chip selector for this component. |
|
Whether the chip list is selectable. |
|
Default color to fall back to if no value is set. |
|
Tabindex to which to fall back to if no value is set. |
|
The chip's leading icon. |
|
Action receiving the primary set of user interactions. |
|
The chip's trailing remove icon. |
|
The chip's trailing icon. |
Deprecated
|
Reference to the MatRipple instance of the chip. |
| deselect | |
|---|---|
|
Deselects the chip. |
| focus | |
|---|---|
|
Allows for programmatic focusing of the chip. |
| remove | |
|---|---|
|
Allows for programmatic removal of the chip. Informs any listeners of the removal request. Does not remove the chip from the DOM. |
| select | |
|---|---|
|
Selects the chip. |
| selectViaInteraction | |
|---|---|
|
Selects this chip and emits userInputSelection event |
| toggleSelected | |
|---|---|
|
Toggles the current selected state of this chip. |
|
| Parameters | |
|
isUserInput boolean = false
|
|
| Returns | |
boolean
|
|
MatChipRow
extends
MatChip
An extension of the MatChip component used with MatChipGrid and the matChipInputFor directive.
Selector: mat-chip-row [mat-chip-row] mat-basic-chip-row [mat-basic-chip-row]
| Name | Description |
|---|---|
@Input('aria-description')
|
ARIA description for the content of the chip. |
@Input('aria-label')
|
ARIA label for the content of the chip. |
@Input()
|
Theme color palette for the component. |
@Input()
|
Whether ripples are disabled. |
@Input()
|
Whether the component is disabled. |
@Input()
|
|
@Input()
|
Colors the chip for emphasis as if it were selected. |
@Input()
|
A unique id for the chip. If none is supplied, it will be auto-generated. |
@Input()
|
Determines whether or not the chip displays the remove styling and emits (removed) events. |
@Input()
|
Role for the root of the chip. |
@Input()
|
The value of the chip. Defaults to the content inside
the |
@Output()
|
Emitted when the chip is destroyed. |
@Output()
|
Emitted when the chip is edited. |
@Output()
|
Emitted when a chip is to be removed. |
|
|
|
The projected chip edit input. |
|
Default color to fall back to if no value is set. |
|
The default chip edit input that is used if none is projected into this chip row. |
|
Tabindex to which to fall back to if no value is set. |
|
The chip's leading icon. |
|
Action receiving the primary set of user interactions. |
|
The chip's trailing remove icon. |
|
The chip's trailing icon. |
Deprecated
|
Reference to the MatRipple instance of the chip. |
| focus | |
|---|---|
|
Allows for programmatic focusing of the chip. |
| remove | |
|---|---|
|
Allows for programmatic removal of the chip. Informs any listeners of the removal request. Does not remove the chip from the DOM. |
MatChipSet
Basic container component for the MatChip component.
Extended by MatChipListbox and MatChipGrid for different interaction patterns.
Selector: mat-chip-set
| Name | Description |
|---|---|
@Input()
|
Whether the chip set is disabled. |
@Input()
|
The ARIA role applied to the chip set. |
|
Combined stream of all of the child chips' remove events. |
|
Combined stream of all of the child chips' focus events. |
|
Tabindex to which to fall back to if no value is set. |
|
Whether the chip list contains chips or not. |
|
Whether any of the chips inside of this chip-set has focus. |
| focus | |
|---|---|
|
Dummy method for subclasses to override. Base chip set cannot be focused. |
MatChipListbox
extends
MatChipSet
An extension of the MatChipSet component that supports chip selection. Used with MatChipOption chips.
Selector: mat-chip-listbox
| Name | Description |
|---|---|
@Input('aria-orientation')
|
Orientation of the chip list. |
@Input()
|
A function to compare the option values with the selected values. The first argument is a value from an option. The second is a value from the selection. A boolean should be returned. |
@Input()
|
Whether the chip set is disabled. |
@Input()
|
Whether checkmark indicator for single-selection options is hidden. |
@Input()
|
Whether the user should be allowed to select multiple chips. |
@Input()
|
Whether this chip listbox is required. |
@Input()
|
The ARIA role applied to the chip set. |
@Input()
|
Whether or not this chip listbox is selectable. When a chip listbox is not selectable, the selected states for all the chips inside the chip listbox are always ignored. |
@Input()
|
The value of the listbox, which is the combined value of the selected chips. |
@Output()
|
Event emitted when the selected chip listbox value has been changed by the user. |
|
Combined stream of all of the child chips' blur events. |
|
Combined stream of all of the child chips' remove events. |
|
Combined stream of all of the child chips' focus events. |
|
Combined stream of all of the child chips' selection change events. |
|
Tabindex to which to fall back to if no value is set. |
|
Whether the chip list contains chips or not. |
|
Whether any of the chips inside of this chip-set has focus. |
|
The array of selected chips inside the chip listbox. |
| focus | |
|---|---|
|
Focuses the first selected chip in this chip listbox, or the first non-disabled chip when there are no selected chips. |
MatChipGrid
An extension of the MatChipSet component used with MatChipRow chips and the matChipInputFor directive.
Selector: mat-chip-grid
| Name | Description |
|---|---|
@Input()
|
An object used to control when error messages are shown. |
@Input()
|
The ARIA role applied to the chip set. |
@Output()
|
Emits when the chip grid value has been changed by the user. |
|
Combined stream of all of the child chips' blur events. |
|
Combined stream of all of the child chips' remove events. |
|
Combined stream of all of the child chips' focus events. |
|
Tabindex to which to fall back to if no value is set. |
|
Whether the component is in an error state. |
|
Whether any chips or the matChipInput inside of this chip-grid has focus. |
| focus | |
|---|---|
|
Focuses the first chip in this chip grid, or the associated input when there are no eligible chips. |
| registerInput | |
|---|---|
|
Associates an HTML input element with this chip grid. |
|
| Parameters | |
|
inputElement MatChipTextControl
|
|
| updateErrorState | |
|---|---|
|
Updates the error state based on the provided error state matcher. |
MatChipInput
Directive that adds chip-specific behaviors to an input element inside <mat-form-field>
.
May be placed inside or outside of a <mat-chip-grid>
.
Selector: input[matChipInputFor]
Exported as: matChipInput, matChipInputFor| Name | Description |
|---|---|
@Input('matChipInputAddOnBlur')
|
Whether or not the chipEnd event will be emitted when the input is blurred. |
@Input('matChipInputFor')
|
Register input for chip list |
@Input()
|
Whether the input is disabled. |
@Input()
|
Unique id for the input. |
@Input()
|
The input's placeholder text. |
@Input('matChipInputSeparatorKeyCodes')
|
The list of key codes that will trigger a chipEnd event. Defaults to |
@Output('matChipInputTokenEnd')
|
Emitted when a chip is to be added. |
|
Whether the input is empty. |
|
Whether the control is focused. |
|
The native input element to which this directive is attached. |
| clear | |
|---|---|
|
Clears the input |
| focus | |
|---|---|
|
Focuses the input. |
| setDescribedByIds | |
|---|---|
| Parameters | |
|
ids string[]
|
|
MatChipAvatar
Avatar image within a chip.
Selector: mat-chip-avatar [matChipAvatar]
MatChipTrailingIcon
Non-interactive trailing icon in a chip.
Selector: mat-chip-trailing-icon [matChipTrailingIcon]
| Name | Description |
|---|---|
@Input()
|
Whether the action is disabled. |
|
Tabindex to which to fall back to if no value is set. |
|
MDC considers all trailing actions as a remove icon, but we support non-interactive trailing icons. |
| focus |
|---|
MatChipRemove
Directive to remove the parent chip when the trailing icon is clicked or when the ENTER key is pressed on it.
Recommended for use with the Material Design "cancel" icon available at https://material.io/icons/#ic_cancel.
Example:
<mat-chip>
<mat-icon matChipRemove>cancel</mat-icon>
</mat-chip>
Selector: [matChipRemove]
| Name | Description |
|---|---|
@Input()
|
Whether the action is disabled. |
@Input()
|
Whether the action is interactive. |
|
Tabindex to which to fall back to if no value is set. |
| focus |
|---|
MatChipEditInput
A directive that makes a span editable and exposes functions to modify and retrieve the element's contents.
Selector: span[matChipEditInput]
| getNativeElement | |
|---|---|
| Returns | |
HTMLElement
|
|
| getValue | |
|---|---|
| Returns | |
string
|
|
| initialize | |
|---|---|
| Parameters | |
|
initialValue string
|
|
| setValue | |
|---|---|
| Parameters | |
|
value string
|
|
MatChipSelectionChange
Event object emitted by MatChipOption when selected or deselected.
| Name | Description |
|---|---|
|
Whether the selection change was a result of a user interaction. |
|
Whether the chip that emitted the event is selected. |
|
Reference to the chip that emitted the event. |
MatChipListboxChange
Change event object that is emitted when the chip listbox value has changed.
| Name | Description |
|---|---|
|
Chip listbox that emitted the event. |
|
Value of the chip listbox when the event was emitted. |
MatChipGridChange
Change event object that is emitted when the chip grid value has changed.
| Name | Description |
|---|---|
|
Chip grid that emitted the event. |
|
Value of the chip grid when the event was emitted. |
MatChipEvent
Represents an event fired on an individual mat-chip
.
| Name | Description |
|---|---|
|
The chip the event was fired on. |
MatChipEditedEvent
Represents an event fired on an individual mat-chip
when it is edited.
| Name | Description |
|---|---|
|
The final edit value. |
MatChipInputEvent
Represents an input event on a matChipInput
.
| Name | Description |
|---|---|
|
Reference to the chip input that emitted the event. |
|
The value of the input. |
Deprecated
|
The native |
MatChipsDefaultOptions
Default options, for the chips module, that can be overridden.
| Name | Description |
|---|---|
|
Wheter icon indicators should be hidden for single-selection. |
|
The list of key codes that will trigger a chipEnd event. |
MatChipTextControl
Interface for a text control that is used to drive interaction with a mat-chip-list.
| Name | Description |
|---|---|
|
Whether the text control is empty. |
|
Whether the text control has browser focus. |
|
Unique identifier for the text control. |
|
The text control's placeholder text. |
| focus | |
|---|---|
|
Focuses the text control. |
| setDescribedByIds | |
|---|---|
|
Sets the list of ids the input is described by. |
|
| Parameters | |
|
ids string[]
|
|
MAT_CHIPS_DEFAULT_OPTIONS
Injection token to be used to override the default options for the chips module.
const MAT_CHIPS_DEFAULT_OPTIONS: InjectionToken<MatChipsDefaultOptions>;
MAT_CHIP_AVATAR
Injection token that can be used to reference instances of MatChipAvatar
. It serves as
alternative token to the actual MatChipAvatar
class which could cause unnecessary
retention of the class and its directive metadata.
const MAT_CHIP_AVATAR: InjectionToken<unknown>;
MAT_CHIP_TRAILING_ICON
Injection token that can be used to reference instances of MatChipTrailingIcon
. It serves as
alternative token to the actual MatChipTrailingIcon
class which could cause unnecessary
retention of the class and its directive metadata.
const MAT_CHIP_TRAILING_ICON: InjectionToken<unknown>;
MAT_CHIP_REMOVE
Injection token that can be used to reference instances of MatChipRemove
. It serves as
alternative token to the actual MatChipRemove
class which could cause unnecessary
retention of the class and its directive metadata.
const MAT_CHIP_REMOVE: InjectionToken<unknown>;
MAT_CHIP
Injection token used to avoid a circular dependency between the MatChip
and MatChipAction
.
const MAT_CHIP: InjectionToken<unknown>;


PersonalCurrentAccountResponse_PCAMarketingState
- CoreProduct : CoreProduct_2
- CreditInterest : CreditInterest_3
- Eligibility : Eligibility_2
- FeaturesAndBenefits : FeaturesAndBenefits_2
- FirstMarketedDate : date
Marketing state start date
- Identification : String
Unique and unambiguous identification of a Eligibility Marketing state.
- LastMarketedDate : date
Marketing state end date
- MarketingState : String
Describes the marketing state (regular or promotional) for which the eligibility criteria applies
- Enum:
- Promotional
- Regular
- Notes : List
Free text for adding details for marketing state
- OtherFeesCharges : OtherFeesCharges_2
- PredecessorID : String
Identifies the marketing state that precedes this marketing state
- StateTenureLength : Float
The length/duration of a promotional state
- StateTenurePeriod : String
The unit of period (days, weeks, months etc.) of the promotional length
- Enum:
- Day
- HalfYear
- Month
- Quarter
- Week
- AcademicTerm
- Year


--- layout: page ---
Item cost: £{{ page.price_number }} {% if page.shipping_uk_number %} Postage: £{{ page.shipping_uk_number }} each {% endif %}
Return to shop


Overview
The most important topic covered this week is the concept and implementation of Authenication using Ruby on Rails. Authenication is one of the major functions that separates a professional application from an amatuer/toy application. From my past experience of programming ASP.NET, my limited understaning of authenication is a simple string comparison by doing:
1 user_pass = sql_execute( select user.password from user_table where user.name = "input_username" )
2 if user_pass == input_userpassword
3 Authorized
4 else
5 Warning
6 end
After going through all the material this week, I realized how naive and limited my comprehension is on the subject. Other important topics include the polymorphic association, where in a 1:M association, a model can belongs_to multiple models with a single association, this is critically important because on the databse level, it not only keeps the data schema simple and clean, it also greatly reduces the wasted space. Another important topic is the Member / Collection keyword, which allows user to add more routes than the default seven RESTful routes set by rails. Concepts of Memoization and flash are also introduced.
Authenication
Chris mentioned an important concept about authenication during lecture, and that is one-way hashing. For modern authenication systems, storing a user’s actual password in database can lead to major security issues. So it is better to use one-way hashing method, which is to use hashing algorithms to turn a user input password into a unique string, and compare the hashed strings instead of the actual password everytime when users try to log in. In Rails, there is a built-in function in ActiveModel called has_secure_password, which will automatically set and authenicate Bycryt password. has_secure_password requires an attribute caled password_digest in the same model in order to work, which stores the unique string that is hashed by Bycrpt algorithm.
The implementation include the following steps:
- add ‘bcrypt-ruby’ gem to Gemfile:
1 gem 'bcrypt-ruby', '~> 3.0.0'
Then run bundle install
.
- generate a migration file and add password_digest column to the users table in database.
1 def change
2 add_column :users, :password_digest, :string
3 end
Then run rake db:migrate
.
- has_secure_password adds methods to set and authenticate against a BCrypt password, it has built-in validation frameworks, but for our project we want to build our own, so we set the built-in validation to false and add our own validation, which are username and password. Which can be written as the following:
1 class User < ActiveRecord::Base
2
3 has_secure_password validations: false
4
5 validates :username, presence: true, uniqueness: true
6 validates :password, presence: true, on: :create, length: {minimum: 5}
7
8 end
*Notice that setting has_secure_password will give us two virtual attributes for the user model, which are password and password_confirmation, they do not appear in the database layer nor the model, but they are essential to the mechanism of has_secure_password.
Validation
After we set up the the autehnication in the user model, we can add some mehtods in applicaiton controller to help perform validation in our application:
application_controller.rb
1 class ApplicationController < ActionController::Base
2 # Prevent CSRF attacks by raising an exception.
3 # For APIs, you may want to use :null_session instead.
4
5 protect_from_forgery with: :exception
6
7 helper_method :current_user, :logged_in?
8 #make these methods available to view templates
9
10 def current_user
11 @current_user ||= User.find(session[:user_id]) if session[:user_id]
12 #memorization technique, if @current_user object is nil, and session hash has an user_id, then find the user in the database with the same user_id from session hash.
13 end
14
15 def logged_in?
16 !!current_user #check if there is a user, !! turns any object into a boolean value.
17 end
18
19 def require_user #this method is used to restrict actions that require authenication
20 if !logged_in?
21 flash[:notice] = "You must be logged in to do that!"
22 redirect_to :back
23 end
24 end
25 end
Notice that helper_method will make these methods accessible to views. validates_uniqueness_of :scope
Routing: Members and Collection
Sometimes we need to create actions that are outside the default seven RESTFUL actions provided by Rails, this is where Members and Collection keywords come in. In short, members is used to add addtional action to a specific member of the resource, and collection is used add additional action to a collection of resource.
| URL | URL helper | Action |
|---|---|---|
| /photos/1/preview | preview_photo_path(photo) | photos#preview |
| /posts/archive | archive_photos_path | photos#archive |
In the case of our postit project:
1 resources :posts, except: [:destroy] do
2 member do
3 post :vote
4 end
will give us the following routes:
| path | url helper | action | http verb |
|---|---|---|---|
| /posts | posts_path | posts#index | GET |
| /posts/new | new_posts_path | posts#new | GET |
| /posts/:id | post_path(@post) | posts#show | GET |
| /posts/:id/edit | edit_post_path(@post) | posts#edit | GET |
| /posts/:id | posts#create | POST | |
| /posts/:id | posts#update | PATCH | |
| /posts/:id | posts#update | PUT | |
| /posts/:id/vote | vote_post_path(@post) | posts#vote | POST |
Polymorphic Association One of the most important concepts of this week is Polymorphic Association. With polymorphic associations, a model can belong to more than one other model, on a single association. Traditionally, if we want to associate a model and multiple other models with 1:M associations, then on the database level, the table will look like:
| id | user_id | vote | post_id | comment_id |
|---|---|---|---|---|
| 0 | 1 | true | 1 | |
| 1 | 1 | false | 2 | |
| 2 | 1 | true | 2 |
However, this will waste lots of space on the database level, so an alternative and better way of doing this would be:
| id | user_id | vote | voteable_id | voteable_type |
|---|---|---|---|---|
| 0 | 1 | true | 1 | post |
| 1 | 1 | false | 1 | comment |
| 2 | 1 | true | 2 | post |
Notice the able must be added to the column name for the polymorphic association to work. The associations in the models should be set up like the following:
vote.rb
1 class Vote < ActiveRecord::Base
2 belongs_to :voteable, polymorphic: true
3 end
post.rb
1 class Post < ActiveRecord::Base
2 has_many :votes, as: :voteable
3 end
comment.rb
1 class Comment < ActiveRecord::Base
2 has_many :votes, as: :voteable
3 end
Memoization
Since this is an important topic I’m gonna make a separate blog post about it.
flash[:notice] vs flash.now
The flash is a special part of the session which is cleared with each request. This means that values stored there will only be available in the next request, which is useful for passing errormessages. It is accessed in much the same way as the session, as a hash flash[:notice]
. By default, adding values to the flash will make them available to the next request, but sometimes you may want to access those values in the same request.
Notice that there are two different flash methods, but there’s a simple rule of thumb to determine how each method should be used:
When redirecting use:
1 flash[:notice] = "This message value is available in next request-response cycle"
When rendering use:
1 flash.now[:notice] = "Message is available in same request-response cycle"
Blank Comment Blows up
Conclusion
After going through this week’s lesson, I had a much better understanding of the concept and implementation of authenication functions and realizing how little I used to know about it. The polymorphic association


| Regular Expression Parser |
Regular expressions are a form of pattern-matching that are often used in text processing. Many users will be familiar with the usage of regular expressions. Initially there were the Unix utilities grep, sed and awk, and the programming language perl, each of which make extensive use of regular expressions. Today the usage of such regular expressions is integrated in many more available systems.
During parser construction it is often useful to have the power of regular expressions available. The Regular Expression Parser was introduced, to make the use of regular expressions accessible for Spirit parser construction.
The Regular Expression Parser rxstrlit has a single template type parameter: an iterator type. Internally, rxstrlit holds the Boost Regex object containing the provided regular expression. The rxstrlit attempts to match the current input stream with this regular expression. The template type parameter defaults to char const*. rxstrlit has two constructors. The first accepts a null-terminated character pointer. This constructor may be used to build rxstrlit's from quoted regular expression literals. The second constructor takes in a first/last iterator pair. The function generator version is regex_p.
Here are some examples:
rxstrlit<>("Hello[[:space:]]+[W|w]orld")
regex_p("Hello[[:space:]]+[W|w]orld")
std::string msg("Hello[[:space:]]+[W|w]orld");
rxstrlit<>(msg.begin(), msg.end());
The generated parser object acts at the character level, thus an eventually given skip parser is not used during the attempt to match the regular expression (see The Scanner Business).
The Regular Expression Parser is implemented by the help of the Boost Regex++ library, so you have to have some limitations in mind.
Boost libraries have to be installed on your computer and the Boost root directory has to be added to your compiler #include<...> search path. You can download the actual version at the Boost web site.
The Boost Regex library requires the usage of bi-directional iterators. So you have to ensure this during the usage of the Spirit parser, which contains a Regular Expression Parser.
The Boost Regex library is not a header only library, as Spirit is, though it provides the possibility to include all of the sources, if you are using it in one compilation unit only. Define the preprocessor constant BOOST_SPIRIT_NO_REGEX_LIB before including the spirit Regular Expression Parser header, if you want to include all the Boost Regex sources into this compilation unit. If you are using the Regular Expression Parser in more than one compilation unit, you should not define this constant and must link your application against the regex library as described in the related documentation.
See regular_expression.cpp for a compilable example. This is part of the Spirit distribution.
Copyright © 2001-2002 Hartmut Kaiser
Use, modification and distribution is subject to the Boost Software
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)


It is the pure javascript drag, zoom, rotate image in the container and get the coordinates.
Rotate Image
Zoom Image


The replication feature of Apache HBase (TM) provides a way to copy data between HBase deployments. It can serve as a disaster recovery solution and can contribute to provide higher availability at the HBase layer. It can also serve more practically; for example, as a way to easily copy edits from a web-facing cluster to a "MapReduce" cluster which will process old and new data and ship back the results automatically.
The basic architecture pattern used for Apache HBase replication is (HBase cluster) master-push; it is much easier to keep track of what’s currently being replicated since each region server has its own write-ahead-log (aka WAL or HLog), just like other well known solutions like MySQL master/slave replication where there’s only one bin log to keep track of. One master cluster can replicate to any number of slave clusters, and each region server will participate to replicate their own stream of edits. For more information on the different properties of master/slave replication and other types of replication, please consult How Google Serves Data From Multiple Datacenters.
The replication is done asynchronously, meaning that the clusters can be geographically distant, the links between them can be offline for some time, and rows inserted on the master cluster won’t be available at the same time on the slave clusters (eventual consistency).
The replication format used in this design is conceptually the same as MySQL’s statement-based replication . Instead of SQL statements, whole WALEdits (consisting of multiple cell inserts coming from the clients' Put and Delete) are replicated in order to maintain atomicity.
The HLogs from each region server are the basis of HBase replication, and must be kept in HDFS as long as they are needed to replicate data to any slave cluster. Each RS reads from the oldest log it needs to replicate and keeps the current position inside ZooKeeper to simplify failure recovery. That position can be different for every slave cluster, same for the queue of HLogs to process.
The clusters participating in replication can be of asymmetric sizes and the master cluster will do its “best effort” to balance the stream of replication on the slave clusters by relying on randomization.
As of version 0.92, Apache HBase supports master/master and cyclic replication as well as replication to multiple slaves.
The guide on enabling and using cluster replication is contained in the API documentation shipped with your Apache HBase distribution.
The most up-to-date documentation is available at this address.
The following sections describe the life of a single edit going from a client that communicates with a master cluster all the way to a single slave cluster.
The client uses an API that sends a Put, Delete or ICV to a region server. The key values are transformed into a WALEdit by the region server and is inspected by the replication code that, for each family that is scoped for replication, adds the scope to the edit. The edit is appended to the current WAL and is then applied to its MemStore.
In a separate thread, the edit is read from the log (as part of a batch) and only the KVs that are replicable are kept (that is, that they are part of a family scoped GLOBAL in the family's schema, non-catalog so not .META. or -ROOT-, and did not originate in the target slave cluster - in case of cyclic replication).
The edit is then tagged with the master's cluster UUID. When the buffer is filled, or the reader hits the end of the file, the buffer is sent to a random region server on the slave cluster.
Synchronously, the region server that receives the edits reads them sequentially and separates each of them into buffers, one per table. Once all edits are read, each buffer is flushed using HTable, the normal HBase client.The master's cluster UUID is retained in the edits applied at the slave cluster in order to allow cyclic replication.
Back in the master cluster's region server, the offset for the current WAL that's being replicated is registered in ZooKeeper.
The edit is inserted in the same way.
In the separate thread, the region server reads, filters and buffers the log edits the same way as during normal processing. The slave region server that's contacted doesn't answer to the RPC, so the master region server will sleep and retry up to a configured number of times. If the slave RS still isn't available, the master cluster RS will select a new subset of RS to replicate to and will retry sending the buffer of edits.
In the mean time, the WALs will be rolled and stored in a queue in ZooKeeper. Logs that are archived by their region server (archiving is basically moving a log from the region server's logs directory to a central logs archive directory) will update their paths in the in-memory queue of the replicating thread.
When the slave cluster is finally available, the buffer will be applied the same way as during normal processing. The master cluster RS will then replicate the backlog of logs.
This section describes in depth how each of replication's internal features operate.
HBase replication maintains all of its state in Zookeeper. By default, this state is contained in the base znode:
/hbase/replication
There are three major child znodes in the base replication znode:
The state znode indicates whether or not replication is enabled on the cluster corresponding to this zookeeper quorum. It does not have any child znodes and simply contains a boolean value. This value is initialized on startup based on the hbase.replication config parameter in the hbase-site.xml file. The status value is read/maintained by the ReplicationZookeeper.ReplicationStatusTracker class. It is also cached locally using an AtomicBoolean in the ReplicationZookeeper class. This value can be changed on a live cluster using the stop_replication command available through the hbase shell.
/hbase/replication/state [VALUE: true]
The peers znode contains a list of all peer replication clusters and the current replication state of those clusters. It has one child peer znode for each peer cluster. The peer znode is named with the cluster id provided by the user in the HBase shell. The value of the peer znode contains the peers cluster key provided by the user in the HBase Shell. The cluster key contains a list of zookeeper nodes in the clusters quorum, the client port for the zookeeper quorum, and the base znode for HBase (i.e. “zk1.host.com,zk2.host.com,zk3.host.com:2181:/hbase”).
/hbase/replication/peers /1 [Value: zk1.host.com,zk2.host.com,zk3.host.com:2181:/hbase] /2 [Value: zk5.host.com,zk6.host.com,zk7.host.com:2181:/hbase]
Each of these peer znodes has a child znode that indicates whether or not replication is enabled on that peer cluster. These peer-state znodes do not have child znodes and simply contain a boolean value (i.e. ENABLED or DISABLED). This value is read/maintained by the ReplicationPeer.PeerStateTracker class. It is also cached locally using an AtomicBoolean in the ReplicationPeer class.
/hbase/replication/peers /1/peer-state [Value: ENABLED] /2/peer-state [Value: DISABLED]
The rs znode contains a list of all outstanding HLog files in the cluster that need to be replicated. The list is divided into a set of queues organized by region server and the peer cluster the region server is shipping the HLogs to. The rs znode has one child znode for each region server in the cluster. The child znode name is simply the regionserver name (a concatenation of the region server’s hostname, client port and start code). These region servers could either be dead or alive.
/hbase/replication/rs /hostname.example.org,6020,1234 /hostname2.example.org,6020,2856
Within each region server znode, the region server maintains a set of HLog replication queues. Each region server has one queue for every peer cluster it replicates to. These queues are represented by child znodes named using the cluster id of the peer cluster they represent (see the peer znode section).
/hbase/replication/rs /hostname.example.org,6020,1234 /1 /2
Each queue has one child znode for every HLog that still needs to be replicated. The value of these HLog child znodes is the latest position that has been replicated. This position is updated every time a HLog entry is replicated.
/hbase/replication/rs /hostname.example.org,6020,1234 /1 23522342.23422 [VALUE: 254] 12340993.22342 [VALUE: 0]
All of the base znode names are configurable through parameters:
| Parameter | Default Value |
| zookeeper.znode.parent | /hbase |
| zookeeper.znode.replication | replication |
| zookeeper.znode.replication.peers | peers |
| zookeeper.znode.replication.peers.state | peer-state |
| zookeeper.znode.replication.rs | rs |
The default replication znode structure looks like the following:
/hbase/replication/state /hbase/replication/peers/{peerId}/peer-state /hbase/replication/rs
When a master cluster RS initiates a replication source to a slave cluster, it first connects to the slave's ZooKeeper ensemble using the provided cluster key (that key is composed of the value of hbase.zookeeper.quorum, zookeeper.znode.parent and hbase.zookeeper.property.clientPort). It then scans the "rs" directory to discover all the available sinks (region servers that are accepting incoming streams of edits to replicate) and will randomly choose a subset of them using a configured ratio (which has a default value of 10%). For example, if a slave cluster has 150 machines, 15 will be chosen as potential recipient for edits that this master cluster RS will be sending. Since this is done by all master cluster RSs, the probability that all slave RSs are used is very high, and this method works for clusters of any size. For example, a master cluster of 10 machines replicating to a slave cluster of 5 machines with a ratio of 10% means that the master cluster RSs will choose one machine each at random, thus the chance of overlapping and full usage of the slave cluster is higher.
A ZK watcher is placed on the ${zookeeper.znode.parent}/rs node of the slave cluster by each of the master cluster's region servers. This watch is used to monitor changes in the composition of the slave cluster. When nodes are removed from the slave cluster (or if nodes go down and/or come back up), the master cluster's region servers will respond by selecting a new pool of slave region servers to replicate to.
Every master cluster RS has its own znode in the replication znodes hierarchy. It contains one znode per peer cluster (if 5 slave clusters, 5 znodes are created), and each of these contain a queue of HLogs to process. Each of these queues will track the HLogs created by that RS, but they can differ in size. For example, if one slave cluster becomes unavailable for some time then the HLogs should not be deleted, thus they need to stay in the queue (while the others are processed). See the section named "Region server failover" for an example.
When a source is instantiated, it contains the current HLog that the region server is writing to. During log rolling, the new file is added to the queue of each slave cluster's znode just before it's made available. This ensures that all the sources are aware that a new log exists before HLog is able to append edits into it, but this operations is now more expensive. The queue items are discarded when the replication thread cannot read more entries from a file (because it reached the end of the last block) and that there are other files in the queue. This means that if a source is up-to-date and replicates from the log that the region server writes to, reading up to the "end" of the current file won't delete the item in the queue.
When a log is archived (because it's not used anymore or because there's too many of them per hbase.regionserver.maxlogs typically because insertion rate is faster than region flushing), it will notify the source threads that the path for that log changed. If the a particular source was already done with it, it will just ignore the message. If it's in the queue, the path will be updated in memory. If the log is currently being replicated, the change will be done atomically so that the reader doesn't try to open the file when it's already moved. Also, moving a file is a NameNode operation so, if the reader is currently reading the log, it won't generate any exception.
By default, a source will try to read from a log file and ship log entries as fast as possible to a sink. This is first limited by the filtering of log entries; only KeyValues that are scoped GLOBAL and that don't belong to catalog tables will be retained. A second limit is imposed on the total size of the list of edits to replicate per slave, which by default is 64MB. This means that a master cluster RS with 3 slaves will use at most 192MB to store data to replicate. This doesn't account the data filtered that wasn't garbage collected.
Once the maximum size of edits was buffered or the reader hits the end of the log file, the source thread will stop reading and will choose at random a sink to replicate to (from the list that was generated by keeping only a subset of slave RSs). It will directly issue a RPC to the chosen machine and will wait for the method to return. If it's successful, the source will determine if the current file is emptied or if it should continue to read from it. If the former, it will delete the znode in the queue. If the latter, it will register the new offset in the log's znode. If the RPC threw an exception, the source will retry 10 times until trying to find a different sink.
If replication isn't enabled, the master's logs cleaning thread will delete old logs using a configured TTL. This doesn't work well with replication since archived logs passed their TTL may still be in a queue. Thus, the default behavior is augmented so that if a log is passed its TTL, the cleaning thread will lookup every queue until it finds the log (while caching the ones it finds). If it's not found, the log will be deleted. The next time it has to look for a log, it will first use its cache.
As long as region servers don't fail, keeping track of the logs in ZK doesn't add any value. Unfortunately, they do fail, so since ZooKeeper is highly available we can count on it and its semantics to help us managing the transfer of the queues.
All the master cluster RSs keep a watcher on every other one of them to be notified when one dies (just like the master does). When it happens, they all race to create a znode called "lock" inside the dead RS' znode that contains its queues. The one that creates it successfully will proceed by transferring all the queues to its own znode (one by one since ZK doesn't support the rename operation) and will delete all the old ones when it's done. The recovered queues' znodes will be named with the id of the slave cluster appended with the name of the dead server.
Once that is done, the master cluster RS will create one new source thread per copied queue, and each of them will follow the read/filter/ship pattern. The main difference is that those queues will never have new data since they don't belong to their new region server, which means that when the reader hits the end of the last log, the queue's znode will be deleted and the master cluster RS will close that replication source.
For example, consider a master cluster with 3 region servers that's replicating to a single slave with id '2'. The following hierarchy represents what the znodes layout could be at some point in time. We can see the RSs' znodes all contain a "peers" znode that contains a single queue. The znode names in the queues represent the actual file names on HDFS in the form "address,port.timestamp".
/hbase/replication/rs/ <IP_ADDRESS>,60020,123456780/ 2/ <IP_ADDRESS>,60020.1234 (Contains a position) <IP_ADDRESS>,60020.1265 <IP_ADDRESS>,60020,123456790/ 2/ <IP_ADDRESS>,60020.1214 (Contains a position) <IP_ADDRESS>,60020.1248 <IP_ADDRESS>,60020.1312 <IP_ADDRESS>,60020, 123456630/ 2/ <IP_ADDRESS>,60020.1280 (Contains a position)
Now let's say that <IP_ADDRESS> loses its ZK session. The survivors will race to create a lock, and for some reasons <IP_ADDRESS> wins. It will then start transferring all the queues to its local peers znode by appending the name of the dead server. Right before <IP_ADDRESS> is able to clean up the old znodes, the layout will look like the following:
/hbase/replication/rs/ <IP_ADDRESS>,60020,123456780/ 2/ <IP_ADDRESS>,60020.1234 (Contains a position) <IP_ADDRESS>,60020.1265 <IP_ADDRESS>,60020,123456790/ lock 2/ <IP_ADDRESS>,60020.1214 (Contains a position) <IP_ADDRESS>,60020.1248 <IP_ADDRESS>,60020.1312 <IP_ADDRESS>,60020,123456630/ 2/ <IP_ADDRESS>,60020.1280 (Contains a position) 2-<IP_ADDRESS>,60020,123456790/ <IP_ADDRESS>,60020.1214 (Contains a position) <IP_ADDRESS>,60020.1248 <IP_ADDRESS>,60020.1312
Some time later, but before <IP_ADDRESS> is able to finish replicating the last HLog from <IP_ADDRESS>, let's say that it dies too (also some new logs were created in the normal queues). The last RS will then try to lock <IP_ADDRESS>'s znode and will begin transferring all the queues. The new layout will be:
/hbase/replication/rs/ <IP_ADDRESS>,60020,123456780/ 2/ <IP_ADDRESS>,60020.1378 (Contains a position) 2-<IP_ADDRESS>,60020,123456630/ <IP_ADDRESS>,60020.1325 (Contains a position) <IP_ADDRESS>,60020.1401 2-<IP_ADDRESS>,60020,123456790-<IP_ADDRESS>,60020,123456630/ <IP_ADDRESS>,60020.1312 (Contains a position) <IP_ADDRESS>,60020,123456630/ lock 2/ <IP_ADDRESS>,60020.1325 (Contains a position) <IP_ADDRESS>,60020.1401 2-<IP_ADDRESS>,60020,123456790/ <IP_ADDRESS>,60020.1312 (Contains a position)
Yes, this is for much later.


What is VPN Good For And The Top 5 Best VPN Services
by Elizabeth KartiniWhat is VPN?
VPN or virtual private network is an online connection process that is used to improve the security and privacy of users. Whether you use a private or public network, there is always a chance that you might get hacked. Sure, there are plenty of online security tools that claim to protect you but not all of them work effectively. Even if you have them, a single moment of negligence added with terrible luck can lead to you losing all your stored private information.
VPNs were used profusely by corporations to protect their sensitive data but today it has become an essential tool for both companies and private individuals to protect themselves online. Technology is always a double-edged sword as it is available to everyone. It can be used for good or bad depending on the purpose of the individual controlling it. Just as more and more online security tools pop up, the number of ways in which hackers can break through the digital walls also increases. So maybe instead of building a wall, we should just pretend that we’re somewhere where we are not and that is exactly what VPN does.
How Does VPN Protect Me?
The genius of the VPN is in its simplicity. Rather than fighting against external threats, it diverts your network location away from your local address. A VPN tool basically takes your initial IP address and replaces it with another making it near impossible for others to track you online. For instance, if you live in New York, you can use a VPN to make it appear that you are browsing from Berlin. It essentially creates a private online connection between a user and their device making it impossible for prying eyes to see where and what you are doing.
To be more specific about the way VPN helps you, here are some of the things it does.
It Hides Your IP Address
It Changes Your IP Address
It Encrypts Your Data Transfers
It Hides Your Location
It Gives You Access To Blocked Websites
History of VPN
In order to understand something fully; you need to know about its past and its original purpose. Ever since the internet took the world by storm, there has been a need for more secure data transfers. VPN first came into being as an extension of peer-to-peer tunneling protocol or PPTP in 1996 when an employee working at Microsoft developed the latter method. Anti-virus software began to flood the market as a way of protecting oneself online but it was only effective at the end-user level. There was a need for a way to secure the connection itself instead of a defensive mechanism and that is how VPN came into being.
In the beginning, VPNs were almost exclusively used by businesses as they required secure connections for protecting extremely sensitive data. However, by the 2000s, a series of cyber-attacks swept all across the world providing the need for VPNs to become more accessible. In the last two decades, several companies have brought out VPN tools to the market and some of them have been very effective at preventing online attacks.
The Broader Uses of VPN
You might think that the VPN is only for securing yourself online but it is so much more than that. It can also help you bypass otherwise inaccessible avenues. For instance, if certain sites are banned in certain countries, then by using a VPN a user can gain access to it by changing their online location. VPN played a crucial role in the recent freedom struggle in Egypt when the former government tried banning social media sites to stop the news about the revolution from spreading all over the world. By using VPN, several activists and journalists were able to cover the whole event and show them to the world. People from all over the world were communicating with those struggling in Egypt to help the latter in any way they can.
Another reason to use a VPN is not just to safeguard yourself against bad actors but also from your own government. From numerous leaked documents by Wiki Leaks and individuals like Edward Snowden, the world came to know about several top-secret ways in which the government was trying to spy on its own people. While there might be a semblance of reason in such a tactic, it is highly intrusive. VPN can help you to be invisible online and also unlock geo-restricted online content such as YouTube, NetFlix, Hulu, etc.
5 Best VPN Services in the World
As mentioned above, there are numerous reasons why you should get a VPN. But how do you find an effective VPN service that actually works? Here are some of the top VPN services in the world according to users and everything you need to know about them.
Winner
The Top All-Rounder VPN Service
ExpressVPN
ExpressVPN is easily one of the top three VPN services available in the market today. It offers a whopping 148 locations across 94 countries along with several unique features to assist you on mobile and desktops alike. The product is available for several platforms such as Windows, Mac, Linus, iOS, Android and even Blackberry (limited models).
Unlike other VPNs, they add routers, offer browser extensions and unblock DNS content for numerous devices and even Smart TVs. They provide extensions for some of the most popular online browsers such as Chrome, Firefox, Safari, etc, which allows you to switch locations and servers whenever you surf the internet. Moreover, ExpressVPN also supports Amazon Fire TV and Android TV.
 Another interesting aspect of ExpressVPN is their privacy policy. A lot of other service providers word their privacy policy in a very vague way. You don’t get that with Express VPN. They very clearly state that they do not collect logs of your activity including your browsing history.
What’s great about ExpressVPN?
- 2000 servers and 148 locations across 94 countries
- Easy setup across different platforms
- Helpful tutorials and guides
- 24/7 email and live chat support
- 30-day refund
- Great speeds
What’s Not So Great about ExpressVPN?
- No free trial
- Can only support 3 connections at a time
Price
- 12-month plan – $99.95 (Includes 3 free months)
- 6-month plan – $59.99
- 1-month plan – $12.95
Final Verdict
If you are looking for an all-round and fast VPN service at a decent price, then ExpressVPN is the service to go for hands down.
Download Link
Runner- UP
The Best VPN Service
NordVPN
NordVPN is a company based in Panama with over 1 million customers from all over the world. It provides over 4050 servers across 60 locations and allows you to have 6 simultaneous connections. Where NordVPN stands apart from the competition is in its features.
Performance-wise, you get very good speeds and everything runs like a well-oiled machine. One great aspect of NordVPN is that it has a connection wizard that can help you to set up the connection based on your browsing needs ranging from P2P, security, streaming or just being anonymous online. As far as security is concerned, their Onion over NordVPN solution is perfect for shielding you from prying eyes by routing your traffic through the VPN server and then the Onion router.
learn more at NordVPN.com
Unlike other VPN services, they keep everything clear, concise and up to the point making it easy to go through the whole content.
You can get a 3 day trial for new users but strangely they don’t mention that on their website. You can purchase the VPN by choosing the package of your preference.
What’s great about NordVPN?
- Good performance
- Good speeds
- 3 Day trial
- 30-day money-back guarantee
- Over 4400 servers
What’s Not So Great about NordVPN?
- Windows client isn’t designed well enough
- CyberSec, the adblocking filer is very basic
Price
As far as the pricing is concerned, their 2-year subscription plan is an absolute steal at $79 being billed every 2 years. Their single month charges might be a bit high but the 2-year plan is just golden. You also get a 30-day money-back guarantee if you are not satisfied with their services.
- 2 Years – $3.29 per month ($79.00 billed every 2 years)
- 1 Year – $5.75 per month ($69 billed every year)
- 1 Month – $11.95
Final Verdict
NordVPN is easy to use, affordable and reliable VPN service that provides great performance and good speeds. The client for Windows does have a few kinks to it but overall the product provides enough upside that you can forgive its minor issues.
Download Link
The Top Performance and Security-Based VPN Service
VyprVPN
With a name like VyprVPN you know they are not to be messed with and after using the product, it sure is true. It has over 700 servers across 73 locations supporting over 200,000 IP addresses which are impressive numbers. Based in Switzerland, VyprVPN has certain strategic location-based advantages that its competitors don’t have. Switzerland is very favorable towards privacy policies in general and doesn’t meddle too much into other people’s private information.
What’s sets Vypr apart from the others is easily their performance which is extraordinarily fast. Moreover, they also provide some cool features such as auto-connect which enables you to automatically connect to a selected location, a kill switch and better security via their proprietary Chameleon protocol and VyprDNS.
As far as compatible platforms go, VyprVPN is available for Windows, Mac, Android, iOS, Linux and smart Tvs. While standard members get to have 3 simultaneous connections going, premium users can run up to 5 connections. As far as their privacy policy is concerned, they state their points very clearly. In this service, there is some session logging but it is explained well and in enough detail to grasp their purpose which does seem very fair.
What’s great about VyprVPN?
- 700 servers across 73 locations
- Auto Connect
- Very powerful clients
- Great Speeds
- 3 day free trial
- High value annual plans
What’s Not So Great aboutVyprVPN?
- No refunds
- All plans except the yearly one are a little expensive
Price
VyprVPN offers a standard and a premium plan with each having two options of paying month by month or a discounted annual option. Premium users also enjoy additional features such as access to VyprVPN Cloud and Chameleon Protocol.
Premium plan–
- 1 Month – $12.95 per month
- 12 Month – $ 6.67 per month
Standard Plan
- 1 Month – $9.95 per month
- 12 Months – $5 per month
Final Verdict
It’s not the most affordable service but VyprVPN is a beast of a VPN. It is fast and very powerful but they do have session logging so you have to choose whether that is worth the great speed and performance you get from them.
The Top Likeable VPN Service in the World!
TunnelBear
TunnelBear is easily the easiest VPN product to navigate through and use without a shred of a doubt. This is certainly a very interesting service as there are many others who have more servers and locations but the simplicity of the product makes it actually better to have in some regard. TunnelBear VPN is a Canadian based service that has over 1000 servers and 20 plus server locations with the ability to support 5 devices.
What’s pretty amazing about this service is their sense of clarity and their absolute disdain of unnecessary jargon. If you opt for most VPN service providers available, you will get absolutely confused at the way the tool is presented to you especially if you are someone new to VPN. Everything from the interface design to the layout and FAQs are made terribly confusing in most products. In TunnelBear you get exactly what you need to know in the simplest terms. It’s perfect for fathers and mothers who grew up before the dawn of the internet because it disseminates the information in the best possible way.
While the performance is impressively high locally, the speed does drop down a little when trying long-distance connections but this is something that most VPNs suffer from to be honest. Where this service stands apart is that it’s a free service to use but you get only limited data of 500 MB per month. You can get higher data usage by going for a premium plan. They don’t record any logging activity as mentioned in their privacy policy which is as transparent as they come.
What’s great about TunnelBear?
- Free to use
- Incredibly intuitive and easy to use
- Exceptional user experience
- Transparent privacy policy
- Great spread of server locations
What’s Not So Great about TunnelBear?
- Fewer customizable options
- Too simple for experienced VPN users
Price
- 1 Year – $5.00 per month
- 1 Month – $9.99 per month
Final Verdict
Easily the most convenient VPN service out there today. It may not be the best performing or fastest VPN but if you are just starting out, it’s the perfect service for you.
The Top Affordable VPN Service
Hotspot Shield
Hotspot Shield has over 2500 servers across 25 locations and at one point of time, it offered the greatest value due to their extremely low pricing. Over time they made changes to the amounts they charge but they still are extremely affordable for all the features you get with it and the lightning-fast download speeds. You also get a separate service called Hotspot Shield Business which is catered towards businesses and corporations more than private individuals. You can get it for Windows, Mac, Android and iOS platforms and although they used to support kindle, that is no longer the case.
As far as their privacy policy is concerned, while they do a good enough job explaining what they do and the reason why there is a tremendous amount of content you have to go through to read it all. Everything is expanded to such great lengths that you cannot find a single blanket statement. This might be ok for the average user but for the experienced VPN user, it may put off some because they usually want to know what exactly they are getting when they opt for such services.
In terms of sheer performance, Hotspot Shield provides amazing download speeds for their price point. You will have no problem streaming content through popular services like Netflix, Hulu, Amazon, etc.
What’s great about HotSpot Shield?
- Very low price
- Great speeds
- Great Value
- Good performance
- 7-day trial
What’s Not So Great about Hotspot Shield?
- Limited server locations
- Limited options for configuration
Price
- 3 Years – $3.49 per month
- 1 Year – $5.99 per month
- 6 Months – $8.99 per month
- 1 Month – $12.99
Conclusion
ExpressVPN is easily one of the top three VPN services available in the market today, following the NordVPN which has over 1 million subscribers.
Learn more at ExpressVPN.com
learn more at NordVPN.com


This WebApp showcases a museum accessible through your browser in VR
Accessibility:
- On desktop:You can move through the scene with WASD or arrow keys, and look around moving your mouse with left click
- On mobile:You can look around moving your smartphone or panning with the finger
- In VR:With mobile headset just look around, with high end headset you can move around like in real life


---
layout: post
title: ChEMBL python client update
date: '2015-04-30T17:02:00.000+01:00'
author: kott
tags:
modified_time: '2015-04-30T17:02:17.153+01:00'
blogger_id: tag:blogger.com,1999:blog-2546008714740235720.post-7686535474019354798
blogger_orig_url: https://www.blogger.com/comment.g?blogID=2546008714740235720&postID=7686535474019354798
---
Along with updating ChEMBL web services to the new 2.x version, we've also updated the python client library (chembl_webresource_client). The change was backwards compatible so it's possible that existing users haven't even noticed the change.
As we've already provided examples of using new web services via cURL or using live docs, it's time to explain the changes made to the python client.
First of all, if you haven't installed (or updated) it yet, you can do it using Python Package index:
pip install -U chembl_webresource_client
Now you can access, new functionality using the following import statement:
from chembl_webresource_client.new_client import new_client
In 0.8.x versions of the client the new part will be called 'new_client'. In 0.9.x it will change the name to 'client' and the old part will be renamed to 'old_client' and deprecated. In 1.0.x the old functionality will be removed completely.
OK, so since we know how to import out new_client object, we can try to do something useful. Let's retrieve some activities. We know, that the new web services introduces filtering, so we can try to get only activities with standard type equal to 'Log Ki' and with standard value greater or equal 5:
acts = activity.filter(standard_type="Log Ki").filter(standard_value__gte=5)
We've already applied two filters, so you may expect that the client made two requests to server as well (one to get all activities with specified standard type and another one to filter on the standard value). In reality no interaction with server has been performed so far. This is because our client is lazy - but in the good sense. It waits until you are actually trying to use some of the data requested and then tries to perform the most sensible query to the server so you don't have to care.
So If we would like to access the fifth element:
print acts[5]
or loop through all the elements:
for act in acts:
...
the client will interact with server and retrieve a chunk of data that is large enough to prevent from hammering the server too frequently. The data is then cached locally, so if you restart a computer and rerun your script all the data will be fetched from the cache (if available).
A careful reader with IT background will notice that our client presents an interface that is very similar to Django QuerySet. This is true, we designed our client to mimic Django ORM behavior by implementing chaining filters and lazy evaluation. You don't have to be a django expert to see advantages of such approach, but if you do have some experience with django you will feel like home.
We can now try something more complicated. In the main chembl web services page, there is an "Use Cases" section, which provides an example of investigating the potency of approved drugs against their efficacy targets. Let's try to rewrite it using our client:
from chembl_webresource_client.new_client import new_client as nc
approved_drugs = nc.molecule.filter(max_phase=4).order_by('chembl_id')
drug_ids = [drug['chembl_id'] for drug in drug_ids]
mechanisms = nc.mechanism.filter(molecule_chembl_id__in=[drug_ids]).order_by('molecule_chembl_id')
target_ids = [mec['target_chembl_id'] for mac in mechanisms]
binding_assays = nc.assay.filter(target_chembl_id__in=[target_ids]).filter(relationship_type='D').filter(assay_type='B')


Get Coastline objects within a geographical rectangle.
GetFeature-operation - get objects of type "Kystkontur" (Coastline):
- Object types (typeNames): app:Kystkontur
- Attribute Projection (PropertyName): none
- Selection (Filter): A geographical area specified by fes:BBOX and gml:Envelope
- Sorting (SortBy): none
Coast 'best of' is a spatial data set that consists of the most detailed and accurate data within a defined area, has a certain
distribution and is regularly produced and updated.
http://www.kartverket.no/en/


Register.html
Please input necessary fields:
User Name:*
Password:*
Repeat Password:*
First Name:*
Last Name:*
Email:
Affiliation:


Merged Figure 1, Cost 66.051616, width 546, height 267
Merged Figure 2, Cost 155.333403, width 1237, height 835
Merged Figure 3, Cost 1.000000, width 254, height 1
Merged Figure 4, Cost 78.479180, width 966, height 336


xml elements
Extract elements and display the structure of an XML document.
More information: home page
- Extract elements from an XML document (producing XPATH expressions):
xml elements path/to/input.xml|URI > path/to/elements.xpath
- Extract elements and their attributes from an XML document:
xml elements -a path/to/input.xml|URI > path/to/elements.xpath
- Extract elements and their attributes and values from an XML document:
xml elements -v path/to/input.xml|URI > path/to/elements.xpath
- Print sorted unique elements from an XML document to see its structure:
xml elements -u path/to/input.xml|URI
- Print sorted unique elements from an XML document up to a depth of 3:
xml elements -d3 path/to/input.xml|URI
- Display help for the `elements` subcommand:
xml elements --help


The Story of Skye Belinda the developer (PAGE heading)
E kore e mau i a koe, he wae kai pakiaka.
A foot accustomed to running over roots makes the speediest runner.
(Optional SUB title)


{% extends "base.html" %} {% block title %}FAQ{% endblock %} {% block breadcrumb %}
A game jam is an event during which all participants create games according to a provided theme within a short amount of time (usually between two days to a week). Check out the rules page for details on the procedure.
Please bring your own devices and multi sockets.
Yes there will be a room where you can rest. Please bring your own sleeping bag etc..
Nope. There will be coffee, drinks, snacks and pizza.
Everyone who registers in time. It is as simple as that.
Difficult to say. We want to achieve a wide range of different game types. Of course there are always some games of the main video game genres, but that depends on the theme and the creativity of the authors.
Have the courage to try something completely new. It's worth it!
Never did it before? No problem! The game jams are a learning effort, so newbies are also welcome. But to make sure you will have something playable within this short amount of time you should prepare for the event. Tips for greenhorns:
For programmers:
For everyone:
You can find other participants onsite or on this website. We will do a idea pitch after the theme announcement and try to connect everyone with a existing or a new team. Feel free to ask us anywhere and anytime if you need support.
Here is a nice list for you brought to you by the Global Game Jam guys! But always make sure to check the licence!


◆ $altSalesTotal
◆ $billAddressList
◆ $billingAddress
◆ $ccApproved
◆ $ccExpireDate
◆ $ccName
◆ $ccNumber
◆ $ccStreet
◆ $ccZipCode
◆ $class
◆ $contribPct
◆ $createdDate
◆ $createdFrom
◆ $creditCard
◆ $creditCardProcessor
◆ $currency
◆ $currencyName
◆ $customFieldList
◆ $customForm
◆ $debitCardIssueNo
◆ $deferredRevenue
◆ $department
◆ $discountItem
◆ $discountRate
◆ $discountTotal
◆ $drAccount
◆ $email
◆ $entity
◆ $estGrossProfit
◆ $estGrossProfitPercent
◆ $exchangeRate
◆ $excludeCommission
◆ $externalId
◆ $fax
◆ $fxAccount
◆ $giftCert
◆ $giftCertApplied
◆ $giftCertAvailable
◆ $giftCertTotal
◆ $intercoStatus
◆ $intercoTransaction
◆ $internalId
◆ $isTaxable
◆ $itemList
◆ $job
◆ $lastModifiedDate
◆ $leadSource
◆ $location
◆ $memo
◆ $message
◆ $messageSel
◆ $orderStatus
◆ $otherRefNum
◆ $paramtypesmap
◆ $partner
◆ $partnersList
◆ $paymentMethod
◆ $payPalAuthId
◆ $payPalProcess
◆ $pnRefNum
◆ $promoCode
◆ $recognizedRevenue
◆ $revCommitStatus
◆ $revenueStatus
◆ $revRecEndDate
◆ $revRecOnRevCommitment
◆ $revRecSchedule
◆ $revRecStartDate
◆ $salesEffectiveDate
◆ $salesGroup
◆ $salesRep
◆ $salesTeamList
◆ $shipAddress
◆ $shipAddressList
◆ $source
◆ $status
◆ $subsidiary
◆ $subTotal
◆ $syncPartnerTeams
◆ $syncSalesTeams
◆ $tax2Total
◆ $taxItem
◆ $taxRate
◆ $taxTotal
◆ $toBeEmailed
◆ $toBeFaxed
◆ $toBePrinted
◆ $total
◆ $totalCostEstimate
◆ $tranDate
◆ $tranId
◆ $tranIsVsoeBundle
◆ $validFrom
◆ $vatRegNum
◆ $vsoeAutoCalc
The documentation for this class was generated from the following file:


Milton Keynes 'murder': Two teens hold key information to house party stabbings
Dom Ansah and Ben Gillham-Rice were killed at a birthday party in Emerson Valley, Milton Keynes, last month
by Bradley Jolly, https://www.mirror.co.uk/authors/bradley-jolly/These two teenagers hold key information to help catch the murderers of two boys killed at a birthday party, police say.
Officers want to talk urgently to Jamie Chandler, 15, and Clayton Barker, 19, to aid the investigation into the deaths of Dom Ansah and Ben Gillham-Rice.
Mr Ansah died from a stab wound to the back, while Mr Gillham-Rice was knifed in the chest at the property in Emerson Valley, Milton Keynes, last month.
"We are releasing the names and images of Jamie Chandler and Clayton Barker, as we believe that they both have crucial information that will assist our investigation and we need to speak to them," Head of Crime for Thames Valley Police, Detective Chief Superintendent Ian Hunter, said today.
“I am appealing directly to both Jamie Chandler and Clayton Barker to make contact with police as soon as possible.
“I am also asking for the public’s help. If anybody knows the whereabouts of either Jamie Chandler or Clayton Barker, please contact the 24-hour non-emergency number 101, quoting URN 857 (5/11).
“The public have been incredibly supportive of this investigation so far, and I am appealing once again for their help."
Mr Ansah and Mr Gillham-Rice, both 17, were rushed to hospital but doctors were unable to save the boys.
Two males were also seriously injured in the attack.
Charlie Chandler, 21, of Bletchley, Buckinghamshire, Earl Bevans, 22, of no fixed abode, and a 16-year-old boy, from Milton Keynes, have been charged with two counts of murder and two counts of attempted murder.
But Det Chief Supt Hunter continued: “You can also make this report online if you wish, or call the independent charity Crimestoppers for 100% anonymity on 0800 555 111.
“If either Jamie Chandler or Clayton Barker see this appeal, or anybody is with them or knows where they are, I again re-iterate the importance of getting in touch with police.
“Our investigation into the circumstances of this tragic incident continues, and I would like to thank the public for all their help so far.”
The investigation continues.