{% extends "domestic/base.html" %} {% load static %} {% load breadcrumbs from component_tags %} {% block head_title %}Find your local trade office{% endblock %} {% block meta_description %}Use our postcode search to find the nearest trade offices to you and get in touch with an international trade adviser{% endblock %} {% block head_css %} {{ block.super }} {% endblock %} {% block content %} {% breadcrumbs 'Find trade office' %} great.gov.uk Contact us {% endbreadcrumbs %}
We couldn’t find an exact match for your postcode. You can contact a DBT office near you.
{% endif %} {% if office_details %} {% for office in office_details %} {% if not office.override_office_details %} {% if forloop.first %}


---
layout: post
title: PIC programming in C
date: '2007-08-01T01:53:00.000+02:00'
author: Steven Van Acker
tags:
- English
- PIC
- Building Stuff
modified_time: '2009-02-03T14:05:56.355+01:00'
blogger_id: tag:blogger.com,1999:blog-5513234137363262204.post-2670292726929598313
blogger_orig_url: http://www.singularity.be/2007/07/pic-programming-in-c.html
---
The PIC 16F627 that comes with the K8048 I bought earlier works like it should. I can program it from windows using sample code that comes with the PIC programmer board. But the PIC is not of much use if all I can do is pump sample programs on it.
I was tempted to write programs in assembler, but after finding this article:
http://www.micahcarrick.com/v2/content/view/14/21/
I think I will just use C to do it. When I have a better grasp of how the PIC functions (I tried reading the datasheet, but it's real dry stuff), I can always do things in assembler.


WOLF A film review by Ralph Benner Copyright 1996 Ralph Benner
The most visually striking sequence to grace a Mike Nichols movie thus far is the opening one for WOLF. A wink to THE SHINING, Jack Nicholson is driving his car through snowy mountainous terrain; the long shots are tenebrous, a little Germanic and foreboding -- a setting as Xmas card from Lon Chaney, Jr. It's so moody and enveloping, and augmented by (finally!) some real movie music by Ennio Morricone, that, based on his other pictures, you wonder if Nichols had anything to do with it. The zoom & swirl of Haskell Wexler's work in WHO'S AFRAID OF VIRGINIA WOOLF? the one exception, Nichols' movies are functional-looking -- just enough of whatever it takes to make them pass as movies. That's why some of us dread going to a Nichols movie; we're paying to see what is basically TV monitor. And WOLF unfortunately becomes television too -- the office sets, Michelle Pfeiffer's guest house digs and the conclusion make you cringe from their lack of appeal and ingenuity. However, because of the opening, and because Nicholson's darting eyes and brows are being utilized most fittingly, WOLF maintains a hold.
The little boy-caught-withkie-jar kind of acting that Nicholson relies on has a limited charm; when the part can soak up his "immaturity," like in THE WITCHES OF EASTWICK, he's disarming -- he makes us smile when we know he hasn't earned it. We give in because he's our idea of a capricious satyr. He can also be damned awful when he tips the degenerate scales: his whacked out Johnny Carson stuff in THE SHINING is memorable precisely because he lost control. (In his defense, he gave the material what it deserved; Kubrick, though, tried to layer it as an intellectostrata it couldn't support.) In WOLF, as one, he's got carte blanche built in to literally chew things up but, minus the last thirty minutes, he reins himself in; for the first hour or so, his metamorphosis is comicly subtle and engaging: this actor's born to sniff out the scent of booze and sex, to use his mouth to undo the clothing of his mate, to growl. It seems natural for Nicholson to have his carnal senses intensified -- and appreciated: says his wife (Kate Nelligan) on the answering machine, "You animal." Though the credits don't acknowledge Chaney's THE WOLF MAN, scripters Jim Harrison and Wesley Strick update it in a way that perhaps unconsciously borrows from Diane Keaton's BABY BOOM. In that one Keaton's a high priestess in Executiveland who gets the temporary shaft in a conspiracy led by (if memory serves) James Spader. Spader indeed plays conspirator in WOLF, conniving to take over Nicholson's senior editor position when money bags Christopher Plummer buys out the publishing firm. And, like Keaton, Nicholson seeks revenge. He warns Spader, "I'm going to get you," and there's no doubt that he will. It's a pleasure to watch Nicholson plotting this way -- he's using his innate likability, his common sense, his rarely used gift of calm -- and even more pleasurable is that he's not loaded down with obscenities. The regret is that Nichols and the writers decided to forego Nicholson's "normal state" and opt for a goofy climax and final that betray him, and Michelle Pfeiffer too. You really want him back in the office, snarling at management to protect his stable of writers. At least between full moons.
With the kind of talent gathered here to make junk food from the recipe of a horror classic, audiences have the right to believe the chefs would bring something new to the dish. What's the point of a remake if they don't? WOLF doesn't add much to mix except two super stars. Maybe Nichols, who isn't the top choice for a project like this, thought Nicholson and Pfeiffer would be enough; bordering on the offensive is that he relied on them to gloss over what he, out of laziness, didn't make clever. When the climax comes about, we're stupefied by Pfeiffer's utterances: she's covering up the series of events that don't need to be covered up. All the pieces fall into place and yet we're asked to accept that the cops will continue to hunt down the innocent. The writers dismiss the canine blood and the amulet -- the former sufficient evidence against the killer, the latter a sufficient controller of behavior. The climax and ending cheat us out of the sophisticated wrap we all deserve: it's a criminal waste to have stars of this magnitude in this day and age surrendering to the call of the wild. My idea of the perfect ending for WOLF: Nicholson and Pfeiffer get hitched, and at the reception, Pfeiffer's daddy Plummer bestows his generosity: "I've got my jet ready to take you on the honeymoon of your dreams." The next shot: the beauty & the beast arrive at a resort called Chaney's. The closing shot: Jack puts an amulet around Michelle's neck and, flashing his incorrigible, wicked smile, says, "You're gonna need this."
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


Clive Owen to play Bill Clinton in American Crime Story Impeachment
American Crime Story: Impeachment will focus on the impeachment scandal that surrounded Bill Clinton during his Presidency due to his affair with Monica Lewinsky.
by PTIActor Clive Owen will star as Bill Clinton in American Crime Story: Impeachment, the third season of FX’s acclaimed limited series franchise.
The season will focus on the impeachment scandal that surrounded Clinton during his Presidency due to his affair with Monica Lewinsky, reported Entertainment Weekly.
It is based on Jeffrey Toobin’s bestselling book A Vast Conspiracy: The Real Story of the Sex Scandal That Nearly Brought Down a President.
The cast also includes Sarah Paulson, who will play Linda Tripp and Annaleigh Ashford, who will play Paula Jones.
Lewinsky is attached as a producer.
Sarah Burgess has penned the season, with Ryan Murphy, Nina Jacobson, Brad Simpson, Brad Falchuk, Larry Karaszewski, Scott Alexander, Alexis Martin Woodall and Paulson executive producing.
Feldstein, Henrietta Conrad and Jemima Khan are also producing.
Filming on the show, from Fox 21 Television Studios/FX Production, is set to begin in March.


{{< layout}} {{$main-content}}
You can choose from 3 ways to get your digital photo.
They can use a phone, tablet or digital camera. We'll show you how to take a good passport photo and upload it.
At a shop, you'll get a digital copy of your photo. Some shops can also give you a photo code. We'll show you how to use the code to retrieve your digital photo.
From some booths in the UK and some booths abroad, you'll get a photo code with your printed photos. We'll show you how to use the code to retrieve your digital photo.
The photo code is a new service and may not be available yet from photo booths or shops in your area.


Salmon Cookies
ABOUT US
SALES
HOME
Our Sales All Over The World
Add New Info For Branch
Branch Location:
Minimum Customers per Hour:
Maximum Customers per Hour:
Cookies per Customer


