PLANET SICK-BOY: http://www.sick-boy.com "We Put the SIN in Cinema"
Disney's annual kiddie-pic summer extravaganzas are usually pretty sure things box-office-wise, but Dinosaur is a whole different story. First, the Mouse House bumped up its customary mid-June release date for the weekend before Memorial Day. Then they hired a screenwriter with an extensive background in horror films to pen the story, which has resulted in Dinosaur nabbing an un-Disney-esque `PG' rating (the same as Woody Allen's film, which is being released the same day). Oh, and there's also the little issue of recouping the money it cost to make the film, which has been rumored to be in the $150-200 million range (it cost $80 million just to build the facility where the film was created).
Kids, of course, don't give a flying fig about a film's price tag. What they do care about is seeing cute, cuddly creatures with funny voices and promotional tie-ins at fast-food chains and toys that they can get their parents to buy simply by threatening to hold their breath until they turn blue. And I'm just not sure that Dinosaur is that film. Like Antz, the creatures in this film are downright unattractive, and if Dinosaur pulls in numbers much higher than its CG animated predecessor, you will literally be able to see heads rolling down South Buena Vista Street.
Dinosaur begins with the breathtaking ten-minute minute journey of an Iguanodon egg from its mother's nest to a tree inhabited by a tribe of lemurs. There's no dialogue for this segment of the film, which makes it even more appealing as viewers will be able to fully concentrate on the computer-generated creatures inserted over real backgrounds. But once the egg hatches, the ugly things start talking. The head lemur, Yar (Ossie Davis, Doctor Dolittle), sees the baby Aladar as a dangerous, cold-blooded monster, but he eventually decides to raise him like a son.
Flash forward several years, where Aladar (D.B. Sweeney, Fox's cancelled Harsh Realm) is now several times larger than even the largest lemur. He watches sadly as the boy primates and girl primates practice mating rituals, fully knowing that he'll never find one of his own to fall in love with. Then a meteor hits, and the world bursts into flames, leaving Aladar and the surviving lemurs to flee through a Nam-like flaming jungle, where they run into a herd of various plant-eating dinosaurs looking for a new nesting ground.
Although Aladar has never even seen another dinosaur, he gets to experience the full gamut of dealing with his own species, from bureaucracy (butting heads with militaristic head dinosaur Kron), to love (Kron's sister Neera [Julianna Margulies, ER]), to pity (by helping older, slower dinosaurs Eema [Della Reese, Touched By An Angel] and Baylene [Joan Plowright, Tea With Mussolini]), to fear (being stalked by two blood-thirsty Carnotaurs).
Dinosaur will be way too scary for some young kids (several were howling during my screening, and many families left early). Maybe Disney thought that the whole running-through-the-burning-forest thing would be okay because they already did it in Bambi. But here, it's more like Hell on Earth. And the Carnotaurs are a little too much. Dinosaur was co-directed by Ralph Zondag (We're Back! A Dinosaur's Story) and first-timer Eric Leighton, who previously worked as an animator on the creepy films James & the Giant Peach and The Nightmare Before Christmas. The script was co-written by Robert Nelson Jacobs (Out to Sea) and John Harrison, who is best known for his work in the horror industry (Tales From the Crypt, Creepshow).
Thanks to the cost of producing a CG film, Dinosaur clocks in at a lean eighty-two minutes and offers no superfluous plot. The voice work is merely adequate, with Marguiles, Sweeney and Alfre Woodard (Love & Basketball) particularly unstriking.
1:22 - PG for intense images and violence
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


This is a pie chart prepared especially for presenting hierarchical category structure and is dedicated for non-technical people. So it's simple, colorful and easy to use.


I realized I was maybe a bit inflamatory in that other post's title.  Except in one big way, that I explain in that post. I know a lot of thought went into Python's Unicode support; while it misses the mark in this one way, it gets a lot of things right. In fact, if it didn't get those things right, I don't think the sys.setdefaultencoding hack would work as well as I think it will. It's only so frustrating because it's so close!


|
|||||
|
More than 4000 choices. Not sure of the price. Everyone telling you what to do. It’s picking a college! It’s amazing that anyone ever picks the right college. Let the PRO- fessors – the folks who know – give their best, insider advice about how to pick. Here are six more tips: 1. Reach for the stars only if you really are a star. You might be at the top of your class in high school. But the competition increases exponentially when you get to primo colleges. Don’t apply to MIT or Caltech simply because you got a 5 on your Physics AP test or won the science fair. It’s much better to go to a somewhat less distinguished school than to vastly overestimate your level of genius and end up with the self-esteem of a gnat. 4-Star Tip. Be careful about applying to “hot” schools. At any given time some school or other is super popular and virtually impossible to get into. Right now it’s supposedly NYU and Wash U St. Louis. Next year it’ll be someplace else. 2. If you’re in the 48% … Almost half of college students go to community colleges – two year colleges, sometimes called junior colleges. If you decide to join them, do so only because these colleges have something to offer you. Often community colleges have more vocational kinds of degrees – training you to be, say, an EMT or prison guard. Don’t go there looking for international relations or cell genetics. And if you’re thinking of transferring to a 4-year college after your stint at community college, be sure that the courses you’ve completed really will transfer. You wouldn’t want to do those first-year, “mick” courses twice. 3. Take it on the road. You’ll definitely want to visit some of the schools you’re interested in. Be sure to go at the right time, preferably when classes are in session. Not on weekends or vacations when you can’t see the operation in action. 5-Star Tip. While visiting, keep in mind that the tour guides and admissions officers are salespeople. Just like on the used car lot, they’ll show you the good stuff (like the student union, the gym, and the food service) and avoid bringing up the bad stuff (the run-down classrooms and labs, the 1960’s vintage dorms, and the wait-lists for all the popular courses). Don’t let the romance of college keep you from critically evaluating the college, just like you would any other purchase. 4. Live like the natives. Most colleges have programs where you can visit the college during the academic year and live in a dorm for a couple days. Some even arrange for actual college students, at some places called “shepherds,” to take you along to their classes and to other college activities. If you do get to a real lecture, try to imagine yourself taking this class from this professor next year. Ask yourself: does the prof. teach well? and are the students learning well? Trust your instincts. You know a dud when you see it. 5. You’ve got a mouth. Never hesitate to ask questions throughout the college selection process. You’re making a major purchase – actually 4 or 5, one each year – and it behooves you to get as much information as you can before you sign on – and pay up. So ask away during your visit to the college – and you can even e-mail back the admissions office, or any people you met on your tour, after you get home. Come the end of the selection-procedure, if you’re lucky enough to have a choice among colleges, speak up again and get all your questions answered. In some situations, you can even ask your preferred school to match the financial aid offer of a less preferred school. Now’s not the time to be a wallflower. Extra Pointer. Wait listed? Fuggetaboutit. Don’t wait. Last year at some choice schools virtually no one got in off the wait list. 6. Know thyself– but don’t have a cow. It’s good to pick a college that reflects your goals, your passion, and yourself. But there are plenty of colleges you could attend that you would love and would give you a great education. Don’t go crazy trying to find “the one.” There isn’t one. Source: Fastweb |
|||||
| If investment, financial, mortgage or insurance planning and/or products are required, College and Retirement Solutions, LLC may refer you to one of its affiliates, including The Ziering Insurance Agency. Any discussion of the Tax implications of planning is strictly for general purposes. Neither "CRS" nor its representatives may give specific tax advice. One should seek the advice and counsel of their accountant and/or tax advisor for information regarding their particular situation. |


Hindustan Media rises 14% after Q2 profit jumps 54%
The company's tax expense stood at Rs 17.8 crore versus Rs 6.1 crore, YoY.
Hindustan Media Ventures shares rose 14 percent intraday on November 1 after the company reported a 54 percent jump in its September quarter net profit.
The company's Q2 net profit rose 54.6 percent at Rs 20.2 crore against Rs 13.1 crore in the same quarter last fiscal.
The revenue was down 6.3 percent at Rs 192.7 crore against Rs 205.7 crore.
Earnings before interest, tax, depreciation and amortisation (EBITDA) was up at Rs 20.3 crore versus Rs 8.4 crore, while EBITDA margin was up 640 bps at 10.5 percent.
The company's tax expense stood at Rs 17.8 crore versus Rs 6.1 crore, YoY.
At 13:9 hours, Hindustan Media Ventures was quoting at Rs 86.00, up Rs 10.65, or 14.13 percent, on the BSE.
The share touched its 52-week high of Rs 149.75 on October 24, 2018 and 52-week low of Rs 61 on August 24, 2019.
It is trading 44.24 percent below its 52-week high and 36.89 percent above its 52-week low.Special Thursday Expiry on 10th 7th Nov
Early Closure to The Great Diwali Discount. Last Chance to get Moneycontrol PRO for a year @ Rs. 289/- only
Coupon code: DIWALI


Koimoi Bollywood Music Countdown Audience Poll October 2019: From Housefull 4’s Shaitan Ka Saala To Marjaavaan’s Tum Hi Aana – VOTE NOW!
Those who are new here, please note that this is not like the regular countdown lists.
by Koimoi.com TeamNew month, some of the new songs – from Marjaavaan‘s Tum Hi Aana to Housefull 4‘s Shaitan Ka Saala and we’re back with ‘Koimoi Bollywood Music Countdown Audience Poll’ for the songs that ruled the month of October 2019. Those who are new here, please note that this is not like the regular countdown lists, because in this you will get to choose your favourite song instead of going with a pre-decided list.
Tum Hi Aana (Marjaavaan)
Featuring the leads – Sidharth and Tara, the song shows a grief-desolated Sidharth Malhotra remembering the fond memories of Tara Sutaria while he is in jail. The video shows how the two lovebirds spent winsome time with each other and everything slowly destroying for them. The song alternates between the past and the present. The song outlines how their love story ends with Raghu eventually murdering Zoya at the end of the song and that will surely pique your anticipation about the storyline of the film.
Shaitan Ka Saala (Housefull 4)
Shaitaan Ka Saala is like an introductory song for Akshay Kumar which features the actor in a hilarious 1419 avatar as ‘Raavan’. The song showcases Akshay Kumar’s 1419 version with his father being a king seeming to be tired of his womanizer habits. Bala ‘Shaitan Ka Saala’ in the entire song is having a gala time around girls. There are some hilarious moments with Akshay’s tremendous expressions, a glimpse of Kriti Sanon. The song is filled with entertainment and we’re sure that Housefull 4 is going to be ’10 times more’ entertaining as promised by the makers.
Ek Chumma (Housefull 4)
Ek Chumma gives us an idea of how crazy the chemistry between the characters is going to be. It’s not only romantic but also very mad! The three leading ladies – Kriti Sanon, Pooja Hegde and Kriti Kharbanda look ravishing in black and red in this quirky track The song is composed by Sohail Sen and crooned by him along with Altamash Faridi, Jyotica Tangdi. The lyrics are penned by Sameer Anjaan.
Teri Mitti (Kesari)
This song from Kesari will surely leave you teary-eyed. This emotional song, sung by B Praak is a tribute to all the soldiers fighting for their countries on the borders. The music has been composed by Arko and the lyrics are penned down by Manoj Muntashir. The song will surely give you goosebumps with a feel of patriotism.
Jai Jai Shiv Shankar (War)
A big-budget Holi song, Jai Jai Shivshankar showcases the dancing skills of both the maverick performers. The quirky lyrics especially the line “Jai Jai Shivshankar aaj mood hai bhayankar”, sums it up for the desi fun quotient. The powerful vocals of Vishal Dadlani and Benny Dayal too are the highlights of the song. It has chartbuster written all over it!
Ghungroo (War)
Hrithik and Vaani’s scorching chemistry is the talking point of Ghungroo Song which is an out and out party track sung by Arijit Singh and Shilpa Rao. The hot pair is setting the temperature soaring especially with their dance moves. The song is a recreation of the 1982 classic ‘Ghungroo Toot Gaye’.
Bekhayali (Kabir Singh)
This surely is still topping many playlists, Bekhayali from Kabir Singh has become the love anthem since it’s out. There are two versions of the song, one is by Sachet Tandon and other is by Arijit Singh.
Ve Maahi (Kesari)
Arijit Singh and Asees Kaur’s super-sweet romantic track has a certain attractiveness to it.
Tujhe Kitna Chahne Lage (Kabir Singh)
Apart from the list-topper Bekhayali and Kaise Hua, we have a new entry from Shahid Kapoor’s Kabir Singh. Mithoon’s soulful voice ensures the track to be in our playlist for a long time even after the release. There’s another version of the song sung by Jubin Nautiyal and it’s tough to choose one from them.
Pal Pal Dil Ke Paas (Title Track)
Singers Arijit Singh and Parampara have come together to croon the title track of the film, Pal Pal Dil Ke Paas. The track has been composed by Sachet-Parampara of Bekhayali fame and Rishi Rich.


This is a demonstration page, that shows almost everything there is to know about the CSS rules regarding flexbox. Click on the buttons below to see how the different rules apply to an element with the display of flex.


Hi Folks,
In Rails we have Ploymorphic Association whenever we need to connect one model to more than one model.
I had a situation where i need polymorphic association with has_many :through
Here I am showing an simple example of polymorphic association with has_many :through
We have Contact
, Plan
and Template
as a ActiveRecord
Classes.
We have following scenarios.
Plan has_many Contacts
Contact has_many Plans
Template has_many Contacts
Contact has_many Templates
which is vice versa of 3.
So here is the main problem. Here to solve this we need two more tables other then Plans
, Contants
and Templates
.
My Plan
Model looks like:
1
2
3
4
class Plan < ActiveRecord : :Base
has_many :plan_contacts
has_many :contacts , :through => :plan_contacts
end
My Template
Model looks like:
1
2
3
4
class Template < ActiveRecord : :Base
has_many :template_contacts
has_many :contacts , :through => :template_contacts
end
My Contact
Model looks like:
1
2
3
4
5
6
7
8
class Contact < ActiveRecord : :Base
has_many :template_contacts
has_many :plan_contacts
has_many :templates , :through => :template_contacts
has_many :plans , :through => :plan_contacts
end
And here are two different tables for handling many_to_many
Handling Plan
and Contact
here.
1
2
3
4
class PlanContact < ActiveRecord : :Base
belongs_to :plan
belongs_to :contact
end
Handling Template
and Contact
here.
1
2
3
4
class TemplateContact < ActiveRecord : :Base
belongs_to :template
belongs_to :contact
end
This problem can be solved using only one table. Just we need to mark that table as a polymorphic.
We are calling that tables as contact_details
. Here is class looks like.
1
2
3
4
class ContactDetail < ActiveRecord : :Base
belongs_to :contactable , :polymorphic => true
belongs_to :contact
end
Migration should look like:
1
2
3
4
5
6
7
8
9
10
class CreateContactDetails < ActiveRecord : :Migration
def change
create_table :contact_details do | t |
t . integer :contact_id
t . integer :contactable_id
t . string :contactable_type
t . timestamps
end
end
end
Now change your Contact
model like:
1
2
3
4
5
6
class Contact < ActiveRecord : :Base
has_many :plans , :through => :contact_details , :source => :contactable , :source_type => 'Plan'
has_many :templates , :through => :contact_details , :source => :contactable , :source_type => 'Template'
has_many :contact_details
accepts_nested_attributes_for :plans , :templates
end
Now change your Plan
model like:
1
2
3
4
class Plan < ActiveRecord : :Base
has_many :contacts , :through => :contact_details
has_many :contact_details , :as => :contactable
end
Same way Template
model like:
1
2
3
4
class Template < ActiveRecord : :Base
has_many :contacts , :through => :contact_details
has_many :contact_details , :as => :contactable
end
So you can see we can use one table(contact_details) for both plan and template
1
2
3
4
5
6
7
8
9
10
11
contact = Contact . create ( :name => 'Rays' )
template = Template . create ( :name => 'template 1' )
plan = Plan . create ( :name => 'plan' )
contact . plans << plan
contact . templates << template
template . contacts => [ contact ]
plan . contacts => [ contact ]
contact . templates => [ template ]
contact . plans => [ plans ]
so if you have accepts_nested_attributes_for :template then you can create template for contact in a form
1
Contact . create ( :name => 'abc' , :templates_attributes => { '0' => { 'name' => 'Tech' }})
it will create an entry in templates table and and entry in contact_details
So in this way we dont need to write much code.we can reduce tables number
I hope it will be helpful for you
Reference links :


We are a marketplace for local organic farmers to connect with their customer base via a responsive web app. Foode Dapp is an e-commerce site built with the power of the blockchain. The real power of the blockchain is Foode using the blockchain to allow farmers the chance to show transparency of their supply chain logistics from farm to consumer. Using the crowdsourcing of reputation to build trust that they are organic. Allowing farmers to connect with locals and have a history of digital certificates that prove their trustworthiness.


Florida State fires football coach Willie Taggart after he goes 9-12 in parts of two seasons
by EndPlayTALLAHASSEE, Fla. - TALLAHASSEE, Fla. (AP) - Florida State fires football coach Willie Taggart after he goes 9-12 in parts of two seasons.
TALLAHASSEE, Fla. - TALLAHASSEE, Fla. (AP) - Florida State fires football coach Willie Taggart after he goes 9-12 in parts of two seasons.


Node.js v0.10.7 Manual & Documentation
Table of Contents
- TLS (SSL)
- Client-initiated renegotiation attack mitigation
- NPN and SNI
- tls.getCiphers()
- tls.createServer(options, [secureConnectionListener])
- tls.SLAB_BUFFER_SIZE
- tls.connect(options, [callback])
- tls.connect(port, [host], [options], [callback])
- tls.createSecurePair([credentials], [isServer], [requestCert], [rejectUnauthorized])
- Class: SecurePair
- Class: tls.Server
- Class: CryptoStream
- Class: tls.CleartextStream
TLS (SSL)#
Stability: 3 - Stable
Use require('tls')
to access this module.
The tls
module uses OpenSSL to provide Transport Layer Security and/or
Secure Socket Layer: encrypted stream communication.
TLS/SSL is a public/private key infrastructure. Each client and each server must have a private key. A private key is created like this
openssl genrsa -out ryans-key.pem 1024
All severs and some clients need to have a certificate. Certificates are public keys signed by a Certificate Authority or self-signed. The first step to getting a certificate is to create a "Certificate Signing Request" (CSR) file. This is done with:
openssl req -new -key ryans-key.pem -out ryans-csr.pem
To create a self-signed certificate with the CSR, do this:
openssl x509 -req -in ryans-csr.pem -signkey ryans-key.pem -out ryans-cert.pem
Alternatively you can send the CSR to a Certificate Authority for signing.
(TODO: docs on creating a CA, for now interested users should just look at
test/fixtures/keys/Makefile
in the Node source code)
To create .pfx or .p12, do this:
openssl pkcs12 -export -in agent5-cert.pem -inkey agent5-key.pem \
-certfile ca-cert.pem -out agent5.pfx
in
: certificateinkey
: private keycertfile
: all CA certs concatenated in one file likecat ca1-cert.pem ca2-cert.pem > ca-cert.pem
Client-initiated renegotiation attack mitigation#
The TLS protocol lets the client renegotiate certain aspects of the TLS session. Unfortunately, session renegotiation requires a disproportional amount of server-side resources, which makes it a potential vector for denial-of-service attacks.
To mitigate this, renegotiations are limited to three times every 10 minutes. An error is emitted on the CleartextStream instance when the threshold is exceeded. The limits are configurable:
tls.CLIENT_RENEG_LIMIT
: renegotiation limit, default is 3.tls.CLIENT_RENEG_WINDOW
: renegotiation window in seconds, default is10 minutes.
Don't change the defaults unless you know what you are doing.
To test your server, connect to it with openssl s_client -connect address:port
and tap R<CR>
(that's the letter R
followed by a carriage return) a few
times.
NPN and SNI#
NPN (Next Protocol Negotiation) and SNI (Server Name Indication) are TLS handshake extensions allowing you:
- NPN - to use one TLS server for multiple protocols (HTTP, SPDY)
- SNI - to use one TLS server for multiple hostnames with different SSL certificates.
tls.getCiphers()#
Returns an array with the names of the supported SSL ciphers.
Example:
var ciphers = tls.getCiphers();
console.log(ciphers); // ['AES128-SHA', 'AES256-SHA', ...]
tls.createServer(options, [secureConnectionListener])#
Creates a new tls.Server. The connectionListener
argument is
automatically set as a listener for the secureConnection event. The
options
object has these possibilities:
pfx
: A string orBuffer
containing the private key, certificate and CA certs of the server in PFX or PKCS12 format. (Mutually exclusive with thekey
,cert
andca
options.)key
: A string orBuffer
containing the private key of the server in PEM format. (Required)passphrase
: A string of passphrase for the private key or pfx.cert
: A string orBuffer
containing the certificate key of the server in PEM format. (Required)ca
: An array of strings orBuffer
s of trusted certificates. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections.crl
: Either a string or list of strings of PEM encoded CRLs (Certificate Revocation List)ciphers
: A string describing the ciphers to use or exclude.To mitigate BEAST attacks it is recommended that you use this option in conjunction with the
honorCipherOrder
option described below to prioritize the non-CBC cipher.Defaults to
ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH
. Consult the OpenSSL cipher list format documentation for details on the format.ECDHE-RSA-AES128-SHA256
andAES128-GCM-SHA256
are used when node.js is linked against OpenSSL 1.0.1 or newer and the client speaks TLS 1.2, RC4 is used as a secure fallback.NOTE: Previous revisions of this section suggested
AES256-SHA
as an acceptable cipher. Unfortunately,AES256-SHA
is a CBC cipher and therefore susceptible to BEAST attacks. Do not use it.handshakeTimeout
: Abort the connection if the SSL/TLS handshake does not finish in this many milliseconds. The default is 120 seconds.A
'clientError'
is emitted on thetls.Server
object whenever a handshake times out.honorCipherOrder
: When choosing a cipher, use the server's preferences instead of the client preferences.Note that if SSLv2 is used, the server will send its list of preferences to the client, and the client chooses the cipher.
Although, this option is disabled by default, it is recommended that you use this option in conjunction with the
ciphers
option to mitigate BEAST attacks.requestCert
: Iftrue
the server will request a certificate from clients that connect and attempt to verify that certificate. Default:false
.rejectUnauthorized
: Iftrue
the server will reject any connection which is not authorized with the list of supplied CAs. This option only has an effect ifrequestCert
istrue
. Default:false
.NPNProtocols
: An array orBuffer
of possible NPN protocols. (Protocols should be ordered by their priority).SNICallback
: A function that will be called if client supports SNI TLS extension. Only one argument will be passed to it:servername
. AndSNICallback
should return SecureContext instance. (You can usecrypto.createCredentials(...).context
to get proper SecureContext). IfSNICallback
wasn't provided - default callback with high-level API will be used (see below).sessionIdContext
: A string containing a opaque identifier for session resumption. IfrequestCert
istrue
, the default is MD5 hash value generated from command-line. Otherwise, the default is not provided.
Here is a simple example echo server:
var tls = require('tls');
var fs = require('fs');
var options = {
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem'),
// This is necessary only if using the client certificate authentication.
requestCert: true,
// This is necessary only if the client uses the self-signed certificate.
ca: [ fs.readFileSync('client-cert.pem') ]
};
var server = tls.createServer(options, function(cleartextStream) {
console.log('server connected',
cleartextStream.authorized ? 'authorized' : 'unauthorized');
cleartextStream.write("welcome!\n");
cleartextStream.setEncoding('utf8');
cleartextStream.pipe(cleartextStream);
});
server.listen(8000, function() {
console.log('server bound');
});
Or
var tls = require('tls');
var fs = require('fs');
var options = {
pfx: fs.readFileSync('server.pfx'),
// This is necessary only if using the client certificate authentication.
requestCert: true,
};
var server = tls.createServer(options, function(cleartextStream) {
console.log('server connected',
cleartextStream.authorized ? 'authorized' : 'unauthorized');
cleartextStream.write("welcome!\n");
cleartextStream.setEncoding('utf8');
cleartextStream.pipe(cleartextStream);
});
server.listen(8000, function() {
console.log('server bound');
});
You can test this server by connecting to it with openssl s_client
:
openssl s_client -connect <IP_ADDRESS>:8000
tls.SLAB_BUFFER_SIZE#
Size of slab buffer used by all tls servers and clients.
Default: 10 * 1024 * 1024
.
Don't change the defaults unless you know what you are doing.
tls.connect(options, [callback])#
tls.connect(port, [host], [options], [callback])#
Creates a new client connection to the given port
and host
(old API) or
options.port
and options.host
. (If host
is omitted, it defaults to
localhost
.) options
should be an object which specifies:
host
: Host the client should connect toport
: Port the client should connect tosocket
: Establish secure connection on a given socket rather than creating a new socket. If this option is specified,host
andport
are ignored.pfx
: A string orBuffer
containing the private key, certificate and CA certs of the server in PFX or PKCS12 format.key
: A string orBuffer
containing the private key of the client in PEM format.passphrase
: A string of passphrase for the private key or pfx.cert
: A string orBuffer
containing the certificate key of the client in PEM format.ca
: An array of strings orBuffer
s of trusted certificates. If this is omitted several well known "root" CAs will be used, like VeriSign. These are used to authorize connections.rejectUnauthorized
: Iftrue
, the server certificate is verified against the list of supplied CAs. An'error'
event is emitted if verification fails. Default:true
.NPNProtocols
: An array of string orBuffer
containing supported NPN protocols.Buffer
should have following format:0x05hello0x05world
, where first byte is next protocol name's length. (Passing array should usually be much simpler:['hello', 'world']
.)servername
: Servername for SNI (Server Name Indication) TLS extension.
The callback
parameter will be added as a listener for the
'secureConnect' event.
tls.connect()
returns a CleartextStream object.
Here is an example of a client of echo server as described previously:
var tls = require('tls');
var fs = require('fs');
var options = {
// These are necessary only if using the client certificate authentication
key: fs.readFileSync('client-key.pem'),
cert: fs.readFileSync('client-cert.pem'),
// This is necessary only if the server uses the self-signed certificate
ca: [ fs.readFileSync('server-cert.pem') ]
};
var cleartextStream = tls.connect(8000, options, function() {
console.log('client connected',
cleartextStream.authorized ? 'authorized' : 'unauthorized');
process.stdin.pipe(cleartextStream);
process.stdin.resume();
});
cleartextStream.setEncoding('utf8');
cleartextStream.on('data', function(data) {
console.log(data);
});
cleartextStream.on('end', function() {
server.close();
});
Or
var tls = require('tls');
var fs = require('fs');
var options = {
pfx: fs.readFileSync('client.pfx')
};
var cleartextStream = tls.connect(8000, options, function() {
console.log('client connected',
cleartextStream.authorized ? 'authorized' : 'unauthorized');
process.stdin.pipe(cleartextStream);
process.stdin.resume();
});
cleartextStream.setEncoding('utf8');
cleartextStream.on('data', function(data) {
console.log(data);
});
cleartextStream.on('end', function() {
server.close();
});
tls.createSecurePair([credentials], [isServer], [requestCert], [rejectUnauthorized])#
Creates a new secure pair object with two streams, one of which reads/writes encrypted data, and one reads/writes cleartext data. Generally the encrypted one is piped to/from an incoming encrypted data stream, and the cleartext one is used as a replacement for the initial encrypted stream.
credentials
: A credentials object from crypto.createCredentials( ... )isServer
: A boolean indicating whether this tls connection should be opened as a server or a client.requestCert
: A boolean indicating whether a server should request a certificate from a connecting client. Only applies to server connections.rejectUnauthorized
: A boolean indicating whether a server should automatically reject clients with invalid certificates. Only applies to servers withrequestCert
enabled.
tls.createSecurePair()
returns a SecurePair object with [cleartext][] and
encrypted
stream properties.
Class: SecurePair#
Returned by tls.createSecurePair.
Event: 'secure'#
The event is emitted from the SecurePair once the pair has successfully established a secure connection.
Similarly to the checking for the server 'secureConnection' event, pair.cleartext.authorized should be checked to confirm whether the certificate used properly authorized.
Class: tls.Server#
This class is a subclass of net.Server
and has the same methods on it.
Instead of accepting just raw TCP connections, this accepts encrypted
connections using TLS or SSL.
Event: 'secureConnection'#
function (cleartextStream) {}
This event is emitted after a new connection has been successfully handshaked. The argument is a instance of CleartextStream. It has all the common stream methods and events.
cleartextStream.authorized
is a boolean value which indicates if the
client has verified by one of the supplied certificate authorities for the
server. If cleartextStream.authorized
is false, then
cleartextStream.authorizationError
is set to describe how authorization
failed. Implied but worth mentioning: depending on the settings of the TLS
server, you unauthorized connections may be accepted.
cleartextStream.npnProtocol
is a string containing selected NPN protocol.
cleartextStream.servername
is a string containing servername requested with
SNI.
Event: 'clientError'#
function (exception, securePair) { }
When a client connection emits an 'error' event before secure connection is established - it will be forwarded here.
securePair
is the tls.SecurePair
that the error originated from.
Event: 'newSession'#
function (sessionId, sessionData) { }
Emitted on creation of TLS session. May be used to store sessions in external storage.
Event: 'resumeSession'#
function (sessionId, callback) { }
Emitted when client wants to resume previous TLS session. Event listener may
perform lookup in external storage using given sessionId
, and invoke
callback(null, sessionData)
once finished. If session can't be resumed
(i.e. doesn't exist in storage) one may call callback(null, null)
. Calling
callback(err)
will terminate incoming connection and destroy socket.
server.listen(port, [host], [callback])#
Begin accepting connections on the specified port
and host
. If the
host
is omitted, the server will accept connections directed to any
IPv4 address (INADDR_ANY
).
This function is asynchronous. The last parameter callback
will be called
when the server has been bound.
See net.Server
for more information.
server.close()#
Stops the server from accepting new connections. This function is
asynchronous, the server is finally closed when the server emits a 'close'
event.
server.address()#
Returns the bound address, the address family name and port of the server as reported by the operating system. See net.Server.address() for more information.
server.addContext(hostname, credentials)#
Add secure context that will be used if client request's SNI hostname is
matching passed hostname
(wildcards can be used). credentials
can contain
key
, cert
and ca
.
server.maxConnections#
Set this property to reject connections when the server's connection count gets high.
server.connections#
The number of concurrent connections on the server.
Class: CryptoStream#
This is an encrypted stream.
cryptoStream.bytesWritten#
A proxy to the underlying socket's bytesWritten accessor, this will return the total bytes written to the socket, including the TLS overhead.
Class: tls.CleartextStream#
This is a stream on top of the Encrypted stream that makes it possible to read/write an encrypted data as a cleartext data.
This instance implements a duplex Stream interfaces. It has all the common stream methods and events.
A ClearTextStream is the clear
member of a SecurePair object.
Event: 'secureConnect'#
This event is emitted after a new connection has been successfully handshaked.
The listener will be called no matter if the server's certificate was
authorized or not. It is up to the user to test cleartextStream.authorized
to see if the server certificate was signed by one of the specified CAs.
If cleartextStream.authorized === false
then the error can be found in
cleartextStream.authorizationError
. Also if NPN was used - you can check
cleartextStream.npnProtocol
for negotiated protocol.
cleartextStream.authorized#
A boolean that is true
if the peer certificate was signed by one of the
specified CAs, otherwise false
cleartextStream.authorizationError#
The reason why the peer's certificate has not been verified. This property
becomes available only when cleartextStream.authorized === false
.
cleartextStream.getPeerCertificate()#
Returns an object representing the peer's certificate. The returned object has some properties corresponding to the field of the certificate.
Example:
{ subject:
{ C: 'UK',
ST: 'Acknack Ltd',
L: 'Rhys Jones',
O: 'node.js',
OU: 'Test TLS Certificate',
CN: 'localhost' },
issuer:
{ C: 'UK',
ST: 'Acknack Ltd',
L: 'Rhys Jones',
O: 'node.js',
OU: 'Test TLS Certificate',
CN: 'localhost' },
valid_from: 'Nov 11 09:52:22 2009 GMT',
valid_to: 'Nov 6 09:52:22 2029 GMT',
fingerprint: '2A:7A:C2:DD:E5:F9:CC:53:72:35:99:7A:02:5A:71:38:52:EC:8A:DF' }
If the peer does not provide a certificate, it returns null
or an empty
object.
cleartextStream.getCipher()#
Returns an object representing the cipher name and the SSL/TLS protocol version of the current connection.
Example: { name: 'AES256-SHA', version: 'TLSv1/SSLv3' }
See SSL_CIPHER_get_name() and SSL_CIPHER_get_version() in http://www.openssl.org/docs/ssl/ssl.html#DEALING_WITH_CIPHERS for more information.
cleartextStream.address()#
Returns the bound address, the address family name and port of the
underlying socket as reported by the operating system. Returns an
object with three properties, e.g.
{ port: 12346, family: 'IPv4', address: '<IP_ADDRESS>' }
cleartextStream.remoteAddress#
The string representation of the remote IP address. For example,
'<IP_ADDRESS>'
or '2001:4860:a005::68'
.
cleartextStream.remotePort#
The numeric representation of the remote port. For example, 443
.


Basalt
/
basalt.server
/
ErrorResponses
/
PLAYER_ALREADY_PAUSED
PLAYER_ALREADY_PAUSED
PLAYER_ALREADY_PAUSED
Returned if an attempt was made to pause a player if it is already paused.


For each image, please indicate:
1. the number of the image that is most like it in color.
2. the number of the image most unlike it in color.
3. the number of the image most like it in texture.
4. the number of the image most unlike it in texture.
Then screenshot and send to me please :)
1. the number of the image that is most like it in color.
2. the number of the image most unlike it in color.
3. the number of the image most like it in texture.
4. the number of the image most unlike it in texture.
Then screenshot and send to me please :)


Example #1
Run code
Show a modal window, setting the parameters through the function.
Example #2
Run code
By clicking on the link module sends data to the server and returns the response with data.
Example #3
Run code
The server returns the elements and values for them, there is a search of DOM elements and insert data into them.


EU's Barnier sees difficult talks on post-Brexit trade deal
Time to negotiate a new partnership is 'extremely short', said EU's Brexit talks chief.
The European Union's Brexit negotiator Michel Barnier has said that negotiations on a future trading relationship with Britain would be "difficult and demanding", as the bloc "will not tolerate unfair competitive advantage".
"The UK should not think that zero tariffs, zero quotas will be enough," he said in a speech on Tuesday during Europe's largest tech event, the Web Summit, in Lisbon, adding that time would also be "extremely short" to negotiate a new partnership.
"I know this negotiation will be difficult and demanding," he said, listing state aid, social and environmental rights and taxes as top priorities for the European Commission.
"Even when the [Brexit] deal is ratified it will not be the end of the story ... We have to build a new partnership with the UK after they withdraw," he said, reiterating his view that the risk of Britain's chaotic departure without a divorce agreement still existed.


WITNESS LIST
Economic Development
September 22, 2014 9:00 AM
Charge One
ON:
Francis, Brian Deputy Executive Director (also providing written testimony) (Texas
Department of Licensing and Regulation), Austin, TX
Heimlich, Ed Legal Director (also providing written testimony) (Honor Quest), Austin, TX
Minick, Stephen Vice President of Governmental Affairs (also providing written
testimony) (Texas Association of Business), Austin, TX
Charge Three
ON:
Minick, Stephen Vice President of Governmental Affairs (also providing written
testimony) (Texas Association of Business), Austin, TX
Ross, Chuck Manager, Unemployment Insurance Policy (Texas Workforce Commission),
Austin, TX
Charge Two
ON:
Ledesma, Andreana Compliance and Oversight Director (Office of the Governor), Austin,
TX
Minick, Stephen Vice President of Governmental Affairs (also providing written
testimony) (Texas Association of Business), Austin, TX
Taylor, Jonathan Executive Director, Economic Development and Tourism (Office of the
Governor), Austin, TX
Wood, Robert Director Economic development and Analysis (also providing written
testimony) (Texas Comptroller of Public Accounts), Austin, TX


fun runTask(taskId: Long): Unit
Use this function along with manually run tasks to have Wendy run it for you. If it is successful, Wendy will take care of deleting it for you.
taskId
- The PendingTask.task_id of PendingTask you wish to run. If there is not a PendingTask with this ID, the task runner simply ignores your request and moves on.
See Also


Hold on the cloud in the middle between the strips!
√ TAP Background
(Tablets & smartphones)
↵ ENTER
(Desktops)
LEVEL
1
0
points
▶ CLICK HERE TO START


Unofficial: Landslide victory for BN's Wee in Tg Piai by-election
by theedgemarkets.comPONTIAN (Nov 16): Barisan Nasional's candidate Datuk Seri Dr Wee Jeck Seng of MCA has won a landslide victory in the Tanjung Piai Parliamentary by-election.
At 7.58pm, Malaysiakini reported that BN is on track to crush Harapan with a five-figure majority.
Malaysiakini estimated the turnout to be around 75 percent, which translates to 39,739 votes.
With BN's votes at 21,983, they have garnered more than half of the total votes and there is no way Pakatan Harapan can close the gap.
Pakatan Harapan's candidate Karmaine Sardini received 8,659 votes.
Gerakan candidate Wendy Subramaniam received 1,446 votes, Parti Barisan Jemaah Islamiah (Berjasa) president Datuk Dr Badhrulhisham Abdul Aziz received 752 votes and two Independent candidates, Dr Ang Chuan Lock and Faridah Aryani Abd Ghaffar received 291 and 26 votes respectively.


--- layout: post status: publish published: true title: CONSTRUCTION author: Leask author_login: leask author_email<EMAIL_ADDRESS>author_url: https://leaskh.com wordpress_id: 1463 wordpress_url: https://leaskh.com/?p=1463 date: '2010-12-01 23:55:56 +0800' date_gmt: '2010-12-01 15:55:56 +0800' categories: tags: [] comments: [] ---


--- layout: post title: OfficialAvatarMovie's Photostream categories: [] tags: - avatar - geek - media status: publish type: post published: true meta: _original_post_id: '' _original_import_author: John Duprey author: ---
Get that Avatar desktop background you want from the official Avatar Movie flickr photo stream. Avatar is a must-see, movie theater experience, 3D.


Umbraco currently runs in debug mode. This means you can use the built-in performance profiler to assess the performance when rendering pages.
If you want to activate the profiler for a specific page rendering, simply add umbDebug=true to the querystring when requesting the page.
If you want the profiler to be activated by default for all page renderings, you can use the toggle below. It will set a cookie in your browser, which then activates the profiler automatically. In other words, the profiler will only be active by default in your browser - not everyone else's.
You should never let a production site run in debug mode. Debug mode is turned off by setting debug="false" on the <compilation /> element in web.config.
Umbraco currently does not run in debug mode, so you can't use the built-in profiler. This is how it should be for a production site.
Debug mode is turned on by setting debug="true" on the <compilation /> element in web.config.


flutter_i18n
I18n made easy, for Flutter!
Table of contents
Why should you use flutter_i18n?
The main goal of flutter_i18n is to simplify the i18n process in Flutter. I would like to recreate the same experience that you have with the Angular i18n: simple json files, one for each language that you want to support.
Loaders
Loader is a class which loads your translations from specific source. You can easy override loader and create your own.
Available loaders:
| Class name | Purpose |
|---|---|
FileTranslationLoader |
Loads translation files from JSON, YAML, TOML or XML format |
LocalTranslationLoader |
Is a copy of FileTranslationLoader , but used to loads the files from the device storage instead of assets folder |
NetworkFileTranslationLoader |
Loads translations from the remote resource |
NamespaceFileTranslationLoader |
Loads translations from separate files |
E2EFileTranslationLoader |
Special loader for solving isolates problem with flutter drive |
FileTranslationLoader
configuration
To use this library, you must create a folder in your project's root: the basePath
. Some examples:
/assets/flutter_i18n (the default one)
/assets/i18n
/assets/locales
Inside this folder, you'll put the json, yaml, xml or toml files containing the translated keys. You have different options:
-
If you want to specify the country code
basePath
/{languageCode}_{countryCode}.json -
If you want to specify the script code
basePath
/{languageCode}_{scriptCode}.json -
If you want to specify both
basePath
/{languageCode}{scriptCode}${countryCode}_.json -
otherwise
basePath
/{languageCode}.json
If the json file is not available, we will look for a yaml file with the same name. In case both exist, the json file will be used.
Of course, you must declare the subtree in your pubspec.yaml as assets:
flutter:
assets:
- {basePath}
The next step consist in the configuration of the localizationsDelegates; to use flutter_i18n, you should configure as follows:
localizationsDelegates: [
FlutterI18nDelegate(
translationLoader: FileTranslationLoader(...parameters...),
missingTranslationHandler: (key, locale) {
print("--- Missing Key: $key, languageCode: ${locale.languageCode}");
},
),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
builder: FlutterI18n.rootAppBuilder() //If you want to support RTL.
Below you can find the name and description of the accepted parameters.
The useCountryCode parameter depends on the json configuration:
- if you used the pattern {languageCode}_{countryCode}, useCountryCode must be true
- if you used the pattern {languageCode}, useCountryCode must be false
The fallbackFile parameter was entroduces with the version 0.1.0 and provide a default language, used when the translation for the current running system is not provided. This should contain the name of a valid json file in assets folder.
The basePath parameter is optionally used to set the base path for translations. If this option is not set, the default path will be assets/flutter_i18n
. This path must be the same path as the one defined in your pubspec.yaml.
The forcedLocale parameter is optionally used to force a locale instead finding the system one.
The decodeStrategies parameters is optionally used to choose witch kind of file you want to load. By default JSON, YAML and XML are enabled. If you use only one format, you can speed-up the bootstrap process using only the one you need.
If there isn't any translation available for the required key, even in the fallback file, the same key is returned.
NetworkFileTranslationLoader
configuration
Behaviour of this loader very similar as FileTranslationLoader
. The main difference that we load translations from NetworkAssetBundle
instead of CachingAssetBundle
.
Below you can find the name and description of the accepted parameters.
The baseUri parameter provide base Uri for your remote translations.
The useCountryCode parameter depends on the json configuration:
- if you used the pattern {languageCode}_{countryCode}, useCountryCode must be true
- if you used the pattern {languageCode}, useCountryCode must be false
The fallbackFile parameter provide a default language, used when the translation for the current running system is not provided.
The forcedLocale parameter is optionally used to force a locale instead finding the system one.
For example if your translation files located at
https://example.com/static/en.json
you should configure as follows:
localizationsDelegates: [
FlutterI18nDelegate(translationLoader:
NetworkFileTranslationLoader(baseUri: Uri.https("example.com", "static")),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
NamespaceFileTranslationLoader
configuration
Behaviour of this loader very similar as FileTranslationLoader
. The main difference that we load translations from separate files per each language.
For example FileTranslationLoader
format:
/assets/flutter_i18n/en.json
/assets/flutter_i18n/it.json
NamespaceFileTranslationLoader
format:
/assets/flutter_i18n/en/home_screen.json
/assets/flutter_i18n/en/about_screen.json
/assets/flutter_i18n/it/home_screen.json
/assets/flutter_i18n/it/about_screen.json
Example configuration:
localizationsDelegates: [
FlutterI18nDelegate(translationLoader:
NamespaceFileTranslationLoader(namespaces: ["home_screen", "about_screen"]),
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate
],
Below you can find the name and description of the accepted parameters.
The namespaces provide a list of filenames for the specific language directory.
The useCountryCode parameter depends on the json configuration:
- if you used the pattern {languageCode}_{countryCode}, useCountryCode must be true
- if you used the pattern {languageCode}, useCountryCode must be false
The fallbackDir provide a default language directory, used when the translation for the current running system is not provided.
The basePath parameter is optionally used to set the base path for translations. If this option is not set, the default path will be assets/flutter_i18n
. This path must be the same path as the one defined in your pubspec.yaml.
The forcedLocale parameter is optionally used to force a locale instead finding the system one.
E2EFileTranslationLoader
configuration
The same as FileTranslationLoader
configuration. This loader can be used for solving problem with flutter drive testing.
It removes using separate isolate for loading translations (detailed issue described here: issues/24703).
The useE2E parameter:
- if you are in flutter drive testing mode – must be true
- if you are in normal mode – must be false, in this case
FileTranslationLoader
will be used
flutter_i18n in action
After the configuration steps, the only thing to do is invoke the following method:
FlutterI18n.translate(buildContext, "your.key")
Where:
- buildContext is the BuildContext instance of the widget
- your.key is the key to translate
Other examples of use:
Force a language to be loaded at run-time:
await FlutterI18n.refresh(buildContext, languageCode, {countryCode});
Plural translations:
FlutterI18n.plural(buildContext, "your.key", pluralValue);
Text widget shorthand:
I18nText("your.key", child: Text(""))
I18nText("your.key", translationParams: {"user": "Flutter lover"})
I18nPlural("clicked.times", 1)
I18nPlural("clicked.times", 2, child: Text(""))
If you need to listen the translation loading status, you can use:
FlutterI18n.retrieveLoadingStream
method, that allows you to listen to every status changeFlutterI18n.retrieveLoadedStream
method, that allows you to listen when the translation is loaded
For more informations and details, read the CHANGELOG.md.
Utilities
Using flutter pub run flutter_i18n inside the root of your project you can enjoy some utilities that will help you with the translations files management.
Commands
Validate
This command is used to validate all the translations files inside the project.
> flutter pub run flutter_i18n validate
[flutter_i18n DEBUG]: I've found assets/i18n/en.yaml
[flutter_i18n DEBUG]: I've found assets/i18n/it.json
[flutter_i18n DEBUG]: I've found assets/i18n/es.xml
[flutter_i18n DEBUG]: I've found assets/i18n_namespace/en/common.json
[flutter_i18n DEBUG]: I've found assets/i18n_namespace/en/home.yaml
[flutter_i18n DEBUG]: I've found assets/i18n_namespace/ua/common.json
[flutter_i18n DEBUG]: I've found assets/i18n_namespace/ua/home.json
[flutter_i18n INFO]: YAML file loaded for en
[flutter_i18n INFO]: Valid file: assets/i18n/en.yaml
[flutter_i18n INFO]: JSON file loaded for it
[flutter_i18n INFO]: Valid file: assets/i18n/it.json
[flutter_i18n INFO]: XML file loaded for es
[flutter_i18n INFO]: Valid file: assets/i18n/es.xml
[flutter_i18n INFO]: JSON file loaded for common
[flutter_i18n INFO]: Valid file: assets/i18n_namespace/en/common.json
[flutter_i18n INFO]: YAML file loaded for home
[flutter_i18n INFO]: Valid file: assets/i18n_namespace/en/home.yaml
[flutter_i18n INFO]: JSON file loaded for common
[flutter_i18n INFO]: Valid file: assets/i18n_namespace/ua/common.json
[flutter_i18n INFO]: JSON file loaded for home
[flutter_i18n INFO]: Valid file: assets/i18n_namespace/ua/home.json
Diff
This command is used to find the differences between the keys of the desired translation files.
> flutter pub run flutter_i18n diff en.yaml it.json
[flutter_i18n INFO]: [en.yaml, it.json]
[flutter_i18n INFO]: YAML file loaded for en
[flutter_i18n INFO]: JSON file loaded for it
[flutter_i18n ERROR]: The compared dictionary doesn't contain the key >title
Plugins
| Plugin | Description |
|---|---|
| flutter_i18n_locize | Easy integration locize.io to flutter_i18n. |
Do you like my work?
Contributors ✨
Thanks goes to these wonderful people (emoji key):
Anton
🚇 ⚠ 💻
Lucas Vienna
💻
jlcool
💻
Julian
💻 🤔
Andrey Gordeev
💻 🐛
Amir Panahandeh
🐛 💻
This project follows the all-contributors specification. Contributions of any kind welcome!
Libraries
- base_decode_strategy
- e2e_file_translation_loader
- file_content
- file_translation_loader
- flutter_i18n
- flutter_i18n_delegate
- flutter_i18n_web
- I18nPlural
- I18nText
- json_decode_strategy
- loading_status
- local_translation_loader
- message_printer
- namespace_file_translation_loader
- network_file_translation_loader
- plural_translator
- simple_translator
- toml_decode_strategy
- translation_loader
- xml_decode_strategy
- yaml_decode_strategy


|
DbModel Pile
version 0.0.1
DbModel pile.
|
Internal model. More...
#include <dbmodelprivate.h>
Public Member Functions | |
| DbModelPrivate (DbStruct *db, DbTaew *meta, DbModel *parent) | |
| Create a new model from a table or view definition and a database. More... | |
| DbModelPrivate (DbStruct *db, int component, DbModel *parent) | |
| Create a new model from a database and an index. More... | |
| virtual | ~DbModelPrivate () |
| destructor More... | |
| DbModel * | parentDbModel () const |
| Get the front-end model. | |
| bool | isValid () const |
| Is this a valid model (with a table set) or not? | |
| void | setMeta (DbTaew *meta) |
| void | setMeta (DbStruct *database, DbTaew *meta) |
| DbTaew * | takeMeta () |
| Give away the pointer and remove it from internal storage. | |
| DbTaew * | metaTaew () const |
| Get a pointer to meta object; ownership stays with this instance. | |
| QSqlTableModel * | mainModel () const |
| Get a pointer to internal main model object. | |
| bool | selectMe () |
| Select the model (retreive information using options). | |
| int | rowCount () const |
| Number of rows. More... | |
| int | columnCount () const |
| Number of columns. More... | |
| DbStruct * | database () const |
| void | setDatabase (DbStruct *value) |
| Set the database; also invalidates the table. More... | |
| DbStruct * | takeDatabase () |
| Give away the pointer and remove it from internal storage. | |
| const DbModelCol & | columnData (int index) const |
| Get the model data regarding a column; index is a real index. | |
| const DbModelTbl & | tableData (int table_index) const |
| Get the model data regarding a table. | |
| bool | setFilter (const QString &filter, int table_index=0) |
| Set a filter on one of the internal models identified by its index. More... | |
| bool | setFilter (const QString &filter, const QString &table) |
| Set a filter on one of the internal models identified by its name. More... | |
| bool | setOrder (int column, Qt::SortOrder order, int table_index=0) |
| Set a filter on one of the internal models identified by its index. More... | |
| bool | setOrder (int column, Qt::SortOrder order, const QString &table) |
| Set a filter on one of the internal models identified by its name. More... | |
| int | findTable (const QString &table) const |
| Find the index of a model identified by its name. More... | |
| QSqlRecord | record (int row) const |
| Get a record for a row. | |
| void | reloadHeaders () |
| Read the labels again (possibly in a different language). | |
| bool | setColumnCallback (int table_index, int column_index, DbColumn::Callback value, void *user_data) |
| DbColumn::Callback | columnCallback (int table_index, int column_index) |
| void * | columnCallbackData () |
Marker | |
A cell may be highlited in a different color and with a special icon; the model only stores the coordinates of that cell. | |
| bool | setCurrentMarker (int row, int column) |
| Set the indicated cell. More... | |
| int | getMarkerRow () const |
| Retreive highlite row. | |
| int | getMarkerCol () const |
| Retreive highlite column. | |
| bool | hasMarkerCell () const |
| Tell if we have a highlite cell set. | |
QSqlTableModel | |
| Qt::ItemFlags | flags (const QModelIndex &index) const |
| QVariant | data (const QModelIndex &idx, int role=Qt::DisplayRole) const |
| QVariant | headerData (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const |
| bool | setHeaderData (int section, Qt::Orientation orientation, const QVariant &value, int role=Qt::EditRole) |
| bool | setData (const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) |
| bool | validateIndex (const QModelIndex &idx) const |
| Tell if an index is valid for this model. | |
| void | sort (int column, Qt::SortOrder order=Qt::AscendingOrder) |
| Set sorting order. | |
| bool | removeRows (int row, int count, const QModelIndex &parent) |
| Remove a number of rows. | |
| static QVariant | formattedData (const DbColumn &colorig, const QVariant &original_value) |
| Convert the data for the user. | |
| int | rowCount (const QModelIndex &parent) const |
| int | columnCount (const QModelIndex &parent) const |
Internal model.
| DbModelPrivate::DbModelPrivate | ( | DbStruct * | db, |
| DbTaew * | meta, | ||
| DbModel * | parent | ||
| ) |
Create a new model from a table or view definition and a database.
file dbmodelprivate.cc date November 2015 author Nicu Tofan
brief Contains the implementation for DbModelPrivate class. This constructor variant uses table metadata provided by the user and it takes it on faith that the table belongs to the db
database.
| db | the database to use (NULL can be used to allow later initialization |
| meta | table to be loaded (NULL can be used to allow later initialization |
| parent | the parent QObject |
| DbModelPrivate::DbModelPrivate | ( | DbStruct * | db, |
| int | component, | ||
| DbModel * | parent | ||
| ) |
Create a new model from a database and an index.
This constructor variant uses the database to retreive the main table. The component
must be a valid index for DbStructMeta::taew()
.
| db | the database to use (NULL can be used to allow later initialization |
| component | table to be loaded (-1 can be used to allow later initialization |
| parent | the parent QObject |
|
virtual |
destructor
Detailed description for destructor.
| int DbModelPrivate::columnCount | ( | ) | const |
Number of columns.
This method exists because, for table-only models, we will never have a parent.
| QVariant DbModelPrivate::data | ( | const QModelIndex & | idx, |
| int | role = Qt::DisplayRole |
||
| ) | const |
|
inline |
Retreive the database. Ownership of returned pointer stays with this instance.
| int DbModelPrivate::findTable | ( | const QString & | table | ) | const |
Find the index of a model identified by its name.
The method iterates internal list in search for the name.
| table | name of the table to search for |
| int DbModelPrivate::rowCount | ( | ) | const |
Number of rows.
This method exists because, for table-only models, we will never have a parent.
| bool DbModelPrivate::setColumnCallback | ( | int | table_index, |
| int | column_index, | ||
| DbColumn::Callback | value, | ||
| void * | user_data | ||
| ) |
| bool DbModelPrivate::setCurrentMarker | ( | int | row, |
| int | column | ||
| ) |
Set the indicated cell.
The method checks the input against current valid range and stores the coordinates of the cell to highlite with a different color and icon.
| column | the column of the cell to highlite |
| row | the row of the cell to highlite |
| void DbModelPrivate::setDatabase | ( | DbStruct * | value | ) |
Set the database; also invalidates the table.
This method exists because, for table-only models, we will never have a parent.
| bool DbModelPrivate::setFilter | ( | const QString & | filter, |
| int | table_index = 0 |
||
| ) |
Set a filter on one of the internal models identified by its index.
To set the filter for this model's main table call the method without the table_index parameter.
| filter | The filter to apply |
| table_index | the index of the table |
| bool DbModelPrivate::setFilter | ( | const QString & | filter, |
| const QString & | table | ||
| ) |
Set a filter on one of the internal models identified by its name.
This overload searches for the name in internal list to identify the index, then calls the base method.
| filter | The filter to apply |
| table |
| bool DbModelPrivate::setHeaderData | ( | int | section, |
| Qt::Orientation | orientation, | ||
| const QVariant & | value, | ||
| int | role = Qt::EditRole |
||
| ) |
Sets the caption for a horizontal header for the specified role to value. This is useful if the model is used to display data in a view (e.g., QTableView).
Returns true
if orientation is Qt::Horizontal and the section refers to a valid section; otherwise returns false.
Note that this function cannot be used to modify values in the database since the model is read-only.
| void DbModelPrivate::setMeta | ( | DbTaew * | meta | ) |
Set the table or view; old instance is deleted; ovnership of table is assumed.
A call to this functionammounts to a complete change in the data that is displayied. It is a shortcut for destroying the model and creating a new one for another table.
The database is assumed to stay the same. The function fails if there is no database present in this instance.
| meta | the table to load; may be NULL to bring the model in invalid state. A future call with a non-NULL value will make it valid again. |
| void DbModelPrivate::setMeta | ( | DbStruct * | database, |
| DbTaew * | meta | ||
| ) |
Set the database and table or view; old instance is deleted; ovnership of table is assumed.
A call to this functionammounts to a complete change in the data that is displayied. It is a shortcut for destroying the model and creating a new one for another table.
The database if first changed. If the database is valid we proceed to changing the table.
Calling this function is a shortcut for:
| meta | the table to load; may be NULL to bring the model in invalid state. A future call with a non-NULL value will make it valid again. |
| bool DbModelPrivate::setOrder | ( | int | column, |
| Qt::SortOrder | order, | ||
| int | table_index = 0 |
||
| ) |
Set a filter on one of the internal models identified by its index.
To set the sorting order for this model's main table call the method without the table_index parameter.
| column | the column to use for sorting; |
| order | the order to apply to sid column |
| table_index | the index of the table |
| bool DbModelPrivate::setOrder | ( | int | column, |
| Qt::SortOrder | order, | ||
| const QString & | table | ||
| ) |
Set a filter on one of the internal models identified by its name.
This overload searches for the name in internal list to identify the index, then calls the base method.
| filter | The filter to apply |
| table |


Front End CLI
Front End CLI
Al Jachimiak -
May 4, 2016
This is a broad overview of command line tools used by front-end developers.
No More Secrets
+


The OVVR Model
Your browser doesn't support HTML5.0
Your browser doesn't support HTML5.0
Your browser doesn't support HTML5.0
Your browser doesn't support HTML5.0


---
layout: post
title: where the cold wind blows brand new the visual
date: '2010-10-05T23:50:09+01:00'
tags: []
tumblr_url: http://backlog.robbevan.com/post/1251659491/where-the-cold-wind-blows-brand-new-the-visual
---
Where the Cold Wind Blows - Brand New
The visual identity is based on two main ingredients; our newly developed payoff, “Where nature rules,” and weather statistics from the Norwegian Meteorological Institute. A feed of weather statistics affects the logo to change when the direction of the wind or the temperature changes.


{% extends "base.html" %} {% block title %}Ahmia - Hidden service list - Add new domain{% endblock %} {% block content %}
Please help us to collect more onion domains to this search index.
URL must be exactly like http://something.onion/
{% endblock %}


Dice game
The below sequence is the gameplay of the dice game.
Each turn, a player repeatedly rolls a die until either a 1 is rolled or the player decides to "hold":
- If the player rolls a 1, they score nothing and it becomes the next player's turn.
- If the player rolls any other number, it is added to their turn total and the player's turn continues.
- If a player chooses to "hold", their turn total is added to their score, and it becomes the next player's turn.
The first player to score 100 or more points wins.


Using the Skupper CLI
Using the skupper
command-line interface (CLI) allows you to create and manage Skupper sites from the context of the current namespace.
A typical workflow is to create a site, link sites together, and expose services to the service network.
Installing the Skupper CLI
Installing the skupper
command-line interface (CLI) provides a simple method to get started with Skupper.
-
Install the
skupper
command-line interface.For Linux:
$ curl -fL https://github.com/skupperproject/skupper/releases/download/1.4/skupper-cli-1.4-linux-amd64.tgz | tar -xzf -
For MacOS:
$ curl -fL https://github.com/skupperproject/skupper/releases/download/1.4/skupper-cli-1.4-mac-amd64.tgz | tar -xzf -
-
Copy the
skupper
executable to a directory in your $PATH:$ mkdir -p $HOME/bin $ export PATH=$PATH:$HOME/bin $ mv skupper $HOME/bin
-
Verify the installation.
$ skupper version client version 1.4.1
Creating a site using the CLI
A service network consists of Skupper sites. This section describes how to create a site using the default settings.
-
The
skupper
CLI is installed. -
You are logged into the cluster.
-
The services you want to expose on the service network are in the active namespace.
-
Create a default site:
$ skupper init
Starting with Skupper release 1.3, the console is not enabled by default. To use the new console, which is a preview feature and may change, see Using the Skupper console.
-
Check the site:
$ skupper status Skupper is enabled for namespace "west" in interior mode. It is not connected to any other sites.
The default message above is displayed when you initialize a site on a cluster that does not have the policy system installed. If you install the policy system as described in Securing a service network using policies, the message becomes Skupper is enabled for namespace "west" in interior mode (with policies)
.
By default, the site name defaults to the namespace name, for example, west
.
Custom sites
The default skupper init
creates sites that satisfy typical requirements.
Starting with Skupper release 1.3, the console is not enabled by default. To use the new console, which is a preview feature and may change, see Using the Skupper console.
If you require a custom configuration, note the following options:
-
Configuring console authentication. There are several
skupper
options regarding authentication for the console:--console-auth <authentication-mode>
-
Set the authentication mode for the console:
-
openshift
- Use OpenShift authentication, so that users who have permission to log into OpenShift and view the Project (namespace) can view the console. -
internal
- Use Skupper authentication, see theconsole-user
andconsole-password
options. -
unsecured
- No authentication, anyone with the URL can view the console.
-
--console-user <username>
-
Username for the console user when authentication mode is set to
internal
. Defaults toadmin
. --console-password <password>
-
Password for the console user when authentication mode is set to
internal
. If not specified, a random passwords is generated.
-
Configuring service access
$ skupper init --create-network-policy
All sites are associated with a namespace, called the active namespace in this procedure. Services in the active namespace may be accessible to pods in other namespaces on that cluster by default, depending on your cluster network policies. As a result, you can expose services to pods in namespaces not directly connected to the service network. This setting applies a network policy to restrict access to services to those pods in the active namespace.
For example, if you create a site in the namespace
projectA
ofclusterA
and link that site to a service network where thedatabase
service is exposed, thedatabase
service is available to pods inprojectB
ofclusterA
.You can use the
--create-network-policy
option to restrict thedatabase
service access toprojectA
ofclusterA
.
Linking sites
A service network consists of Skupper sites. This section describes how to link sites to form a service network.
Linking two sites requires a single initial directional connection. However:
-
Communication between the two sites is bidirectional, only the initial linking is directional.
-
The choice of direction for linking is typically determined by accessibility. For example, if you are linking an OpenShift Dedicated cluster with a CodeReady Containers cluster, you must link from the CodeReady Containers cluster to the OpenShift Dedicated cluster because that route is accessible.
-
Determine the direction of the link. If both clusters are publicly addressable, then the direction is not significant. If one of the clusters is addressable from the other cluster, perform step 2 below on the addressable cluster.
-
Generate a token on the cluster that you want to link to:
$ skupper token create <filename>
where
<filename>
is the name of a YAML file that is saved on your local filesystem.This file contains a key and the location of the site that created it.
Access to this file provides access to the service network. Protect it appropriately.
For more information about protecting access to the service network, see Using Skupper tokens.
-
Use a token on the cluster that you want to connect from:
-
Create a link to the service network:
$ skupper link create <filename> [-name <link-name>]
where
<filename>
is the name of a YAML file generated from theskupper token create
command and<link-name>
is the name of the link. -
Check the link:
$ skupper link status Link link1 not connected
In this example no <link-name> was specified, the name defaulted to
link1
.
-
-
If you want to delete a link:
$ skupper link delete <link-name>
where
<link-name>
is the name of the link specified during creation.
Specifying link cost
When linking sites, you can assign a cost to each link to influence the traffic flow.
By default, link cost is set to 1
for a new link.
In a service network, the routing algorithm attempts to use the path with the lowest total cost from client to target server.
-
If you have services distributed across different sites, you might want a client to favor a particular target or link. In this case, you can specify a cost of greater than
1
on the alternative links to reduce the usage of those links.The distribution of open connections is statistical, that is, not a round robin system. -
If a connection only traverses one link, then the path cost is equal to the link cost. If the connection traverses more than one link, the path cost is the sum of all the links involved in the path.
-
Cost acts as a threshold for using a path from client to server in the network. When there is only one path, traffic flows on that path regardless of cost.
If you start with two targets for a service, and one of the targets is no longer available, traffic flows on the remaining path regardless of cost. -
When there are a number of paths from a client to server instances or a service, traffic flows on the lowest cost path until the number of connections exceeds the cost of an alternative path. After this threshold of open connections is reached, new connections are spread across the alternative path and the lowest cost path.
-
You have set your Kubernetes context to a site that you want to link from.
-
A token for the site that you want to link to.
-
Create a link to the service network:
$ skupper link create <filename> --cost <integer-cost>
where
<integer-cost>
is an integer greater than 1 and traffic favors lower cost links.If a service can be called without traversing a link, that service is considered local, with an implicit cost of 0
.For example, create a link with cost set to
2
using a token file namedtoken.yaml
:$ skupper link create token.yaml --cost 2
-
Check the link cost:
$ skupper link status link1 --verbose Cost: 2 Created: 2022-11-17 15:02:01 +0000 GMT Name: link1 Namespace: default Site: default-0d99d031-cee2-4cc6-a761-697fe0f76275 Status: Connected
-
Observe traffic using the console.
If you have a console on a site, log in and navigate to the processes for each server. You can view the traffic levels corresponding to each client.
If there are multiple clients on different sites, filter the view to each client to determine the effect of cost on traffic. For example, in a two site network linked with a high cost with servers and clients on both sites, you can see that a client is served by the local servers while a local server is available.
Exposing services on the service network from a namespace
After creating a service network, exposed services can communicate across that network.
The skupper
CLI has two options for exposing services that already exist in a namespace:
-
expose
supports simple use cases, for example, a deployment with a single service. See Exposing simple services on the service network for instructions. -
service create
andservice bind
is a more flexible method of exposing services, for example, if you have multiple services for a deployment. See Exposing complex services on the service network for instructions.
Exposing simple services on the service network
This section describes how services can be enabled for a service network for simple use cases.
-
Create a deployment, some pods, or a service in one of your sites, for example:
$ kubectl create deployment hello-world-backend --image quay.io/skupper/hello-world-backend
This step is not Skupper-specific, that is, this process is unchanged from standard processes for your cluster.
-
Create a service that can communicate on the service network:
$ skupper expose [deployment <name>|pods <selector>|statefulset <statefulsetname>|service <name>]
where
-
<name>
is the name of your deployment -
<selector>
is a pod selector -
<statefulsetname>
is the name of a statefulset
For the example deployment in step 1, you create a service using the following command:
$ skupper expose deployment/hello-world-backend --port 8080
Options for this command include:
-
--port <port-number>
:: Specify the port number that this service is available on the service network. NOTE: You can specify more than one port by repeating this option. -
--target-port <port-number>
:: Specify the port number of pods that you want to expose. -
--protocol <protocol>
allows you specify the protocol you want to use,tcp
,http
orhttp2
-
If you do not specify ports, skupper uses the containerPort value of the deployment.
|
Exposing complex services on the service network
This section describes how services can be enabled for a service network for more complex use cases.
-
Create a deployment, some pods, or a service in one of your sites, for example:
$ kubectl create deployment hello-world-backend --image quay.io/skupper/hello-world-backend
This step is not Skupper-specific, that is, this process is unchanged from standard processes for your cluster.
-
Create a service that can communicate on the service network:
$ skupper service create <name> <port>
where
-
<name>
is the name of the service you want to create -
<port>
is the port the service uses
For the example deployment in step 1, you create a service using the following command:
$ skupper service create hello-world-backend 8080
-
-
Bind the service to a cluster service:
$ skupper service bind <service-name> <target-type> <target-name>
where
-
<service-name>
is the name of the service on the service network -
<target-type>
is the object you want to expose,deployment
,statefulset
,pods
, orservice
. -
<target-name>
is the name of the cluster service
For the example deployment in step 1, you bind the service using the following command:
$ skupper service bind hello-world-backend deployment hello-world-backend
-
Exposing services from a different namespace to the service network
This section shows how to expose a service from a namespace where Skupper is not deployed.
Skupper allows you expose Kubernetes services from other namespaces for any site. However, if you want to expose workloads, for example deployments, you must create a site as described in this section.
-
A namespace where Skupper is deployed.
-
A network policy that allows communication between the namespaces
-
cluster-admin permissions if you want to expose resources other than services
-
Create a site with cluster permissions if you want to expose a workload from a namespace other than the site namespace:
$ skupper init --enable-cluster-permissions
-
Expose the service on the service network:
The site does not require the extra permissions granted with the --enable-cluster-permissions
to expose a Kubernetes service.-
If you want to expose a Kubernetes service from a namespace other than the site namespace:
$ skupper expose service <service>.<namespace> --address <service>
-
<service> - the name of the service on the service network.
-
<namespace> - the name of the namespace where the service you want to expose runs.
For example, if you deployed Skupper in the
east
namespace and you created abackend
Kubernetes service in theeast-backend
namespace, you set the context to theeast
namespace and expose the service asbackend
on the service network using:$ skupper expose service backend.east-backend --port 8080 --address backend
-
-
If you want to expose a workload and you created a site with
--enable-cluster-permissions
:$ skupper expose <resource> --port <port-number> --target-namespace <namespace>
-
<resource> - the name of the resource.
-
<namespace> - the name of the namespace where the resource you want to expose runs.
For example, if you deployed Skupper in the
east
namespace and you created abackend
deployment in theeast-backend
namespace, you set the context to theeast
namespace and expose the service asbackend
on the service network using:$ skupper expose deployment/backend --port 8080 --target-namespace east-backend
-
-
-
Exposing services on the service network from a local machine
After creating a service network, you can expose services from a local machine on the service network.
For example, if you run a database on a server in your data center, you can deploy a front end in a cluster that can access the data as if the database was running in the cluster.
Exposing simple local services to the service network
This section shows how to expose a single service running locally on a service network.
-
A service network. Only one site is required.
-
Access to the service network.
-
Run your service locally.
-
Log into your cluster and change to the namespace for your site.
-
Expose the service on the service network:
$ skupper gateway expose <service> localhost <port>
-
<service> - the name of the service on the service network.
-
<port> - the port that runs the service locally.
You can also expose services from other machines on your local network, for example if MySQL is running on a dedicated server (with an IP address of
<IP_ADDRESS>
), but you are accessing the cluster from a machine in the same network:$ skupper gateway expose mysql <IP_ADDRESS> 3306
-
-
Check the status of Skupper gateways:
$ skupper gateway status Gateway Definition: ╰─ machine-user type:service version:2.4.0 ╰─ Bindings: ╰─ mydb:3306 tcp mydb:3306 localhost 3306
This shows that there is only one exposed service and that service is only exposing a single port (BIND). There are no ports forwarded to the local host.
The URL field shows the underlying communication and can be ignored.
Working with complex local services on the service network
This section shows more advanced usage of skupper gateway.
-
Create a Skupper gateway:
$ skupper gateway init --type <gateway-type>
By default a service type gateway is created, however you can also specify:
-
podman
-
docker
-
-
Create a service that can communicate on the service network:
$ skupper service create <name> <port>
where
-
<name>
is the name of the service you want to create -
<port>
is the port the service uses
For example:
$ skupper service create mydb 3306
-
-
Bind the service on the service network:
$ skupper gateway bind <service> <host> <port>
-
<service> - the name of the service on the service network,
mydb
in the example above. -
<host> - the host that runs the service.
-
<port> - the port the service is running on,
3306
from the example above.
-
-
Check the status of Skupper gateways:
$ skupper gateway status Gateway Definitions Summary Gateway Definition: ╰─ machine-user type:service version:2.4.0 ╰─ Bindings: ╰─ mydb:3306 tcp mydb:3306 localhost 3306
This shows that there is only one exposed service and that service is only exposing a single port (BIND). There are no ports forwarded to the local host.
The URL field shows the underlying communication and can be ignored.
You can create more services in the service network and bind more local services to expose those services on the service network.
-
Forward a service from the service network to the local machine.
$ skupper gateway forward <service> <port>
where
-
<service>
is the name of an existing service on the service network. -
<port>
is the port on the local machine that you want to use.
-
Creating a gateway and applying it on a different machine
If you have access to a cluster from one machine but want to create a gateway to the service network from a different machine, you can create the gateway definition bundle on the first machine and later apply that definition bundle on a second machine as described in this procedure. For example, if you want to expose a local database service to the service network, but you never want to access the cluster from the database server, you can use this procedure to create the definition bundle and apply it on the database server.
-
Log into your cluster from the first machine and change to the namespace for your site.
-
Create a service that can communicate on the service network:
$ skupper service create <name> <port>
where
-
<name>
is the name of the service you want to create -
<port>
is the port the service uses
For example:
$ skupper service create database 5432
-
-
Create a YAML file to represent the service you want to expose, for example:
name: database (1) bindings: - name: database (2) host: localhost (3) service: address: database:5432 (4) protocol: tcp (5) ports: - 5432 (6) target_ports: - 5432 (7) qdr-listeners: - name: amqp host: localhost port: 5672
1 Gateway name, useful for reference only. 2 Binding name, useful to track multiple bindings. 3 Name of host providing the service you want to expose. 4 Service name and port on service network. You created the service in a previous step. 5 The protocol you want to use to expose the service, tcp
,http
orhttp2
.6 The port on the service network that you want this service to be available on. 7 The port of the service running on the host specified in point 3. -
Save the YAML file using the name of the gateway, for example,
gateway.yaml
. -
Generate a bundle that can be applied to the machine that hosts the service you want to expose on the service network:
$ skupper gateway generate-bundle <config-filename> <destination-directory>
where:
-
<config-filename> - the name of the YAML file, including suffix, that you generated in the previous step.
-
<destination-directory> - the location where you want to save the resulting gateway bundle, for example
~/gateways
.
For example:
$ skupper gateway generate-bundle database.yaml ./
This bundle contains the gateway definition YAML and a certificate that allow access to the service network.
-
-
Copy the gateway definition file, for example,
mylaptop-jdoe.tar.gz
to the machine that hosts the service you want to expose on the service network. -
From the machine that hosts the service you want to expose:
$ mkdir gateway $ tar -xvf <gateway-definition-file> --directory gateway $ cd gateway $ sh ./launch.py
Use ./launch.py -t podman
or./launch.py -t docker
to run the Skupper router in a container.Running the gateway bundle uses the gateway definition YAML and a certificate to access and expose the service on the service network.
-
Check the status of the gateway service:
To check a service type gateway:
$ systemctl --user status <gateway-definition-name>
To check a podman type gateway:
$ podman inspect
To check a docker type gateway:
$ docker inspect
You can later remove the gateway using ./remove.py
. -
From the machine with cluster access, check the status of Skupper gateways:
$ skupper gateway status Gateway Definition: ╰─ machine-user type:service version:2.4.0 ╰─ Bindings: ╰─ mydb:3306 tcp mydb:3306 localhost 3306
This shows that there is only one exposed service and that service is only exposing a single port (BIND). There are no ports forwarded to the local host.
| If you need to change the gateway definition, for example to change port, you need to remove the existing gateway and repeat this procedure from the start to redefine the gateway. |
Gateway YAML reference
The Creating a gateway and applying it on a different machine describes how to create a gateway to apply on a separate machine using a gateway definition YAML file.
The following are valid entries in a gateway definition YAML file.
- name
-
Name of gateway
- bindings.name
-
Name of binding for a single host.
- bindings.host
-
Hostname of local service.
- bindings.service
-
Definition of service you want to be available on service network.
- bindings.service.address
-
Address on the service network, name and port.
- bindings.service.protocol
-
Skupper protocol,
tcp
,http
orhttp2
. - bindings.service.ports
-
A single port that becomes available on the service network.
- bindings.service.target_ports
-
A single port that you want to expose on the service network.
| If the local service requires more than one port, create separate bindings for each port. |
- forwards.name
-
Name of forward for a single host.
- forwards.host
-
Hostname of local service.
- forwards.service
-
Definition of service you want to be available locally.
- forwards.service.address
-
Address on the service network that you want to use locally, name and port.
- forwards.service.protocol
-
Skupper protocol,
tcp
,http
orhttp2
. - forwards.service.ports
-
A single port that is available on the service network.
- forwards.service.target_ports
-
A single port that you want to use locally.
| If the network service requires more than one port, create separate forwards for each port. |
- qdr-listeners
-
Definition of skupper router listeners
- qdr-listeners.name
-
Name of skupper router, typically
amqp
. - qdr-listeners.host
-
Hostname for skupper router, typically
localhost
. - qdr-listeners.port
-
Port for skupper router, typically
5672
.
Exploring a service network
Skupper includes a command to allow you report all the sites and the services available on a service network.
-
A service network with more than one site
-
Set your Kubernetes context to a namespace on the service network.
-
Use the following command to report the status of the service network:
$ skupper network status
For example:
Sites: ├─ [local] 4dba248 - west (1) │ URL: <IP_ADDRESS> (2) │ name: west (3) │ namespace: west │ version: 0.8.6 (4) │ ╰─ Services: │ ╰─ name: hello-world-backend (5) │ address: hello-world-backend: 8080 (6) │ protocol: tcp (7) ╰─ [remote] bca99d1 - east (8) URL: name: east namespace: east sites linked to: 4dba248-west (9) version: 0.8.6 ╰─ Services: ╰─ name: hello-world-backend address: hello-world-backend: 8080 protocol: tcp ╰─ Targets: ╰─ name: hello-world-backend-7dfb45b98d-mhskw (10)
1 The unique identifier of the site associated with the current context, that is, the west
namespace2 The URL of the service network router. This is required for other sites to connect to this site and is different from the console URL. If you require the URL of the console, use the skupper status
command to display that URL.3 The site name. By default, skupper uses the name of the current namespace. If you want to specify a site name, use skupper init --site-name <site-name>
.4 The version of Skupper running the site. The site version can be different from the current skupper
CLI version. To update a site to the version of the CLI, useskupper update
.5 The name of a service exposed on the service network. 6 The address of a service exposed on the service network. 7 The protocol of a service exposed on the service network. 8 The unique identifier of a remote site on the service network. 9 The sites that the remote site is linked to. 10 The name of the local Kubernetes object that is exposed on the service network. In this example, this is the hello-world-backend
pod.The URL for the east site has no value because that site was initialized without ingress using the following command:
$ skupper init --ingress none
Securing a service network
Skupper provides default, built-in security that scales across clusters and clouds. This section describes additional security you can configure.
See Securing a service network using policies for information about creating granular policies for each cluster.
Restricting access to services using network-policy
By default, if you expose a service on the service network, that service is also accessible from other namespaces in the cluster.
You can avoid this situation when creating a site using the --create-network-policy
option.
-
Create the service network router with a network policy:
$ skupper init --create-network-policy
-
Check the site status:
$ skupper status
The output should be similar to the following:
Skupper enabled for namespace 'west'. It is not connected to any other sites.
You can now expose services on the service network and those services are not accessible from other namespaces in the cluster.
Applying TLS to TCP or HTTP2 traffic on the service network
By default, the traffic between sites is encrypted, however the traffic between the service pod and the router pod is not encrypted. For services exposed as TCP or HTTP2, the traffic between the pod and the router pod can be encrypted using TLS.
-
Two or more linked sites
-
A TCP or HTTP2 frontend and backend service
-
Deploy your backend service.
-
Expose your backend deployment on the service network, enabling TLS.
For example, if you want to expose a TCP service:
$ skupper expose deployment <deployment-name> --port 443 --enable-tls
Enabling TLS creates the necessary certificates required for TLS backends and stores them in a secret named skupper-tls-<deployment-name>
.
-
Modify the backend deployment to include the generated certificates, for example:
... spec: containers: ... command: ... - "/certs/tls.key" - "/certs/tls.crt" ... volumeMounts: ... - mountPath: /certs name: certs readOnly: true volumes: - name: index-html configMap: name: index-html - name: certs secret: secretName: skupper-tls-<deployment-name>
Each site creates the necessary certificates required for TLS clients and stores them in a secret named
skupper-service-client
. -
Modify the frontend deployment to include the generated certificates, for example:
spec: template: spec: containers: ... volumeMounts: - name: certs mountPath: /tmp/certs/skupper-service-client ... volumes: - name: certs secret: secretName: skupper-service-client
-
Test calling the service from a TLS enabled frontend.
Supported standards and protocols
Skupper supports the following protocols for your service network:
-
TCP - default
-
HTTP1
-
HTTP2
When exposing or creating a service, you can specify the protocol, for example:
$ skupper expose deployment hello-world-backend --port 8080 --protocol <protocol>
where <protocol>
can be:
-
tcp
-
http
-
http2
When choosing which protocol to specify, note the following:
-
tcp
supports any protocol overlayed on TCP, for example, HTTP1 and HTTP2 work when you specifytcp
. -
If you specify
http
orhttp2
, the IP address reported by a client may not be accessible. -
All service network traffic is converted to AMQP messages in order to traverse the service network.
TCP is implemented as a single streamed message, whereas HTTP1 and HTTP2 are implemented as request/response message routing.
CLI options for working with different clusters
By default, all skupper
commands apply to the cluster you are logged into and the current namespace.
The following skupper
options allow you to override that behavior and apply to all commands:
--namespace <namespace-name>
-
Apply command to
<namespace-name>
. For example, if you are currently working onfrontend
namespace and want to initialize a site in thebackend
namespace:$ skupper init --namespace backend
--kubeconfig <kubeconfig-path>
-
Path to the kubeconfig file - This allows you run multiple sessions to a cluster from the same client. An alternative is to set the
KUBECONFIG
environment variable. --context <context-name>
-
The kubeconfig file can contain defined contexts, and this option allows you to use those contexts.


Answer : A Explanation Yes! JavaScript is a case-sensitive language. This means that language keywords, variables, function names, and any other identifiers must always be typed with a consistent capitalization of letters.
Answer : A Explanation Yes! JavaScript is a case-sensitive language. This means that language keywords, variables, function names, and any other identifiers must always be typed with a consistent capitalization of letters.
Answer : A Explanation Yes! JavaScript is a case-sensitive language. This means that language keywords, variables, function names, and any other identifiers must always be typed with a consistent capitalization of letters.
Answer : A Explanation Yes! JavaScript is a case-sensitive language. This means that language keywords, variables, function names, and any other identifiers must always be typed with a consistent capitalization of letters.
Answer : A Explanation Yes! JavaScript is a case-sensitive language. This means that language keywords, variables, function names, and any other identifiers must always be typed with a consistent capitalization of letters.


The goal of SHA256 or any secure hashing algorithm, is to reduce an arbitrarily sized input into an n-bit hash. For SHA256, n = 256 bits. 笔记：这里从目标的角度来讲SHA256，同时也适用于其他的secure hash算法。
SHA256 operates on 512-bit (64-byte) blocks of input. Each block is reduced to a 256-bit (32-byte) hash. 笔记：这里是从输入和输出的角度来讲SHA256。
| Hash | Input Block Size | Output Size |
|---|---|---|
| SHA1 | 512-bit (64-byte) | 256-bit (32-byte) |
Everything about SHA-256 is identical to SHA-1 except for the block processing itself and the output length. The block size, padding, and so on are all the same.


Over at the Manchester Hackerspace, [Bob] has been busy getting a 30-year-old bandsaw up and running. The saw worked great, but it was missing a fence, making straight cuts difficult to say the least. The solution, of course, was to build a new fence, and [Bob] decided to capitalize on his hackerspace’s workshop by making a new fence with a 3d printer.
[Bob] began by taking careful measurements of the saw’s table and the channel running down the length of it. These measurements were plugged into OpenSCAD, and after a few iterations, [Bob] had an extremely well-fitting profile a fence could be attached to.
With the profile down, [Bob] created a new part in OpenSCAD that would hold an aluminum angle piece. This was attached to the plastic parts with screws, and the entire assembly clamps down to the saw with the help of a few 5mm bolts. For a machine that is usually dedicated to making 3D printer parts and Yoda heads, [Bob] did a great job making good use of his 3D printer.
Recent comments


I am from southern california, and moved out to the bay in 2018. I have been working in security for 2 years. The bay area has a lot of great work opportunity’s because all of the big companies that have set their sites here. This wasn't the reason I ended up here but it definitely persuade me to stay.


WebSocket Load Test
Using the simplified pubsub backend, this test creates many WebSockets simultaneously to see how browsers behave.
To see this, run
loadtest.py 10
You can change that 10 to other numbers, and try changing the n =
in this own file to match (or to not match).
Results
- Every Websocket is one TCP connection. No multiplexing is going on, natively
- Despite that, WebSockets don't have the standard 6/2 rule of HTTP connections apply to them:
Getting 10 connections at once seems stable,
Running 50 sockets maxed out at 4 clients, but this seems to be a firefox bug
because splitting 20 sockets per client across 4 firefox windows and 3 chrome windows worked just fine
(I actually managed to get it up to 20 windows across 5 browsers; chrome hung on and off and probably firefox too but it was quieter about it)
- it is possible to crash Firefox or hang its js interpreter in mysterious ways, even across page reloads, by opening too many WebSockets