Coler 2D Platformer postmortem js13k 2020
September 2020
Before the jam started I analyzed Celeste Source Code and researched about it, I wrote a tutorial about the mechanics of a platformer here.
Last year, I worked hard on polishing the menu, adding music but I couldn't make it to top 100. So this year I decided to spend more on the gameplay. I had the idea of making a platformer, and used the theme by making the http status codes to be collectibles.
Plan Ahead
This year, I started with a 20 day plan, you can see it here. Though I finished in less than 15 days.
I started from scratch, and used my boilerplate starter code using webpack. It supports code minification and live reloading. I spent as less as possible for low level API's such as input events, asset loading, game loop, creating a canvas, and drawing on canvas.
Keep it Simple
I decided to not have any text in the game. I had a single 128x128 spritesheet with 8x8 tiles for assets. It took 5kb, which later I figured It could go down to 2.5kbs by using a png optimizer. I used the Pico-8 palette with 16 colors.
In the plan, I was to do placeholder art, later replace it with polished art, but I didn't have the skills to make it any better so I kept the polishing to minimum.
For level design, I chose 32x32 tiles for a level, and added total of four levels. The levels were in 1D array format, and it took the most inefficient space, more than 11kbs. Next year I will use a custom format to fix that.
Challenge yourself
For mechanics, Player had horizontal movement, jumping, and wall sliding. There were falling blocks, bouncy springs, collectibles, and deadly spikes, and the camera. I also added fall damage for the red tiles and placed them on various places.
I asked about wall jumping on SO but couldn't really nail it. And the bouncy springs didn't feel good, but it was OK.
Get social feedback
I shared my game on social media and got some feedback from /r/gamedev Feedback Friday, and from my twitter post.
They said, the movement is too fast, and putting springs underneath the spikes wasn't nice. I slowed the player a bit, but kept the springs there. I figured it wouldn't be no challenging otherwise, the hitboxes were small so you could easily avoid them if you learn the way.
Decorate and Polish
One feedback was to add atmosphere. I added decorative decals, background with animation, water drops, grass tiles, and a spider npc. At first spider was supposed to have attack but I cut it out.
I had no music, but I added sounds using Sound box. I played three different notes and played them randomly on water drops, so it created sort of a tune to the game.
I added camera shake and background animation when the player died.
Make it presentable with User Interface
I had an intro scene, gameplay, a status scene, and an end scene. Status scene shows the collectibles and stats for death count and time. They were both progress bars so both are compared to author's stats. In the end I added a little coin spinning animation just to show the player something nice for collecting all the collectibles, thus finishing the game.
Better luck next year
See the source code.
Comment on on twitter.
Support me on on patreon.
Have fun, stay safe 💙.


{% set page = { title: 'index', dev: true, secondary: true, html_classes: ['page-class'] } %} {% extends page.layout | d(prototype.current.layout) %} {% block primary %} {% include "../../../../includes/error-summary.html" %}
Patient's name
Joe bloggs
Because of the following condition(s)
Back pain
You are not able to work
This will be the case for
2 weeks
From
4 July 2016
To
18 July 2016
Doctor's address
The Grove Surgery
Thornhill Street
Wakefield
WF1 1PG
Your address
First line
Second line
City
Postcode
Is this correct? Yes/No
{% endblock %} {% block secondary %} {% endblock %} {% block body_end %} {{ super() }} {% endblock %}


{% extends 'events/management/base.html' %} {% from 'forms/_form.html' import form_rows %} {% block title %} {%- trans %}Features{% endtrans -%} {% endblock %} {% block description %} {% trans -%} You can enable/disable various features for your event. Disabling a feature will hide it from both managers and users. {%- endtrans %} {% endblock %} {% block content %}


Alexa is ranking counted.com at 7896, which is AMAZINGLY high. The thing is that they are including all subdomains which includes the counter itself, bilbo.counted.com. Makes me feel wonderful doing counted! ;) Related Info for: counted.com/
Posting via E-mail
It’s done. I can now post via e-mail. It is done via this script:
http://www.ryan.net/email-to-blog.txt The only thing that I have to admit is that I didn’t get procmail sorted out yet and hence I am using a simple shell script that looks for new mail and pipes that to the posting script. I probably need to do some further work on this or I will end up with something like […] posts in case an e-mail is there but not from the right e-mail address. This sucks really, should be able to be worked out. If I were as good as I’d like to be I’d get procmail to run. My main problem here is that I do not have user home directories on the server I am using and need to somehow make procmail parse every single mail file for the right entries, which does not seem to be so easy. It will work eventually. For now, I can post via my tungsten and simply by e-mail. Woohooo! :) - oliver, posting via e-mail
Now This Is a Cool Phone
Of course I have no clue if it really is, but if this has Bluetooth, I am sold ;)

Presumably it is from the Matrix sequel, where the Nokia 8110 made a very good appearance last time.
Wireless Gaming Compressed
Cringely talks about ProGATE in his latest article. It’s a technology to compress 3D scenes by as much as 50-to-1. In general, it’s right that this is wonderful for networked gaming, but more specifically, it might enable downloadable 3D Games to mobile phones, provided the engine does not need too much CPU power, which does not seem to be the case.
Moblogging Information
Joi Ito’s Moblogging, Blogmapping and Moblogmapping related resources seem to be a good spot to get more information on mobile blogging. I can post with my Tungsten but simply sending a mail or even an MMS would be much preferable. Seems like I really need to get qmail or something installed on this box so this works well. Keeping you posted.
Interaction Design at It’s Finest
Check this out! In it, Matt Jones links to an 8MB PDF file about the BBCi Design Process. It’s simply amazing to read and see how web design can work.
Unofficial Embargo
It seems that the Britian and Europe in general, have started an unofficial embargo against Israel some 2 years back. This concerns military equipment. More here: British embargo grounds Israel’s nuclear capability
Harvard Goes Blogging
Now hardvard goes blogging! They even hired Dave Winer. Check this!
Kablog
I just installed MIDP on the Tungsten and then added Kablog, a MIDP based application to post to MovableType. It simply rocks. I can now post to this thingie here anywhere, with the help of the Palm and some connection to the web, be it via a crade, WLAN card (once I have one ;)) or simply via a cell phone. There is no option to upload images yet but hey, that might come too.
Moblogging
I talked about this before, but wireless blogging, moblogging (mobile blogging) in short, it catching on and now BBC has a story about it with some interesting links.


Google removes ‘anti-India’ mobile app from Play Store
IT giant takes action on request from Punjab Chief Minister
by Special CorrespondentDays after Punjab Chief Minister Amarinder Singh asked Google to remove an anti-India mobile application — ‘2020 Sikh Referendum’ — from its play store, the mobile app has been removed, said a government statement on Tuesday.
A press release from Punjab Chief Minister’s office said that the app was not available any more on Google play store for mobile users in India.
Centre alerted
The Chief Minister, who had also urged the Central government to persuade Google in the matter, had asked the State Director General of Police to coordinate with central security agencies to tackle the threat resulting from the launch of the app.
Notably, the app invited general public to register themselves to vote in the “Punjab Referndum 2020 Khalistan”.
Data stored
The statement said that during analysis of the said application and an associated website in the Digital Investigation Training and Analysis Centre (DITAC) Lab, Punjab, it was found that the data of voters registered through the app was also linked and stored in the web server of the website, namely www.yes2Khalistan.org, created and handled by ‘Sikhs For Justice’ (SFJ), an outfit banned by India.
Notice to Google
“Based on these findings, the Cyber Crime Centre of the Bureau of Investigation, Punjab, had moved to get the app removed from the Google play store and the website blocked for usage in India.
On November 8, 2019, a notice under Section 79 (3) B of Information Technology Act was sent to the Google Legal Cell for immediate removal of the mobile application from the Google Play Store,” said the statement.


From Paper Protoypes
to Prototypes with Sketch, Adobe XD or Marvel App.
Web Apps in HTML / CSS / JavaScript.
Lovely Interaction.
Implementing User Centered Design.
Logo Creation and Color Styleguides.
Inspiring Websites.
From Ideas to Fully Functional Websites.
Realized with Bootstrap, jQuery or WordPress.
Finest Products and Innovative Concepts.
Visualization by Photoshop, Illustrator, Rhino and Keyshot.
Building Prototypes by Lasercutting and 3D Printing.
Ready to start your next project with me? That's great! Just enter your information and I will get back to you as soon as possible.
Client: University Project Think.Make.Start.
Category: Product Design, App Design, Web Design
Year: 2018
Duration: 2 weeks
We asked 100 people what annoyed them most when listening to presentations by others. As a conclusion, we decided to develop a system that allows people to get (live) feedback for the speed, prosody and volume of their voice during a presentation. Our system consists of a smart speaker device with a built-in microphone and a light stripe for live feedback. Furthermore we designed an app that allows the user to get more detailed feedback after a presentation and for training.
Our system can be used as a training partner for your presentation and even during your live presentation to indicate for example the speed of your voice via the light stripe.
Our app has more features, like a singstar version of great speeches (e.g. Steve Jobs, Martin Luther King) and special exercises to improve your individual presentation skills.
This is our team representing six different disciplines.
Client: Hackathon FC Bayern Munich
Category: UI / UX Design, Web Design
Year: 2018
Duration: 3 days
During a 4 day hackathon organized by FC Bayern Munich and UnternehmerTUM I took part in the DHL Challenge to create a platform for the global FC Bayern Family. We designed a webpage where fans of Bayern Munich can take part in different challenges and gather points. They can upload pictures with their Bayern Munich merch which are shown on an interactive world map depending on their current location. A Bayern Munich Family all over the world connected by DHL.
We also developed a VR Bayern Munich Wall with pictures of fans that is transforming into a globe and finally the most know Bayern Munich slogan #miasanmia.
Client: Interdisciplinary University Project
Category: Product Design, UI Design
Year: 2018
Duration: 6 months
The goal of this project was to understand how emotions affect human-machine interaction. Therefore, we built a ticket machine that interacts by using speech-to-speech. We animated suitable responses to our predefined dialog and performed a Wizard of Oz experiment with 60 people. We developed 3 different interfaces for the ticket machine. One which shows only the text output, one showing text and an avatar, and the last interface which shows an emotional avatar with facial expressions. Furthermore we designed a logo for our machine and some tiles to make our text output more attractive and have more visual impact.
Our ticket machine has integrated a working bill validator and a space with a flexible wall where you can get your ticket.
Client: University Project
Category: App Design
Year: 2017
Duration: 6 months
For a university project we had the idea to create an app where travelers and locals are able to connect with each other through similar activities. We were inspired by Google Trips but missing the opportunity to plan real activities together. We developed our App in an iterative process starting by building a prototype and evaluating/testing it right after.
First we asked users how they travel, what they expect during their travels, if they want to get in touch with locals and if yes how they want to interact with them. Based on our findings we created a first paper prototype of our app.
The app allows you to create trips to different cities and select activities in which you would be interested in participating. Based on the dates and activities you enter, locals who are living in this city are shown and you are able to get in contact with them.
After testing our first prototypes we decided to sketch our app in more detail. Therefore, we created a logo and agreed on a color and font styleguide.
Then we started with our iterative process to build a more advanced prototype …
… and later on a real Web-App in HTML/CSS/JS.
Client: University Project
Category: Product Design
Year: 2018
Duration: 6 months
The task was to redesign an already existing product in a more ecological way following the Cradle-to-Cradle approach. We decided to rethink the camping chair in the context of festivals. Many people tend to leave their chair when the festival is over and as most of the chair consists of plastic and the different parts are hard to separate, it is not very ecological.
We created Nachtfalter - a chair that can be folded out of a carton.
By following these six steps you can fold a nice chair with a back out of a bicycle carton.
And the best is you can even fold the same carton to a box to carry your festival equipment or to a flat version if you want to carry the chair in a more convenient way.
This chair consists of only one material, that can be 100% recycled and perfectly fits the needs of a camping chair for festival.
Client: Master Thesis
Category: UI Design
Year: 2019
Duration: 6 months
As part of my master's thesis, we developed an interior concept for an autonomous taxi together with students from Singapore. We called the Interior Concept NAMI. In particular, I was working on the design of the human-machine interaction, which included a smartphone app, a functional armrest with a wooden surface and a ceiling display. The ceiling display integrates a personal assistant that was animated for an exemplary taxi ride.
Styleguide for Interior and UI Design.
Exemplary Logos. We decided to take the top three on the right.
Screens for the NAMI Smartphone App.
Screens for the Ceiling Display inside the interior.
Functional armrest covered by a wooden surface. In a visual ...
... and a physical prototype.
Earlier version of the interior concept.


:: com :: sun :: star :: ucb ::
|
| enum RememberAuthentication |
- Description
- A specification of how long to remember some authentication data.
|
| Values |
| NO |
Do not remember the authentication data (use it once and immediately
forget about it).
|
| SESSION |
Remember the authentication data, but only until the end of the
current session.
|
| PERSISTENT |
Remember the authentication data 'forever'.
|
| Values' Details |
NO
NO,
- Description
- Do not remember the authentication data (use it once and immediately
forget about it).
|
|
SESSION
SESSION,
- Description
- Remember the authentication data, but only until the end of the
current session.
|
|
PERSISTENT
PERSISTENT,
- Description
- Remember the authentication data 'forever'.
|
|
Top of Page
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


SHOWGIRLS A film review by Gharlane of Eddore Copyright 1995 Gharlane of Eddore
SHOWGIRLS * * * out of * * * * possible.
SHOWGIRLS is the second major outing for the production team of Pual Verhoeven, director, and Joe Eszterhas, writer. Their last effort, BASIC INSTINCT, played like the most sumptuous of classic Hitchcock, with a dash of raw sex and sensuality that made it come across with a hit like curry-spiced Tabasco sauce; a dish not to everyone's taste, but certainly a well-crafted movie. Possibly that movie's greatest strength was that the most important events happened offstage, prior to the movie, during the movie, and after the movie... and that, after bringing all the plotlines together neatly, it left the viewer with full knowledge of what *would* happen in the characters' future, so there was no need to film it. There was actually about four hours' worth of screen story there, but Eszterhas found ways to get it all on-screen in two, by leading his audience into analyzing what was really going on; and by still holding their interest with clever misdirection and false trails.
The major elements that made BASIC INSTINCT work so well are present in SHOWGIRLS. We have attractive, sympathetic, but still highly repellent characters; we have shows for the eyes and the ears, plotlines that play on several levels, we have beautifully delineated characters who are drawn from life and very believable, and we have a story of an innocent (who may not be so innocent) who's trying to play straight, trying to improve her station in life, who slips into behaving the way those around her do... but recovers with a flourish, and quits a winner.
In this sense, the movie is a bit of a departure for Verhoeven, who's not known for treating his characters well; but Nomi, the part played by Elizabeth Berkley, definitely opts out of the game in a positive way, and we're left feeling good about her future. This is not one of the great movies, but it's far better than we'd been led to expect by all the negative pre-release publicity. Verhoeven got his first Oscar nomination in 1971, and in the last quarter-century has pushed farther and farther, experimenting with the socially-acceptable limits to movie-making. His most recent three movies, ROBOCOP, TOTAL RECALL, and BASIC INSTINCT, have been a progression of back-door access to American culture, moving from the fantastic through the merely psychotic to the underlying basic drives; and now he's exploring the sleeze. This movie may be the first movie ever made for which the director's contract contained a specific provision that he would not have to deliver an R rated movie. (Verhoeven had to cut several parts of BASIC INSTINCT to get an R rating, although his original version is available on video.)
Many reviewers have taken the Politically-Correct stance that any movie which uses naked ladies as scenery is a Bad Thing; but they miss the fact that this movie is not about naked ladies, it's about people in an environment where naked ladies are common, and WHY such an environment should exist.   An NC-17 movie which isn't sexually exciting says a great deal about the phoniness and emptiness of a social stratum where sex has been robbed of any kind of beauty, power, or value. The one scene in the movie that *could* have been a good sex scene, Berkley and MacLachlan in a swimming pool, is not exciting, because by then we already know his character is a callous manipulator. If anything, it's a rape scene with a victim who's been duped into cooperation.
You don't make a movie about the history of black people in America without using a few black actors; you don't make a movie about World War II without a few guns going off and a few people getting killed; and you don't make a movie about Las Vegas showgirls without showing a few Las Vegas showgirls ... and in an awful lot of Vegas shows, an awful lot of ladies wear very little clothing. This is a legitimate portrayal of a rather seamy side of the entertainment industry, in a town where sex is simply a negotiable commodity.
SHOWGIRLS de-glamorizes the Las Vegas show and sex industries with great effectiveness.
Nomi is played, in a very good performance, by Elizabeth Berkley, who gives us a solid picture of a woman with limited talents who's at the end of her rope, desperate to live a life better than the one she's known. She has nothing to market except her body and her limited dancing ability, and is trying desperately not to to be a hooker, trying to be something better than she seems destined to be. When Nomi realizes she's gone too far for too little, she catches herself just in time to save the most essential part of who she wants to be.
Gina Rivera plays Molly, a dressmaker and costumer who befriends Nomi, providing her with what may be the one solid, positive relationship in Nomi's entire life. Molly is the one who makes the difference, and provides the role model and framework Nomi needs to verify the value system she'll be using for the REST of her life, and Nomi's feelings for Molly are the spur that forces Nomi's decision.  Gershon plays Cristal as a cross between Ava Gardner and Raquel Welch; a fading talent made bitter by self-awareness. Her character is very well drawn and performed; in a major scene in a hospital room, she acknowledges what she is, and, in essence, passes the torch to Nomi. The relationship between the two of them is the most honest one in the movie, and provides part of the impetus Nomi needs to follow a different path.
It is no accident that the three important parts in this movie are women of different stripe; Molly is an honest, hard-working person who means well, and nearly dies because she confuses the glitter and the image with reality. Cristal is a talented dancer who's compromised her ideals and sold herself to be a co-operating part of the system, exchanging self-respect for the species of stardom that can be had in Las Vegas. Nomi believes she can make it without selling herself, succumbs to a degree, and then realizes she CAN make it without selling herself, and doesn't need Las Vegas or its brand of "stardom."
The male parts in this movie are simply props; they exist only to demonstrate and explicate the cultural milieu against which showgirls exist. Kyle MacLachlan, whose single best previous work was as an inhumanly emotionless cop in THE HIDDEN, gives us a nicely reptilian bit of pond scum on two legs, camouflaged as a nice guy. Glenn Plummer plays a dancer who's working as a bellboy, and provides a bit of alternate perspective. Plummer's character is the only one in the movie who's maintaining an interest in dance as a performing art, but even he's succumbed to the cult of manipulation. Plummer's character is the closest thing to a sympathetic male character in the whole movie.
Some of Jost Vacano's cinematography is fantastic, and one particular delineation of Nomi's character alteration, a no-dialog scene using nothing but color changes in the lighting, is utterly terrifying.
This movie is rated NC-17 due to language, sexual situations, full frontal nudity, violence, and probably the costuming as well. I don't see a way this particular story could have been told well without it, and I regard it as a legitimate exercise in movie-making. But don't go see it if you're not in a tough mood; the only person it's possible to like in this movie ends up in an I.C.U. on life support, and there is probably not one character in this movie you'd enjoy meeting in person.
SHOWGIRLS * * * out of * * * * possible.
Starring: Elizabeth Berkley, Gina Gershon, and Gina Ravera, with Kyle MacLachlan, Glenn Plummer, and Alan Rachins. Producers: Alan Marshall and Charles Evans, with Mario Kassar Director: Paul Verhoeven Writer: Joe Eszterhas Cinematographer: Jost Vacano Music: David A. Stewart Choreography: Marguerite Pomerhn-Derricks Production Designer: Allan Cameron Costumes: Ellen Mirojnick Edited by: Mark Goldblatt and Mark Helfrich Rating: NC-17 (i.e. "X") A "Chargeurs" film from MGM/Carolco, opening date 22 Sep 95.
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


scikit-image 0.17.dev0 docs¶
scikit-image is an image processing toolbox for SciPy. View the latest release notes here.
Sections¶
|
Introduction to scikit-image. |
Documentation for the functions included in scikit-image. |
|
Our mission, vision and values. |
How decisions are made in scikit-image. |
|
How to install scikit-image. |
Usage guidelines. |
|
Definitions of common terms. |
Take part in development. Core developers, please read your guide. |
|
Introductory examples |
Conditions on the use and redistribution of this package. |
SciKit-Image Proposals, documents describing major changes to the library. |
|
Community interaction guidelines. |
Indices¶
|
Search this documentation. |
All functions, classes, terms. |


Connected lighting system for cities, Microsoft
Changing users’ behaviors regarding air quality, Philips
Embodied UI design, Philips
Welding training application concept, Kemppi
A proposal for Finnish Tax Administration, Verohallinto
Interventional CT Scanner gantry panel design, Philips
Advanced Push Notification System, Philips
Information visualization for the primary care project, Philips
Online booking platform for Kalasatama Hospital, City of Helsinki
App for children’s healthy eating habit
Visual identity design, Aalto University
Brand identity design, 0100design
Campaign for the public etiquettes
Portable survival kit for emergency situations
Design for emergency evacuation system


A channel to discuss trading. For useful links and more info click the pinned messages to the right.
100 messages
Before 05-Dec-19 12:00 AM
jl777c28-May-19 09:25 AM
with such large amounts it isnt as easy as if you only had a few btc worth
klein28-May-19 09:26 AM
fair enough, would take time to turn around these positions in illiquid markets
jl777c28-May-19 09:26 AM
the problem with ARRR is that there is not way to map it to a normal pubkey
have you tried selling Ti worth of IOTA OTC?
klein28-May-19 09:27 AM
I would have to reconsider my life choices if I ever did
cascrypto28-May-19 09:33 AM
IOTA isn't doing to bad and solved their central problem. Do you follow iota development and do you see the potential fotr iot @jl777c ?
jl777c28-May-19 09:34 AM
just following from a distance. it does seem to be doing ok, but maybe KMD has more room to grow
cascrypto28-May-19 09:35 AM
Nice answer I like
passcombo.com 🏴☠🏴28-May-19 09:57 AM
KMD at it's lowest, Arrr at it's highest, time to convert
Crabby Paddy28-May-19 10:02 AM
any command to get all private keys?
Closest thing i have is list.json which has all 64 private key pubkey and pubadd but its a pain to delete everything except priv keys
hyperDEX28-May-19 10:05 AM
Why not send everything to 1 address then get dumpprivkey on that address?
CHMEX28-May-19 10:08 AM
you can use dumpwallet
1
1
if you set exportdir(edited)
Crabby Paddy28-May-19 10:08 AM
somehow i managed to get my balance all good
but my utxo count is 0
and i cant send out LOL
so im trying to import into my pc agama, to send back
hyperDEX28-May-19 10:47 AM
https://atomiclabs.github.io/ledger-kmd-reward-claim/
This is the easiest way to claim rewards on your ledger s without a app you need to download.
I have reduced the claim fee from 5% of claimed rewards to 0.5% which is a 90% reduction for the next month or so (this will be set in a few hours). Fees collected are used for development funds to build more apps for Komodo and related coins.
Tell your friends @Hollowman9000(edited)
there nothing we need that it can't create(edited)
@hyperDEX
Caglio28-May-19 12:07 PM
sometimes I message myself from other account just to feel loved, and sometimes I sit on my hand until it gets numb, then I touch my moob (man boob) and pretend I am a barely legal German chick named Nancy
2
1
1
2
FlyingDutchman28-May-19 12:32 PM
all i need to access my agama from other computers is my seed and login right?
dukeleto28-May-19 12:54 PM
@FlyingDutchman yep
ZEC is pumping because of this new amazing Zcash fork, it seems. Have we not learned?
Feast your eyes on the amazing jaw-dropping website of this new Zcash fork: https://www.ycash.xyz/
1
2
With massive innovation of changing N,K values, nobody knows how high this will moon
The innovation, it's hard to calculate
Changing address formats!!!!! Light speed ahead of the competition (ZCL), lol
Zcash Foundation and company are helping this pump, they see it as a way to increase their holdings
They are providing devs and servers and much grease to many wheels
But for what end? To dump it?
gcharang28-May-19 12:58 PM
Your local community.
Your loved ones.
Your money.
Ycash.
dukeleto28-May-19 12:58 PM
Everybody knows how well Zcash plays with other kids in the sandbox
jl777c28-May-19 12:59 PM
wait, the zcash foundation is helping ycash?
dukeleto28-May-19 12:59 PM
Yes
Zooko himself has promised support
And Zcash devs are busy helping them now, running testnet seeds and such
jl777c28-May-19 12:59 PM
and ycash is basically a clone with no devs?
dukeleto28-May-19 12:59 PM
This all increases the wealth via the ZEC FR going up
jl777c28-May-19 01:00 PM
ycash has FR?
dukeleto28-May-19 01:00 PM
Yes
5% FR instead of ZEC's
5% in perpetuity
jl777c28-May-19 01:00 PM
going to fund what?
dukeleto28-May-19 01:01 PM
there is a single dev working on YEC as far as I can see, with no blockchain experience at all
none at all
but he does seem to know C++
jl777c28-May-19 01:01 PM
what is going on? very strange, is zcash so desperate for more funds?
dukeleto28-May-19 01:02 PM
yes
It seems that spending ~1M USD/month thru a bear market has put them on the ropes
anything that helps their financial situation seems to be fair game at this point. Zcash is helping Ycash to come into existence, because all ZEC owners get free YEC. But the people creating YEC don't quite understand the relationship they are in with ZEC
jl777c28-May-19 01:04 PM
which is?
dukeleto28-May-19 01:04 PM
donkey
expendable tool
jl777c28-May-19 01:04 PM
for 5% maybe they dont care?
and this is why ZEC is pumping?
dukeleto28-May-19 01:05 PM
The website for YEC was released a few hours ago and almost immediately the price of ZEC jumped, almost at the exact same times
That is the only thing I can make of it. I saw mention on Twitter, that tipped me off
@YORK780 @BitBitCrypto Cause some fork is happening. It’ll dump once they’ve offloaded their bags
jl777c28-May-19 01:06 PM
crazy. how much do they think yec is going to trade for?
dukeleto28-May-19 01:07 PM
This is the ZCL/BTCP thing all over again, but it's a chainfork of ZEC. So ZEC price will pump and dump
Some people paid $400 for ZCL to get some BTCP, which is now worth $2
jl777c28-May-19 01:07 PM
seems the bull market is back
along with bad at math peoples
4
1
ComputerGenie 👴👴👴28-May-19 01:07 PM
We are launching Ycash to restore a goal — mining on commodity hardware — that appears to have been largely abandoned on the Zcash blockchain.
aka
just another lemming money-grab
dukeleto28-May-19 01:08 PM
Yes, everybody will make money for a while, even incompetent/bad/lazy/evil people.
YEC is launching with 192,7 params and no dpow, so it will be VERY susceptible to 51% attacks and will be controlled by FPGAs
@ComputerGenie 👴👴👴 which makes that statement soooo funny
YEC is very publicly saying they refuse to pay for exchange listings
1
1
It's somewhat bizarre
they think they will be added to all the exchanges of the world for free, on account of their big brother Zcash
jl777c28-May-19 01:10 PM
maybe zooko will pay for the listings
1
1
CHMEX28-May-19 01:10 PM
So barterdex it is
dukeleto28-May-19 01:10 PM
@jl777c it probably makes a lot of financial sense for zcash people to pay listing fees so they can dump coins on many exchanges
Imagine how much ZEC FR will want to be sold when the first exchange supports YEC
jl777c28-May-19 01:11 PM
but what about the massive contribution to the fpga community?
dukeleto28-May-19 01:12 PM
zetheron customers will be so happy
jl777c28-May-19 01:12 PM
it seems like another VBK situation, but with zcash behind it, who knows
dukeleto28-May-19 01:12 PM
I feel confident to say that Zcash did not originate Ycash, that is not the case
But Zcash realized quickly that Ycash was very good for their bottom line, even if it looks like a "fight" in marketing world
Ycash was started by Howard Loo, who also created the foundation, and is an old ZEC miner: https://github.com/hloo
Attorney and software developer. hloo has 3 repositories available.  Just the 1 paid dev
ComputerGenie 👴👴👴28-May-19 01:17 PM
I love that the "party line" is always "we love GPUs and want them back" and they always pick some settings that literally disallows about 50 million GPUs that were specifically purchased for mining
jl777c28-May-19 01:24 PM
dont let the facts get in the way of the narrative
1
Caglio28-May-19 01:41 PM
@Deleted User im gonna flip her like a taci
taco
1
1
Tek28-May-19 01:45 PM
frens why do muslims defend their backwards religion?
but how can you be a good person believing in "peace" when all the koran says is to kill everyone that isn't a muslim
islam is culture
islam is also culture lmao go look outside
actionslacks28-May-19 01:46 PM
you think thats bad you should check out the spicier parts of the talmud
1
Tek28-May-19 01:47 PM
@actionslacks im more worried about the immediate threats of islam(edited)


When you use the Seneca framework, you write plugins all the time. They are an easy way to organize your action patterns.
A Seneca plugin is just a function that gets passed an options object, and has a Seneca instance as its this variable. You then add some action patterns in the body of the function, and you’re done. There is no callback.
This article will show some plugin examples, with code, going from basic to advanced. It will cover the plugin API, and the conventions to use when writing them. You’ll need to log the behaviour of your plugins, and you’ll need to know how to debug them, so that will be discussed too.
There are many Seneca plugins published on NPM. Most of them can be extended and modified by overriding their actions. You’ll also need to know how to do this.
Finally, plugins provide you with a way to organize your own code, and to make use of the micro-services approach to software architecture, so that will be discussed too.
Let’s write a plugin that defines one action. The action uses the plugin options argument to build a result.
var plugin = function( options ) {
this.add( {foo:'bar'}, function( args, done ) {
done( null, {color: options.color} )
})
}
The example above defines a single action pattern, foo:bar. This action provides a result based on the options provided to the plugin. Plugin options are not required, but if they are provided, they are passed in as the first argument to the plugin definition function. The options argument is just a JavaScript object with some properties. Seneca makes sure it always exists. Even in the case where you have no options, you’ll still get an empty object.
The context object of the plugin function (that is, the value
of this), is a Seneca instance that you can use to define
actions.  This
Seneca instance provides the standard API, but the logging methods are
special - they append information about the plugin. So when you
call this.log.debug('stuff about my plugin')
, the log
output will contain extra fields identifying the plugin, such as its
name. In this example, you haven’t given the plugin a name (you’ll see
how to do that in a moment), so Seneca will generate a short random
name for you.
You can use the plugin by calling the use method of the Seneca object. This loads the plugin into Seneca, after which the action patterns defined by the plugin are available. You can then call the act method to trigger them, like so:
// simple.js
var seneca = require('seneca')()
var plugin = function( options ) { ... } // as above
seneca.use( plugin, {color:'pink'} )
seneca.act( {foo:'bar'}, console.log )
This code is available in the doc/examples/write-a-plugin example, in the simple.js script. Running the script produces:
$ node simple.js
null { color: 'pink' }
In the output, the null is the first argument to console.log, and indicates that there was no error. The output is a JavaScript object with single property color, the value of which is set from the original options given to the plugin.
Let’s look at our example again.
// simple.js
var plugin = function( options ) {
this.add( {foo:'bar'}, function( args, done ) {
done( null, {color: options.color} )
})
}
As we can see, a plugin is just a function. You can see that there is no callback passed into this function that defines the plugin. So, how does Seneca know that the plugin has fully initialized? It’s an important question, because the plugin might depend on establishing a database connection before it can operate properly.
Many plugins don’t even need to initialize, because all they do is define a set of action patterns. Let’s say in this case we would like to initialise our plugin. As with most things in Seneca, you define an action pattern to handle initialization and make sure it happens in the proper order.
// init.js
var plugin = function( options ) {
seneca.add( {init:'pluginName'}, function( args, done ) {
// do stuff, e.g.
console.log('connecting to db...')
setTimeout(function(){
console.log('connected!')
done()
}, 1000)
})
this.add( {foo:'bar'}, function( args, done ) {
done( null, {color: options.color} )
})
return 'pluginName'
}
For this to work, our plugin needs to have a name. Plugin name and init
value must be exactly the same. In this case return 'pluginName'
serves that purpose. See Give Your Plugin a Name for alternatives to this approach.
When plugin is fed into use
method, seneca waits for its init to finish before continuing. That’s why we call done()
even when it does nothing.
The Seneca use method can also accept module references. That is, if you can require it, you can use it! Let’s update the simple example to show this. First, create a file called foo.js containing the plugin code (all the files in this article are available on the Seneca github at (doc/examples/write-a-plugin).
// foo.js
module.exports = function( options ) {
this.add( {foo:'bar'}, function( args, done ) {
done( null, {color: options.color} )
})
}
The foo.js file is a normal JavaScript file you can load into Node.js with require. It exposes a single function that takes the plugin options. To use the plugin, the code is almost the same as before, except that you pass in the foo.js relative file path in the same way you would for require.
// module.js
var seneca = require('seneca')()
seneca.use( './foo.js', {color:'pink'} )
seneca.act( {foo:'bar'}, console.log )
The code produces the same output as before:
$ node module.js
null { color: 'pink' }
As well as local files and local modules, you can use public plugin modules from npmjs.org. Let’s use seneca-echo plugin as an example. This plugin echoes back arguments you send to the role:echo pattern. First, npm install it:
$ npm install seneca-echo
Then use it:
// echo.js
var seneca = require('seneca')()
seneca.use( 'seneca-echo' )
seneca.act( {role:'echo', foo:'bar'}, console.log )
Running echo.js produces:
$ node echo.js
null { foo: 'bar' }
You aren’t using any options in this example. The seneca-echo plugin just reproduces the arguments passed in. In this case foo:bar. The role property is not included in the output.
The Seneca framework comes with many plugins written by the community. Feel free to write one yourself (after reading this article!). By convention, public and generically useful plugins are prefixed with seneca- as part of their name. This lets you know the module is a Seneca plugin if you see it on NPM. However, its a bit tedious to type in “seneca-“ all the time, so you are allowed to abbreviate plugin names by dropping the “seneca-“ prefix. That means you can use the the seneca-echo by just providing the “echo” part of the name:
seneca.use( 'echo' )
Your plugin needs a name. You can return a string from the plugin definition function to give it one. When you look at the Seneca logs, you can see what your plugin is doing. Let’s try it!
// name0.js
var plugin = function( options ) {
this.add( {foo:'bar'}, function( args, done ) {
done( null, {color: options.color} )
})
return 'name0'
}
var seneca = require('seneca')()
seneca.use( plugin, {color:'pink'} )
seneca.act( {foo:'bar'}, console.log )
And then run it like so:
$ node name0.js --seneca.log=plugin:name0
... DEBUG act name0 - yvgt5y48wqjb IN {foo=bar} ...
... DEBUG act name0 - yvgt5y48wqjb OUT {color=pink} ...
null { color: 'pink' }
This uses Seneca’s log filtering feature to focus on the log lines that you care about. For more details on log filtering, read the logging tutorial.
To avoid repetition, the public plugins drop their “seneca-“ prefix when registering their names. Try this:
$ node echo.js --seneca.log=plugin:echo
... DEBUG plugin echo - add echo - {role=echo} ...
... DEBUG act echo - lkmlk29r6uwt IN {role=echo,foo=bar} ...
... DEBUG act echo - lkmlk29r6uwt OUT {foo=bar} ...
null { foo: 'bar' }
You may have noticed something interesting. There were three lines of logging output that time. Why didn’t you see an “add” line for your “name0” plugin? During the execution of its definition function, it didn’t have a name. You only gave it one when you returned a name. Sometimes this is useful, because you can set a name dynamically. Still, is it possible to set the name initially? Yes! Just give the defining function a name:
// name1.js
var plugin = function name1( options ) {
this.add( {foo:'bar'}, function( args, done ) {
done( null, {color: options.color} )
})
}
var seneca = require('seneca')()
seneca.use( plugin, {color:'pink'} )
seneca.act( {foo:'bar'}, console.log )
Running this gives:
$ node name1.js --seneca.log=plugin:name1
... DEBUG plugin name1 - add name1 - {foo=bar} ...
... DEBUG act name1 - b3uamicogfnm IN {foo=bar} ...
... DEBUG act name1 - b3uamicogfnm OUT {color=pink} ...
null { color: 'pink' }
When you load a plugin as a module then the module reference, as supplied to the use method, becomes the initial name of the module (Of course, you can override this by returning your own name) Here’s the foo.js plugin again:
$ node module.js --seneca.log=plugin:./foo.js
... DEBUG plugin ./foo.js - add ./foo.js - {foo=bar} ...
... DEBUG act ./foo.js - 47ssblskuj59 IN {foo=bar} ...
... DEBUG act ./foo.js - 47ssblskuj59 OUT {color=pink} ...
null { color: 'pink' }
There’s an obvious risk that you might have a naming conflict. Seneca allows this because it’s more useful to have the ability to override plugins. If you’re defining your own set of plugin names, it’s best to choose a short prefix for your project. This is a good idea in general for many frameworks!
For example, if you’re working on the Manhattan project, choose the prefix mh. Then call your “Trinity” plugin mh-trinity.
There are no hard and fast rules for naming your action patterns. However, there are some conventions that help to organize the patterns. Your plugin is providing functionality to the system. This functionality fulfills a role in the system. So it makes sense to use the form role:plugin-name as part of your action pattern. This creates a pattern namespace to avoid clashes with other plugin patterns. The use of the word “role” also indicates that other plugins may override some aspects of this role (that is, aspects of this functionality) by providing extensions to some of the action patterns.
For example, the seneca-vcache plugin overrides the standard entity patterns, of the form role:entity, cmd:*. It does this to transparently add caching to the database store operations.
Another common convention is to use the property “cmd” for the main public commands exposed by the plugin. So, you might have, for example:
var plugin = function trinity( options ) {
this.add( {role:'trinity', cmd:'detonate'}, function( args, done ) {
// ... compress plutonium, etc
})
}
Many of the public Seneca plugins on NPM follow this pattern. You may find other patterns more useful in your own projects, so don’t feel obligated to follow this one.
If you load a plugin multiple times, only the last one loaded will be used. You can however load multiple separate instances of the same plugin, by using tag strings. NOTE: the action patterns will still be overridden, unless the plugin handles this for you (like the example below). The data store plugins, in particular, use this mechanism to support multiple databases in the same system. For more details, read the data entities tutorial. data entities tutorial.
Here’s a simple example that uses tags. In this case, the bar.js plugin defines an action pattern using one of its option properties. This means that different action patterns are defined depending on the options provided.
// bar.js
module.exports = function( options ) {
var tag = this.context.tag
this.add( {foo:'bar', zed:options.zed}, function( args, done ) {
done( null, {color: options.color, tag:tag} )
})
}
You can access the tag value from the context property of the plugin
Seneca instance: this.context.tag
You still want to debug and track each instance of this plugin, so you provide a tag each time you register it with the use method. Tags can be supplied in two ways, either by description object for the plugin, or by suffixing a $ character, and then the tag, to the plugin module reference. Here’s the example code:
// tags.js
var seneca = require('seneca')()
seneca.use( {name:'./bar.js',tag:'AAA'}, {zed:1,color:'red'} )
seneca.use( './bar.js$BBB', {zed:2,color:'green'} )
seneca.act( {foo:'bar',zed:1}, console.log )
seneca.act( {foo:'bar',zed:2}, console.log )
Running this code produces the output:
$ node tags.js
null { color: 'red', tag: 'AAA' }
null { color: 'green', tag: 'BBB' }
Using the debug log shows the different instances of the plugin in action:
$ node tags.js --seneca.log=plugin:./bar.js
... DEBUG plugin ./bar.js AAA add ./bar.js AAA {foo=bar,zed=1} ...
... DEBUG plugin ./bar.js BBB add ./bar.js BBB {foo=bar,zed=2} ...
... DEBUG act ./bar.js AAA pamds7vlteyv IN {foo=bar,zed=1} ...
... DEBUG act ./bar.js BBB 4uxz90gcczn5 IN {foo=bar,zed=2} ...
... DEBUG act ./bar.js AAA pamds7vlteyv OUT {color=red,tag=AAA} ...
null { color: 'red', tag: 'AAA' }
... DEBUG act ./bar.js BBB 4uxz90gcczn5 OUT {color=green,tag=BBB} ...
null { color: 'green', tag: 'BBB' }
To isolate a tag, use these log settings:
$ node tags.js --seneca.log=plugin:./bar.js,tag:AAA
... DEBUG plugin ./bar.js AAA add ./bar.js AAA {foo=bar,zed=1} ...
... DEBUG act ./bar.js AAA 9rp8luozaf92 IN {foo=bar,zed=1} ...
... DEBUG act ./bar.js AAA 9rp8luozaf92 OUT {color=red,tag=AAA} ...
null { color: 'red', tag: 'AAA' }
null { color: 'green', tag: 'BBB' }
It’s useful to provide default option values for users of your
plugin. Seneca provides a utility function to support
this: seneca.util.deepextend
. The deepextend
function works much the same
as _.extend
,
except that it can handle properties at any level. For example:
// deepextend.js
var seneca = require('seneca')()
var foo = {
bar: 1,
colors: {
red: 50,
green: 100,
blue: 150,
}
}
var bar = seneca.util.deepextend(foo,{
bar: 2,
colors: {
red: 200
}
})
console.log(bar)
// { bar: 2, colors: { red: 200, green: 100, blue: 150 } }
The property colors.red
is overridden, but the other colors retain
their default values.
You can use this in your own plugins. Let’s add default options to the foo.js module (as above).
// foo-defopts.js
module.exports = function( options ) {
// Default options
options = this.util.deepextend({
color: 'red',
box: {
width: 100,
height: 200
}
},options)
this.add( {foo:'bar'}, function( args, done ){
done( null, { color: options.color,
box_width: options.box.width,
box_height: options.box.height
})
})
return {name:'foo'}
}
(As an aside, note that you can also specify the name of the
plugin by returning an object of the form `{name:...}`. You'll
see some more properties you can add this return object
below).
The default option structure is used as the base for the user supplied options. Let’s supply some user options that will override the defaults:
// module-defopts.js
var seneca = require('seneca')()
seneca.use( './foo-defopts.js', {
color:'pink',
box:{
width:50
}
})
seneca.act( {foo:'bar'}, console.log )
This code runs the foo:bar action, which produces:
$ node module-defopts.js
null { color: 'pink', box_width: 50, box_height: 200 }
The default values for color
and box.width
(red and 100, respectively), have been overridden by the options provided as the second argument to seneca.use
when the plugin is loaded (pink and 50).
You can load plugin options from configuration files. Seneca looks for a file named seneca.options.js in the current folder, and requires the file if it exists. This file should be a Node.js module that exports a JSON object. For example:
// seneca.options.js
module.exports = {
zed: {
red: 50,
green: 100,
blue: 150,
},
'zed$tag0': {
red: 55,
}
}
You can specify global Seneca options in this file, and you can specify options for individual plugins. Top level properties that match the name of a plugin are used to provide options to plugins when they are loaded.
Let’s see this in action. The zed.js script defines a plugin
that prints out the plugin name and tag
using this.context
(see above), and also prints out the
options provided to the plugin by Seneca.
// zed.js
function zed( options ) {
console.log( this.context.name, this.context.tag, options )
}
var seneca = require('seneca')()
seneca.use( zed )
As the example seneca.options.js file defines a zed property, this is used to provide options to the zed plugin. Running the zed.js script prints out the options loaded from seneca.options.js:
$ node zed.js
zed undefined { red: 50, green: 100, blue: 150 }
If you are using tags to create multiple instances of the same plugin, you can use the $suffix convention to specify options particular to a given tagged plugin instance. The zed-tag.js script is the same as the zed.js script, except that it also creates an additional tagged instance of the zed plugin. Note that the definition of the plugin uses a properties object, with the init
property specifying the plugin definition function.
// zed-tag.js
function zed( options ) {
console.log( this.context.name, this.context.tag, options )
}
var seneca = require('seneca')()
seneca.use( zed )
seneca.use( {init:zed, name:'zed', tag:'tag0'} )
The seneca.options.js file also defines a zed$tag0 property, and the options for the tag0 instance of the zed plugin are taken from this. However, if you run the code, you’ll notice that it also picks up the options defined for the main zed plugin. These become base defaults, so that the special case option, red: 55
overrides the main value.
$ node zed-tag.js
zed undefined { red: 50, green: 100, blue: 150 }
zed tag0 { red: 55, green: 100, blue: 150 }
Sometimes you need to access to all the options provided to Seneca. For example, there is a global timeout value that you might want to use for timeouts. The transport family of plugins do this, see redis-transport for an example.
Inside your plugin function, you can call this.options()
to get back an object containing the entire Seneca options tree:
// zed-access.js
function zed( options ) {
console.log( this.options() )
}
var seneca = require('../../../lib/seneca.js')()
seneca.use( zed )
Running this script produces:
$ node zed-access.js
{ ...
timeout: 33333,
...
zed: { red: 50, green: 100, blue: 150 },
'zed$tag0': { red: 55 },
...
}
You are not required to use the seneca.options.js file. If it exists, it will be loaded and used as the base default for options. You can specify your own configuration file (or an object containing option values), by providing an argument to seneca.options()
. This is useful for different deployment scenarios. For example, the file dev.options.js defines a custom configuration for the zed plugin:
// dev.options.js
module.exports = {
zed: {
green: 110,
}
}
The zed-dev.js script uses this options file, but also gets the default options from seneca.options.js:
function zed( options ) {
console.log( this.context.name, this.context.tag, options )
}
var seneca = require('seneca')()
seneca.options('./dev.options.js')
seneca.use( zed )
And the output has the overridden value for the green
option.
$ node zed-dev.js
zed undefined { red: 50, green: 110, blue: 150 }
Finally, you can specify options on the command line, either via an argument, or an environment variable. Here are some examples using the zed-dev.js script. Use the --seneca.options
command line argument to provide option values. You can use “dot notation” to specify nested options, and you can specify multiple options:
$ node zed-dev.js --seneca.options.zed.red=10 --seneca.options.zed.blue=200
zed undefined { red: 10, green: 110, blue: 200 }
Alternatively, you can use the environment variable SENECA_OPTIONS
to specify options that will be merged into the base defaults (using seneca.util.deepextend
). The format is jsonic jsonic, a lenient, abbreviated, fully compatible version of JSON for lazy developers.
$ SENECA_OPTIONS="{zed:{red:10,blue:200}}" node zed-dev.js
zed undefined { red: 10, green: 110, blue: 200 }
Command line options always override options from other sources. Here is the order of priority, from highest to lowest:
Issues? From spelling errors to broken tutorials and everything in between, report them here.


"ADAR "large, the sixth month of the civil and the twelfth of the ecclesiastical year of the Jews (Esther 3:7, 13; 8:12; 9:1, 15, 17, 19, 21). It included the days extending from the new moon of our March to the new moon of April. The name was first used after the Captivity. When the season was backward, and the lambs not yet of a paschal size, or the barley not forward enough for abib, then a month called Veadar, i.e., a second Adar, was intercalated.
"ADAR "large, the sixth month of the civil and the twelfth of the ecclesiastical year of the Jews (Esther 3:7, 13; 8:12; 9:1, 15, 17, 19, 21). It included the days extending from the new moon of our March to the new moon of April. The name was first used after the Captivity. When the season was backward, and the lambs not yet of a paschal size, or the barley not forward enough for abib, then a month called Veadar, i.e., a second Adar, was intercalated.


Home
About
Storytelling
Design
Can you buy happiness?
Happy Planet Index vs Gross Domestic Product
Happy Planet Index (HPI) per country
How is the Happy Planet Index calculated?
Wellbeing:
How satisfied the residents of each country say they feel with life overall, on a scale from zero to ten.
Life expectancy:
The average number of years a person is expected to live in each country.
Inequality of outcomes:
The inequalities between people within a country, in terms of how long they live, and how happy they feel.
Ecological Footprint:
The average impact that each resident of a country places on the environment.


Shareholders lose multimillion-pound legal battle against Lloyds
A judge in London ruled against thousands of shareholders in their High Court action over the acquisition of HBOS.
Lloyds shareholders have lost a multimillion-pound High Court action over the acquisition of HBOS.
A judge sitting in London on Friday dismissed an action by a group of 5,803 former Lloyds TSB shareholders who claimed they were “mugged” when the bank recommended the January 2009 deal without disclosing HBOS’s true financial state.
Sir Alastair Norris announced his decision following a 2017 trial of the case brought by the shareholders against Lloyds Banking Group and former executives over alleged losses running into millions of pounds.
Lloyds “robustly” contested the civil legal action, saying it did not consider there was “any merit” in the claims.
During the hearing of the dispute, the judge heard from a lawyer for the shareholders that directors recommended the “disastrous” acquisition when, based on information they had, no reasonable director would have done so.
But it was argued on behalf of Lloyds that the allegations of wrongdoing were “entirely devoid of merit”, and the unprecedented claim was “fundamentally flawed at every level”.
A Lloyds Banking Group spokeswoman said: “The group welcomes the court’s decision.
“Throughout this process, the group has sought to act in the interests of our shareholders as a whole.”
Damon Parker, founder and partner of law firm Harcus Parker, which represents 300 institutions and almost 6,000 individuals in the case, said: “Our clients are deeply disappointed by today’s judgment.
“They wish to assess their options and will be considering whether to appeal.”


Can salt water rinsing treat early symptoms of COVID-19? Read More
How does testing and tracing for coronavirus work? Read More
Can “convalescent plasma” help people recover from severe COVID-19? Read More
Could a blood test pinpoint who is at most risk from COVID-19? Read More
Will people take months to recover from symptoms of COVID-19? Read More


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--org.xml.sax.helpers.NamespaceSupport
Encapsulate Namespace logic for use by SAX drivers.
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY.
This class encapsulates the logic of Namespace processing: it tracks the declarations currently in force for each context and automatically processes qualified XML 1.0 names into their Namespace parts; it can also be used in reverse for generating XML 1.0 from Namespaces.
Namespace support objects are reusable, but the reset method must be invoked between each session.
Here is a simple session:
String parts[] = new String[3]; NamespaceSupport support = new NamespaceSupport(); support.pushContext(); support.declarePrefix("", "http://www.w3.org/1999/xhtml"); support.declarePrefix("dc", "http://www.purl.org/dc#"); String parts[] = support.processName("p", parts, false); System.out.println("Namespace URI: " + parts[0]); System.out.println("Local name: " + parts[1]); System.out.println("Raw name: " + parts[2]); String parts[] = support.processName("dc:title", parts, false); System.out.println("Namespace URI: " + parts[0]); System.out.println("Local name: " + parts[1]); System.out.println("Raw name: " + parts[2]); support.popContext();
Note that this class is optimized for the use case where most elements do not contain Namespace declarations: if the same prefix/URI mapping is repeated for each context (for example), this class will be somewhat less efficient.
| Field Summary | |
static java.lang.String |
XMLNS
The XML Namespace as a constant. |
| Constructor Summary | |
NamespaceSupport()
Create a new Namespace support object. |
| Method Summary | |
boolean |
declarePrefix(java.lang.String prefix,
java.lang.String uri)
Declare a Namespace prefix. |
java.util.Enumeration |
getDeclaredPrefixes()
Return an enumeration of all prefixes declared in this context. |
java.lang.String |
getPrefix(java.lang.String uri)
Return one of the prefixes mapped to a Namespace URI. |
java.util.Enumeration |
getPrefixes()
Return an enumeration of all prefixes currently declared. |
java.util.Enumeration |
getPrefixes(java.lang.String uri)
Return an enumeration of all prefixes currently declared for a URI. |
java.lang.String |
getURI(java.lang.String prefix)
Look up a prefix and get the currently-mapped Namespace URI. |
void |
popContext()
Revert to the previous Namespace context. |
java.lang.String[] |
processName(java.lang.String qName,
java.lang.String[] parts,
boolean isAttribute)
Process a raw XML 1.0 name. |
void |
pushContext()
Start a new Namespace context. |
void |
reset()
Reset this Namespace support object for reuse. |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
public static final java.lang.String XMLNS
This is the Namespace URI that is automatically mapped to the "xml" prefix.
| Constructor Detail |
public NamespaceSupport()
| Method Detail |
public void reset()
It is necessary to invoke this method before reusing the Namespace support object for a new session.
public void pushContext()
Normally, you should push a new context at the beginning of each XML element: the new context will automatically inherit the declarations of its parent context, but it will also keep track of which declarations were made within this context.
The Namespace support object always starts with a base context already in force: in this context, only the "xml" prefix is declared.
popContext()
public void popContext()
Normally, you should pop the context at the end of each XML element. After popping the context, all Namespace prefix mappings that were previously in force are restored.
You must not attempt to declare additional Namespace prefixes after popping a context, unless you push another context first.
pushContext()
public boolean declarePrefix(java.lang.String prefix, java.lang.String uri)
This method declares a prefix in the current Namespace context; the prefix will remain in force until this context is popped, unless it is shadowed in a descendant context.
To declare a default Namespace, use the empty string. The prefix must not be "xml" or "xmlns".
Note that you must not declare a prefix after you've pushed and popped another Namespace.
Note that there is an asymmetry in this library: while getPrefix
will not return the default "" prefix,
even if you have declared one; to check for a default prefix,
you have to look it up explicitly using getURI
.
This asymmetry exists to make it easier to look up prefixes
for attribute names, where the default prefix is not allowed.
prefix
- The prefix to declare, or null for the empty
string.uri
- The Namespace URI to associate with the prefix.processName(java.lang.String, java.lang.String[], boolean)
,
getURI(java.lang.String)
,
getPrefix(java.lang.String)
public java.lang.String[] processName(java.lang.String qName, java.lang.String[] parts, boolean isAttribute)
This method processes a raw XML 1.0 name in the current context by removing the prefix and looking it up among the prefixes currently declared. The return value will be the array supplied by the caller, filled in as follows:
All of the strings in the array will be internalized. If the raw name has a prefix that has not been declared, then the return value will be null.
Note that attribute names are processed differently than element names: an unprefixed element name will received the default Namespace (if any), while an unprefixed element name will not.
qName
- The raw XML 1.0 name to be processed.parts
- An array supplied by the caller, capable of
holding at least three members.isAttribute
- A flag indicating whether this is an
attribute name (true) or an element name (false).declarePrefix(java.lang.String, java.lang.String)
,
String.intern()
public java.lang.String getURI(java.lang.String prefix)
This method looks up the prefix in the current context. Use the empty string ("") for the default Namespace.
prefix
- The prefix to look up.getPrefix(java.lang.String)
,
getPrefixes()
public java.util.Enumeration getPrefixes()
Note: if there is a default prefix, it will not be
returned in this enumeration; check for the default prefix
using the getURI
with an argument of "".
getDeclaredPrefixes()
,
getURI(java.lang.String)
public java.lang.String getPrefix(java.lang.String uri)
If more than one prefix is currently mapped to the same
URI, this method will make an arbitrary selection; if you
want all of the prefixes, use the getPrefixes()
method instead.
Note: this will never return the empty (default) prefix;
to check for a default prefix, use the getURI
method with an argument of "".
uri
- The Namespace URI.isAttribute
- true if this prefix is for an attribute
(and the default Namespace is not allowed).getPrefixes(java.lang.String)
,
getURI(java.lang.String)
public java.util.Enumeration getPrefixes(java.lang.String uri)
This method returns prefixes mapped to a specific Namespace
URI. The xml: prefix will be included. If you want only one
prefix that's mapped to the Namespace URI, and you don't care
which one you get, use the getPrefix
method instead.
Note: the empty (default) prefix is never included
in this enumeration; to check for the presence of a default
Namespace, use the getURI
method with an
argument of "".
uri
- The Namespace URI.getPrefix(java.lang.String)
,
getDeclaredPrefixes()
,
getURI(java.lang.String)
public java.util.Enumeration getDeclaredPrefixes()
The empty (default) prefix will be included in this
enumeration; note that this behaviour differs from that of
getPrefix(java.lang.String)
and getPrefixes()
.
getPrefixes()
,
getURI(java.lang.String)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |