SocketIOClient
open class SocketIOClient : NSObject, SocketIOClientSpec, SocketEngineClient, SocketParsable
The main class for SocketIOClientSwift.
Represents a socket.io-client. Most interaction with socket.io will be through this class.
-
The URL of the socket.io server. This is set in the initializer.
Declaration
Swift
public let socketURL: URL
-
The engine for this client.
Declaration
Swift
public private(set) var engine: SocketEngineSpec?
-
The status of this client.
Declaration
Swift
public private(set) var status = SocketIOClientStatus.notConnected
-
If
true
then every timeconnect
is called, a new engine will be created.Declaration
Swift
public var forceNew = false
-
The queue that all interaction with the client should occur on. This is the queue that event handlers are called on.
Declaration
Swift
public var handleQueue = DispatchQueue.main
-
The namespace for this client.
Declaration
Swift
public var nsp = "/"
-
The configuration for this client.
Declaration
Swift
public var config: SocketIOClientConfiguration
-
If
true
, this client will try and reconnect on any disconnects.Declaration
Swift
public var reconnects = true
-
The number of seconds to wait before attempting to reconnect.
Declaration
Swift
public var reconnectWait = 10
-
The session id of this client.
Declaration
Swift
public var sid: String?
-
Type safe way to create a new SocketIOClient.
opts
can be omitted.Declaration
Swift
public init(socketURL: URL, config: SocketIOClientConfiguration = [])
Parameters
socketURL
The url of the socket.io server.
config
The config for this socket.
-
Not so type safe way to create a SocketIOClient, meant for Objective-C compatiblity. If using Swift it’s recommended to use
init(socketURL: NSURL, options: Set<SocketIOClientOption>)
Declaration
Swift
public convenience init(socketURL: NSURL, config: NSDictionary?)
Parameters
socketURL
The url of the socket.io server.
config
The config for this socket.
-
Connect to the server.
Declaration
Swift
open func connect()
-
Connect to the server. If we aren’t connected after
timeoutAfter
seconds, thenwithHandler
is called.Declaration
Swift
open func connect(timeoutAfter: Int, withHandler handler: (() -> Void)?)
Parameters
timeoutAfter
The number of seconds after which if we are not connected we assume the connection has failed. Pass 0 to never timeout.
withHandler
The handler to call when the client fails to connect.
-
Disconnects the socket.
Declaration
Swift
open func disconnect()
-
Send an event to the server, with optional data items.
Declaration
Swift
open func emit(_ event: String, _ items: SocketData...)
Parameters
event
The event to send.
items
The items to send with this event. May be left out.
-
Same as emit, but meant for Objective-C
Declaration
Swift
open func emit(_ event: String, with items: [Any])
Parameters
event
The event to send.
with
The items to send with this event. May be left out.
-
Sends a message to the server, requesting an ack.
NOTE: It is up to the server send an ack back, just calling this method does not mean the server will ack. Check that your server’s api will ack the event being sent.
Example:
socket.emitWithAck("myEvent", 1).timingOut(after: 1) {data in ... }
Declaration
Swift
open func emitWithAck(_ event: String, _ items: SocketData...) -> OnAckCallback
Parameters
event
The event to send.
items
The items to send with this event. May be left out.
Return Value
An
OnAckCallback
. You must call thetimingOut(after:)
method before the event will be sent. -
Same as emitWithAck, but for Objective-C
NOTE: It is up to the server send an ack back, just calling this method does not mean the server will ack. Check that your server’s api will ack the event being sent.
Example:
socket.emitWithAck("myEvent", with: [1]).timingOut(after: 1) {data in ... }
Declaration
Swift
open func emitWithAck(_ event: String, with items: [Any]) -> OnAckCallback
Parameters
event
The event to send.
with
The items to send with this event. Use
[]
to send nothing.Return Value
An
OnAckCallback
. You must call thetimingOut(after:)
method before the event will be sent. -
Called when the engine closes.
Declaration
Swift
open func engineDidClose(reason: String)
Parameters
reason
The reason that the engine closed.
-
Called when the engine errors.
Declaration
Swift
open func engineDidError(reason: String)
Parameters
reason
The reason the engine errored.
-
Called when the engine opens.
Declaration
Swift
open func engineDidOpen(reason: String)
Parameters
reason
The reason the engine opened.
-
Causes an event to be handled, and any event handlers for that event to be called.
Declaration
Swift
open func handleEvent(_ event: String, data: [Any], isInternalMessage: Bool, withAck ack: Int = -1)
Parameters
event
The event that is to be handled.
data
the data associated with this event.
isInternalMessage
If
true
event handlers for this event will be called regardless of status.withAck
The ack number for this event. May be left out.
-
Leaves nsp and goes back to the default namespace.
Declaration
Swift
open func leaveNamespace()
-
Joins
namespace
.Do not use this to join the default namespace. Instead call
leaveNamespace
.Declaration
Swift
open func joinNamespace(_ namespace: String)
Parameters
namespace
The namespace to join.
-
Removes handler(s) based on an event name.
If you wish to remove a specific event, call the
off(if:)
with the UUID received from itson
call.Declaration
Swift
open func off(_ event: String)
Parameters
event
The event to remove handlers for.
-
Removes a handler with the specified UUID gotten from an
on
oronce
If you want to remove all events for an event, call the off
off(_:)
method with the event name.Declaration
Swift
open func off(id: UUID)
Parameters
id
The UUID of the handler you wish to remove.
-
Adds a handler for an event.
Declaration
Swift
open func on(_ event: String, callback: @escaping NormalCallback) -> UUID
Parameters
event
The event name for this handler.
callback
The callback that will execute when this event is received.
Return Value
A unique id for the handler that can be used to remove it.
-
Adds a handler for a client event.
Example:
socket.on(clientEvent: .connect) {data, ack in ... }
Declaration
Swift
open func on(clientEvent event: SocketClientEvent, callback: @escaping NormalCallback) -> UUID
Parameters
event
The event for this handler.
callback
The callback that will execute when this event is received.
Return Value
A unique id for the handler that can be used to remove it.
-
Adds a single-use handler for an event.
Declaration
Swift
open func once(_ event: String, callback: @escaping NormalCallback) -> UUID
Parameters
event
The event name for this handler.
callback
The callback that will execute when this event is received.
Return Value
A unique id for the handler that can be used to remove it.
-
Adds a handler that will be called on every event.
Declaration
Swift
open func onAny(_ handler: @escaping (SocketAnyEvent) -> Void)
Parameters
handler
The callback that will execute whenever an event is received.
-
Called when the engine has a message that must be parsed.
Declaration
Swift
public func parseEngineMessage(_ msg: String)
Parameters
msg
The message that needs parsing.
-
Called when the engine receives binary data.
Declaration
Swift
public func parseEngineBinaryData(_ data: Data)
Parameters
data
The data the engine received.
-
Tries to reconnect to the server.
This will cause a
disconnect
event to be emitted, as well as anreconnectAttempt
event.Declaration
Swift
open func reconnect()
-
Removes all handlers. Can be used after disconnecting to break any potential remaining retain cycles.
Declaration
Swift
open func removeAllHandlers()


REVIEW: Primary Colors by Luke Buckmaster<EMAIL_ADDRESS>There's a thin line between satire and controversy, and Mike Nichols (The Birdcage, Wolf) has directed a sharp and very honest look at a US presidential election. Based on the book written by "Anonymous" (actually former "Newsweek" writer Joe Klein), John Travolta plays Governor Jack Stanton. But he doesn't actually play Stanton. He plays Bill Clinton; just the same as Emma Thompson no doubt plays the First Lady and Billy Bob Thorton is the campaign manipulator James Carville (although the credits will of course say otherwise).
The film is taken from the perspective of Henry Burton (Adrian Lester), a morally correct and somewhat hesitant new advisor to Stanton. He searches for justice and dignity in the ugliest possible situations, and whether it be keeping the history of his boss' pants under wraps or contemplating digging up dirt on another politician, he approaches his work with a keen desire to skillfully serve his country and his fellow workers.
Richard Jemmons (Billy Bob Thorton) and Daisy Green (Maura Tierney) team up with Henry as the would-be president's advisors, and hire lesbian veteran Libby Holden (Kathy Bates) as the campaign's eccentric "tougher than dirt" incriminator. Together they face all sorts of sexual allegations, the irritatingly discourteous media and other witty politicians in the election race.
In its satire and controversy, Primary Colors is a similar film to Wag the Dog: they both are not afraid to wipe their noses in the nitty-gritty and take a bold look at something that will never has honesty as a virtue. But whereas Wag showed us how much affect a few people can have on the media, Primary Colors is much more concerned with fleshing out it's characters, letting us understand what they want and why, and making us truly appreciate the humanity and rectitude that they graciously represent.
Seeing John Travolta play Bill Clinton so confidently and justly is enough to make the film more than worth a look. And the rest of the cast also make superb performances - Adrian Lester sharply portrays the intellect of Henry whilst Kathy Bates is perfect as the robust and energetic Libby Holden.
At occasions, you can't help but feel that these terrific characters are going to waste. There are long slabs of time where John Travolta (unquestionably the most interesting to watch) is missed from the screen; and since it is awkwardly structured as Henry's story we are often forced to watch scenes that perhaps are not so necessary to the central plot - or even the point of the film. Having said that, make no mistake - Primary Colors is always enjoyable to watch. But frequently we have to ask ourselves - exactly what are we watching?
Most of the first half of its duration is a lightheaded look at melodramatic confrontations that seem so genuine we cannot help but laugh, but the way Primary Colors chooses to finish tackles aspects that are very contrary, and almost unsuitable, to the rest of the film. But as I mentioned before, there is a thin line between satire and controversy - and for the most part, Primary Colors delivers an entertaining indulgence of political matters combined with a far-from-overpowering look at winning the public's opinion.
Although at occasions the film may jump around a little too freely, focus is never lost on how important and vulnerable the subject matter really is. Thankfully, it is clear to make the distinction on what is entertaining movie cosmetics and what is a provocative documentation of something so really it's scary.
4 stars out of 5 Primary film
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


WITNESS LIST Intergovernmental Relations Committee May 8, 2001 - 8:00A HB 166 FOR: Hillman, David Real Estate Agent (Cemetary Organizers), Houston, TX HB 501 FOR: Munn, Bill Director (Tarrant County 911 District), Ft. Worth, TX Registering, but not testifying: For: Lively, Lance none listed (TX Call Box Coalition), Austin, TX HB 785 Registering, but not testifying: For: Burgess, Anita City Attorney (City of Lubbock), Lubbock, TX Lee, Donald Executive Director (TX Conference Urban Couties), Austin, TX HB 858 ON: Johnson, Joan none listed (Hotel/Motel Assoc. Houston), Houston, TX HB 1107 Registering, but not testifying: For: Loessberg, Rick Director of Planning & Development (Dallas County), Dallas, TX HB 1254 Registering, but not testifying: For: Keel, Lara Laneri none listed (TX Assoc. Businesses & Chambers of Commerce), Austin, TX On: Roberts, Art none listed (TX Assoc. Business & Chambers of Commerce), Austin, TX HB 1368 Registering, but not testifying: On: Hunt, Darrel Deputy Director (TX Department Transportation), Austin, TX HB 1392 Registering, but not testifying: For: Hutcheson, Mark Attorney (American Village Communities), Austin, TX Robinson, Jim Chief Appraiser (TX Asoc. Appraisal Districts), Houston, TX Winn, Gerald "Buddy" Tax Assessor (Tax Assessor & Collector's Assoc.), Bryan, TX HB 1393 Registering, but not testifying: For: Childs, David Tax Assessor (Self), Dallas, TX Pardue, Craig Ass. Administrator (Dallas County), Dallas, TX Robinson, Jim Chief Appraiser (TX Assoc. Appraisal Districts), Houston, TX HB 1448 FOR: Peak, Howard Mayor (San Antonio), San Antonio, TX Registering, but not testifying: For: Igo, Shanna none listed (TX Municipal League), Austin, TX Lee, Donald Executive Director (TX Conference Urban Couties), Austin, TX Mendez, Mark Ass. Co. Administrator (Tarrant County), Ft. Worth, TX Mitchell, Seth Intergovernmental Relations Manager (Bexar County Commissioner's Court), San Antonio, TX HB 1469 Registering, but not testifying: For: Lee, Donald Executive Director (TX Conference Urban Couties), Austin, TX HB 1543 FOR: Torres, David Police Officer (Corpus Christi Police Depart.), Corpus Christi, TX Utter, Tom Ass. City Manager (City of Corpus), Corpus Christi, TX Registering, but not testifying: For: Emal, Matthew Asst. Director (City of Houston), Houston, TX Igo, Shanna none listed (TX Municipal League), Austin, TX Paniagua, Joe Ass. to City Manager (Fort Worth City Council), Fort Worth, TX Radcliff, Rebbecca none listed (CLEAT), Austin, TX Valencia, Lt. Isaac Lieutenant CCPD (CC Crime Control & Prevention District), Corpus Christi, TX HB 1681 Registering, but not testifying: For: Igo, Shanna none listed (TX Municipal League), Austin, TX Rash, Jeanette Legislative Chairperson (TX Towing & Storage Assoc.), Houston, TX HB 1683 Registering, but not testifying: For: Igo, Shanna none listed (TX Municipal League), Austin, TX On: Pope, Robert Vice Chair-DART (DART), Plano, TX HB 1837 FOR: Day, Dee Owner (Self), Leander, TX Talbot, Ralph President (TX State Rifle Ass.), Richardson, TX Registering, but not testifying: For: Lewis, Gib none listed (NRA-TSRA), Austin, TX Patterson, Jerry "Hired Gun" (Houston Gun Collector's Assoc.), Austin, TX Reilly, Tara Lobbyist (National Rifle Assoc.), Austin, TX Tripp, Alice Lobbyist (TX State Rifle Assoc.), Paige, TX Against: Myadon, Minnie Retired (Self), Houston, TX HB 1886 Registering, but not testifying: For: Grace, Cary Director (Houston), Houston, TX Johnson, Joan none listed (Hotel/Motel Assoc.), Houston, TX Joslove, Scott President (TX Hotel/Motel Assoc.), Austin, TX White, Michael Attorney (Greater Houston Partnership), Austin, TX HB 2092 FOR: Allison, Jim General Counsel (County Judges & Commissioners Ass. TX), Austin, TX Registering, but not testifying: For: Lee, Donald Executive Director (TX Conference Urban Couties), Austin, TX Velasquez, Sally Governmental Liason (Webb Willacy & Zapata County), Austin, TX HB 2185 FOR: Childs, David Tax Assessor (Self), Dallas, TX Registering, but not testifying: For: Allison, Jim General Counsel (County Judges & Commissioners Ass. TX), Austin, TX Mitchell, Seth Services Manager (Bexar County Commissioner's Court), San Antonio, TX Weems, Wayne Brown Ass. District Attorney (Dallas County), Dallas, TX West, Gerald "Buddy" Tax Assessor (Self), Bryan, TX HB 2262 Registering, but not testifying: For: Avery, BJ none listed (TX Optometric Assoc.), Austin, TX Newman, Dr. Clarke Optometrist (TX Optometric Assoc.), Dallas, TX Sorrenson, Laurie Optometrist (TX Optometric Assoc.), Austin, TX HB 2525 Registering, but not testifying: For: Knape, Gregg Attorney (Mitchell County Hospital District), Austin, TX HB 2580 FOR: Drinkard, Robert Attorney (City of Houston), Houston, TX HB 2746 Registering, but not testifying: For: Campbell, Ken Attorney (Safe-D), Austin, TX On: Carlton, John Attorney (TX State Assoc. Fire & Emergency Services), Austin, TX HB 2869 FOR: Allison, Jim General Counsel (County Judges & Commissioners Ass. TX), Austin, TX Reid, Stan Director (TX Assoc. Counties), Austin, TX Registering, but not testifying: For: Lee, Donald Executive Director (TX Conference Urban Couties), Austin, TX HB 2870 Registering, but not testifying: For: Allison, Jim General Counsel (County Judges & Commissioners Ass. TX), Austin, TX Berry, Tye Economic Developer (Denton County), Denton, TX Elfant, Bruce Constable (Justices of the Peace), Austin, TX Henneberger, John none listed (TX Low Income Housing Information Service), Austin, TX Lee, Donald Executive Director (TX Conference Urban Counties), Austin, TX Mendez, Mark Ass. County Administrator (Tarrant County Commissioner's Court), Ft.Worth, TX Mitchell, Seth Intergovernmental Relations Manager (Bexar County Commissioner's Court), San Antonio, TX Zottarelli, Angelo none listed (Bexar County), Austin, TX On: Cedillo, Ruth Executive Director (TX Depart. Housing), Austin, TX HB 3150 Registering, but not testifying: For: Allison, Jim General Counsel (County Judges & Commissioners Ass. TX), Austin, TX Mendez, Mark Ass. Co. Administrator (Tarrant County Commissioner's Court), Ft.Worth, TX Price, John Wiley County Commissioner (Dallas County), Dallas, TX HB 3191 FOR: Peak, Howard Mayor (San Antonio), San Antonio, TX Registering, but not testifying: For: Garza, Frank City Attorney (San Antonio), San Antonio, TX Garza, Frank City Attorney (San Antonio), San Antonio, TX Mitchell, Seth Intergovernmental Relations Manager (Bexar County Commissioner's Court), San Antonio, TX Mixon, Carl Fire Marshall (Bexar County Commissioner's Court), San Antonio, TX HB 3193 FOR: Peak, Howard Mayor (San Antonio), San Antonio, TX HB 3413 Registering, but not testifying: For: Plummer, Jim Attorney (San Antonio Housing Authority), San Antonio, TX HB 3414 Registering, but not testifying: For: Henneberger, John none listed (TX Low Income Housing Information Service), Austin, TX Plummer, Jim Attorney (San Antonio Housing Authority), San Antonio, TX HJR 2 FOR: Freeman, Gary Constable (Justice of the Peace & Constables Assoc.), Pasadena, TX Registering, but not testifying: For: Allison, Jim General Counsel (County Judges & Commissioners Ass. TX), Austin, TX Boethel, Carey Legislative Director (TX Assoc. Counties), Austin, TX Hilger, Zane Constable (Justice of the Paece & Constable's Assoc.-TX), Hurst, TX SB 1183 Registering, but not testifying: For: Burgess, Anita City Attorney (Lubbock), Lubbock, TX Igo, Shanna none listed (TX Municipal League), Austin, TX Mitchell, Seth Intergovernmental Relations Manager (Bexar County Commissioner's Court), San Antonio, TX Wacker, James CEO (Advantage Rent-A-Car), San Antonio, TX


DROP TABLE -- remove a table
DROP TABLE name
DROP TABLE removes tables from the database. Only its owner may destroy a table. To empty a table of rows, without destroying the table, use DELETE.
DROP TABLE always removes any indexes, rules, triggers, and constraints that exist for the target table.
name
The name (optionally schema-qualified) of the table to drop.
To destroy table, emp:
DROP TABLE emp;


You haven't yet indicated whether you were voluntary to review tasks.
Please head over to your Profile to select your preferences.
Welcome to the Bebras Review tool.
Guidelines on how to review tasks:
Login to Review system:
To review tasks, you need an SVN-account. If you still need to get one, please ask your national Bebras organizer to request one for you at mail bebras.org.
Go to https://review.bebras.org/ and log in with your SVN-credentials.
Go to Profile, and enter or change the number of tasks you would like to review.
Task review process:
Thank you for volunteering for reviewing tasks.
You may simply review the assigned tasks (the assignments are updated twice a week). You may also review any other tasks which are not from your own country. Some tasks may have multiple variants; you are encouraged to additionally review variants of the tasks you already reviewed.
Reviewing any task involves the following steps:
A. Writing an in-depth review and constructive feedback on the task. Please pay special attention to the task body, question & answer alternatives / interactivity description. The following template might help you.
- [IDEA] Is the idea original and attractive? Does solving the task require some computational thinking skills? Are the question & answer alternatives / interactive description well designed? What might you have done differently to improve the task?
- [TEXT] Is the text of the whole task clear and understandable by students without CS pre-knowledge? Are words and expressions used consistently in the text and question?
- [EXPL] Is the “explanation” section available and complete? Is there a clear reason why the correct answer is correct as well as why the wrong answers are wrong?
- [IT’S INF] Is the “It’s informatics” section available? Is it understandable by students of the appropriate level? Is it well connected to the task?
- [GRAPH] Are the figures clear? Are they CC licenced? Are they available in SVG format (i.e., as vector graphics)?
- [META] Are the metadata of the task available? (Such as: age, difficulty, computational thinking skills, author name(s) and email address(es)...etc.) Do the names of the task folder and file(s) comply with the prescribed format?
- [OTHER] Is there anything else that can be useful for the author or the community?
B. Rating the tasks based on the review you have given in two aspects:
- Its "as-of-now" state. (1 star is the worst rating, 6 stars is the best rating)
- Its "potential" state. (1 star is the worst rating, 6 stars is the best rating)
What makes a good bebras task:
Criteria for the quality of a task are available in the "Pre-Workshop Review Process" document (SVN/Documentation/General/taskPreparation/pre-workshop_review_process.pdf) and last year's presentation "What is a good Bebras task" (SVN/2019/Documents/Pre-Workshop-Workshop/What is a good bebras taks[ - Notes].pdf").


Image Uploaded Successfully
Switch back tab to complete registration
HashMine
Capture Image
Upload Image


@(loginForm:Form[User])(implicit request: Request[_]) @import helper._ @import play.api.Play.current @import play.api.i18n.Messages.Implicits._
GOV.UK uses cookies to make the site simpler. Find out more about cookies
ALPHA This is a new service – your feedback will help us to improve it.
Enter your username and password


Hi there, I am Sundar G from Tuticorin. I have recently joined Cognizant Technology Solutions as an Intern on 05th Jan 2019, after completion of my M.E course in Industrial Safety Engineering. I am currently under an Intern on .NET and SQL. I enjoy taking complex problems and solve them in an innovative way. I always try to grasp quickly and contribute productively at work. Being obsessed with new technology, I love to learn them and enjoy its applications.
I like to play football and cricket. I would like to help others in any way.


HAMLET A film review by Rachel Gordon Copyright 2001 filmcritic.com
When most people think of Shakespeare they cringe, thinking of melodrama, costumes, and strange vocabulary. But what happens if you pare down the stereotypical theatrical imagery of Shakespeare and simply concentrate on the characters in the story?
This new version of Hamlet, directed by Campbell Scott (The Spanish Prisoner) and Eric Simonson does just that, and beautifully so. The setting is Americanized (the post-Civil War-era South), the production design simple, and nobody is forcing an accent unknown to them. It makes you want to scrounge for the books you packed away in high school because you didn't feel like figuring them out at the time.
Everyone knows the story of Hamlet by now, so I'll pass on the plot description and stick to appreciating this provocative adaptation.
The production is woven by an impeccable ensemble cast. For instance, Polonius (Roscoe Lee Browne) and his kin (Lisa Gay Hamilton as Ophelia and Roger Guenveur Smith as Laertes) are captured as a family unit -- not just as the councilor of Claudius (Jamey Sheridan) or the unfortunate love interest of Hamlet (Campbell Scott). They are also African-American, which adds yet another layer as to why Ophelia and Hamlet can't end up together, and why Polonius will always be an advisor but never king.
This is just a fraction of how the secondary characters aid in articulating the prison-like world that Hamlet is stuck in. Even the Players, who normally have a quick few shots in a film to show that the play prompted by Hamlet aggravates Claudius (Jamey Sheridan), have strong scenes. When they come up the driveway, Hamlet is pleased to finally have someone to talk to, and Hamlet actually gets a few moments of happiness.
Unlike most adaptations of Hamlet that center on the title character -- almost becoming a vanity piece -- Scott and Simonson wisely choose to give these secondary characters ample screen time. Hamlet is also played with a refreshingly different, layered interpretation. He isn't simply melancholy, or even self-pitying. Scott evokes in Hamlet an intelligence and quiet charisma that keep you focused on his progress throughout the almost-three-hour movie.
Even better, everything is wonderfully underplayed, allowing the viewer to appreciate the feelings conveyed. The words themselves haven't changed but are spoken with human simplicity and not the common theatrical bravura. Monologues blend well into the rest of the dialogue and aren't just set up to remind you that you are watching Shakespeare. This is a coming-of-age story and is played as such instead of shouting, "See, this is a classic!"
A unique fantasy element has also been added so that there is nothing shocking about the method to Hamlet's madness. It is easier to understand the complexity of his emotional upheaval. These moments are set apart simply but effectively through the use of a beating drum. His experience with the Ghost continues to impose on his mind, forcing him into submission. At one point he cuts his own arms with glass, more to come back to reality than as a suicide attempt. Though Shakespeare purists may argue that this wasn't in the original play, it's a powerful scene impossible not to connect with.
This is one of the best Shakespeare adaptations ever filmed. It may be three hours long, but you get so caught up in the motives of individual characters and how they affect one another that you barely notice the time. Highly recommended.

Visit filmcritic.com on the Web at http://www.filmcritic.com
========== X-RAMR-ID: 29227 X-Language: en X-RT-ReviewID: 245152 X-RT-TitleID: 1106108 X-RT-SourceID: 178 X-RT-AuthorID: 3953 X-RT-RatingText: 5/5
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


ENGLISH
FRENCH
ENGLISH
USD
EURO
YEN
00-62-658-658
Hi，{{ username }}
My items
Cancel
Columbia
BOOKS
Secondhand Books and Textbooks Hub
{{ goodform.hidden_tag() }} {{ goodform.bookname(size = 30) }}
Most Beautiful Libraries
>>Britain Library<<
Most Beautiful Libraries
>> Vienna Library <<
Most Beautiful Libraries
>> Low Library <<
Most Beautiful Libraries
>> Butlet Library <<
Most Beautiful Libraries
>> New York Library <<
Humanities
Culture
Life Sciences
Management
Tech
Wanted
{% if query %} {% for Q in query %}
{{ Q.3 }}
Details
{{ Q.2 }}
${{ Q.6 }}
{% endfor %} {% endif %} {% for literature in literatures %}
{{ literature.3 }}
Details
{{ literature.2 }}
${{ literature.6 }}
{% endfor %}
{% for knowledge in knowledges %}
{{ knowledge.3 }}
Details
{{ knowledge.2 }}
${{ knowledge.6 }}
{% endfor %}
{% for life in lifes %}
{{ life.3 }}
Details
{{ life.2 }}
${{ life.6 }}
{% endfor %}
{% for management in managements %}
{{ management.3 }}
Details
{{ management.2 }}
${{ management.6 }}
{% endfor %}
{% for tech in techs %}
{{ tech.3 }}
Details
{{ tech.2 }}
${{ tech.6 }}
{% endfor %}
{% for wanted in wanteds %}
{{ wanted.3 }}
Details
{{ wanted.2 }}
${{ wanted.6 }}
{% endfor %}


Containerization is a less resource intensive alternative to machine virtualization that involves encapsulating an application in a container from inside its own operating environment. Containers use the same host operating system (OS) instead of installing an OS for each guest VM and Containers also provide a way to isolate applications and provide a virtual platform for applications to run on.
<Virtualization is diffierent from containers in that virtual machines are copies of a server, meaning that any Virtual Machine has its own Operating System. The replication of binaries and libraries between different Virtual Machines running on the same server tie up significant server resources thereby slowing down processing time.


Please complete the application form below if you want to list your token on CoinEx.
All information you provide will be kept confidential and won’t be disclosed to any third parties.
If you have any questions, please send an email to<EMAIL_ADDRESS>CoinEx reserves the r...


Download the slog.link Firefox browser extension here.
slog.link is open source and available on GitHub.


EduEasy
(because your time is important to us too; made with
♥
by @chkdrv)
Select a Topic
Monic Quadratics
Non-monic Quadratics
Single Term Differentiation
Differentiation with a Constant
Difference of Two Squares
Basic Integration
Integration with a Coefficient
Length Contraction
Time Dilation
Mass Dilation
Questions
Solutions


Bichromate Automation History Report
Test Name
First Execution
Last Passed
Total Passed
Total Failed
Percentage Passed
Created 2018-07-01-11-52-19
Powered By Bichromate.


chatter|app
#Meditation
#Yoga
#Beach
#Food
#Sleep
new
trending
favorites
#Yoga by friedenszeit.buchtitel.personifizieren
musician.talent.jobs
Wed, September 6th, 18:36
15 min.
left
Where can i have delicouis thaifood after my yogaclass?
+5 min.
airliners.earmarking.hindrance
Wed, September 6th, 18:40
22 min.
left
Nok is a lovely place with homemade organic food.
+5 min.
indulges.barks.oscillates
Wed, September 6th, 22:22
15 min.
left
Thank you so much for your help! The food was amazing
+5 min.


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Object | +--MLA.<events>
Events are captured in the PowerPoint application and information is passed to MarkLogicPowerPointEventSupport.js. To insure framework code is not tightly coupled with application code, developers should define their custom event handler functions in a separate .js file and call from MarkLogicPowerPointEventSupport.js.
Following events captured:
colorSchemeChange()
newPresentation()
slideSelectionChange()
slideShowBegin()
slideShowEnd()
slideShowNextBuild()
slideShowNextClick()
slideShowNextSlide()
presentationBeforeSave()
presentationClose()
presentationNewSlide()
presentationOpen()
presentationPrint()
presentationSave()
windowActivate()
windowDeactivate()
| Event Detail |
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


Ocasio-Cortez Averts Courtroom Face-Off Over Twitter Block
by AMANDA OTTAWAYBROOKLYN, N.Y. (CN) – U.S. Rep. Alexandria Ocasio-Cortez has unblocked a former New York politician on Twitter and apologized to him, just before she was to take the stand in his First Amendment lawsuit against her.
A former Democratic assemblyman, Dov Hikind had filed the suit in July after 30-year-old Ocasio-Cortez blocked him on the social media platform. Monday morning, he held a joyful press conference that he live-streamed on Twitter.
“You want to be in elected office, don’t be afraid of what people have to say to you,” said Hikind, 69, the founder of Americans Against Anti-Semitism.
Ocasio-Cortez was called to testify in the Brooklyn federal court case Tuesday but will no longer attend, Hikind’s lawyer Jacob Weinstein confirmed.
The controversy came after Ocasio-Cortez commented that migration centers on the U.S.-Mexico border were “concentration camps.”
As someone whose mother was held at Auschwitz, Hikind said Monday, he took offense to the comparison.
“It was an incredibly egregious, insensitive, uneducated, disrespectful comment to the memory of the 6 million who were murdered by the Nazis,” he said, adding that he sued almost immediately after she blocked him. The suit also came hours after a federal appeals court ruled that President Donald Trump cannot block critics on Twitter.
The lawsuit did not specify what specifically precipitated the blocking, but Hikind admits he has been critical of the freshman congresswoman on several occasions.
“I could not be part of the conversation, I could not share my thoughts, my mouth was closed shut,” he said Monday.
The New York Post broke the news of Ocasio-Cortez’s Twitter reversal Monday and quoted her apology.
“I have reconsidered my decision to block Dov Hikind from my Twitter account,” the statement begins. “Mr. Hikind has a First Amendment right to express his views and should not be blocked for them … In retrospect, it was wrong and improper and does not reflect the values I cherish. I sincerely apologize for blocking Mr. Hikind … Now and in the future, however, I reserve the right to block users who engage in actual harassment or exploit my personal/campaign account, @AOC, for commercial or other improper purposes.”
In his press conference, Hikind invited Ocasio-Cortez to his community in Brooklyn to meet Holocaust survivors and let them share with her “what a concentration camp means to a survivor of the Holocaust,” he said. The congresswoman represents parts of the Bronx and Queens.
Hikind’s lawyer Jacob Zev Weinstein said the parties will still meet in court Tuesday at 11 a.m. to discuss the settlement and the congresswoman’s statement.
Lawyers for Ocasio-Cortez did not respond to phone calls or an email for confirmation or comment Monday morning.
The lawsuit also asked for Ocasio-Cortez to cover Hikind’s attorney fees, though Weinstein would not comment Monday on whether that was a condition of the settlement.
Copyright © 2019 courthousenews.com


Thunder’s Diallo out 4-to-6 weeks with sprained right elbow
by The Associated PressSAN FRANCISCO (AP) — Oklahoma City guard Hamidou Diallo will be sidelined for four to six weeks with a hyperextension sprain in his right elbow.
The Thunder announced Diallo’s status before Monday night’s road game against the Warriors at Chase Center, saying he would be re-evaluated after that timeframe.
In Friday’s 130-127 home loss to the Lakers, Diallo left in the fourth quarter after taking contact from LeBron James on a driving lay-in early in the period.
Diallo was called for a foul on the play. Thunder coach Billy Donovan challenged the play because James extended his elbow on the drive, causing Diallo to fall back. The call and the basket both stood, and James made the free throw.
On Friday, Diallo had just returned from a three-game absence for a sprained left knee. He has played in 12 games with one start, averaging 8.8 points, 3.8 rebounds and 1.5 steals in 21.4 minutes.
___
More AP NBA: https://apnews.com/NBA and https://twitter.com/AP_Sports
The Associated Press


Thank You!
We will try get back to you as soon as we can!
Your message has been successfully sent!
Return To Main Page
086-1234-123
<EMAIL_ADDRESS>david.cranmer


Laravel & Bun lovers
Register
Backend is built with PHP and Laravel
Laravel »
Fontend is built with Angular and Bootstrap
Angular »
View Source on GitHub: https://github.com/privet56/LaraBun
Source »


Applications for your company and your business or organization, making them according to your needs and easy to use for your clients.
One of the most popular ways to promote yourself and what you do is over a web page. Advertise yourself!
What ever your application shows, API has it. We will create API for you according to the information you provide and what you would like to show in your App.
Have an idea but not sure what actually you need? Our team will design it for you.
We will create an organised collection of data regarding your business, making information easily accessible.
We were also a Start-up company and one of our goals is to help others Starters launch themselves. We will aim to assist in what you require based on our services.
Check out what we can do for you!
Change the way you do business. Transform your business with a mobile application. Make it easier to use and more organized, for your clients and employees.
The easiest way to promote yourself and your business! Reach more customers by sharing your business on online platforms.
We create and develop API's for your applications and websites
We offer a uniquely customized service, determining what you need to be successful.


Content coming soon....
Designer and maintainer for the offical website of the hard rock band Adelitas Way.
Conceptualized as a way to optimize managing my time, this application is a work in progress life-management tool written using Electron, and VueJS.
The application uses a time-blocking system and task prioritization grid to insure the user never misses a deadline.
SafeWalk Simulator is a team academic project developed as a prototype for a software requirements engineering course.
This project simulates NASA's SAFER manuevering system, with a focus on a redesigned Crew Display and Control Module (CDCM), i.e. the hand control module and display unit.
Electron-based open sourced video game editing tool for Star Wars Knights of the Old Republic.


LOST and FOUND
So, you’ve found an earphone and not sure where you’re supposed to report it? Found dirt in your classroom and don’t know the appropriate authority to report?
LOST or FOUND


{% include meta.html %}
Jump to: Pictures!Fun Facts!Video!oxw
Ever since I was a small child, I have always found bison to be fascinating. So I was thrilled when this lumbering animal was voted our national mammal. In case you have a dificult time picturing what this shaggy creature looks like, here are some photos thanks to Wikipedia:
Here are some fun facts about bison pulled straight from National Geographic:
Finally, enjoy this short video produced by the Wildlife Conservation Society. It shares some interesting facts about the comeback bison have made and how it is now our official national mammal:


Previous manuals are available as part of the corresponding source code.
Important note: for v2.0 we temporarily dropped the feature of class-specific histogram generation. If you need class-specific histograms, you can checkout rev 10 from trunk and read the previous manual.
A typical statistics document has a stats:RDFStatsDataset (sub-class of scv:Dataset) which represents a stats:RDFDocument
or stats:SPARQEndpoint
by its stats:sourceUrl
:
_:b1 a stats:RDFStatsDataset ; <http://purl.org/dc/elements/1.1/creator> "dorgon@midearth" ; <http://purl.org/dc/elements/1.1/date> "2009-08-22T12:57:16.589Z"^^<http://www.w3.org/2001/XMLSchema#dateTime> ; stats:sourceType stats:SPARQLEndpoint ; stats:sourceUrl <http://localhost:8888/sparql> .
The histograms are represented as SCOVO stats:SubjectHistogram
looks like this:
[] a stats:SubjectHistogram ; <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> """ATKM/emz97IAAAAFaHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hI1Jlc291cmNl A2h0dHA6Ly9leGFtcGxlLmNvbS9yZXNvdXJjZS9jb25mZXJlbmNlcy8yMzU0MQNodHRwOi8vZXhh bXBsZS5jb20vcmVzb3VyY2UvdG9waWNzLzkDAAAAAAAAAAIAAAAAAAAACQAAAAAAAAAGAAAAAAAA AAoAAAAAAAAADwAAAAAAAAACAAAAAAAAAAkAAAAAAAAABgAAAAAAAAAKAAAAAAAAAA9odHRwOi8v ZXhhbXBsZS5jb20vcmVzb3VyY2UvY29uZmVyZW5jZXMDaHR0cDovL2V4YW1wbGUuY29tL3Jlc291 cmNlL29yZ2FuaXphdGlvbnMDaHR0cDovL2V4YW1wbGUuY29tL3Jlc291cmNlL3BhcGVycwNodHRw Oi8vZXhhbXBsZS5jb20vcmVzb3VyY2UvcGVyc29ucwNodHRwOi8vZXhhbXBsZS5jb20vcmVzb3Vy Y2UvdG9waWNzAw==""" ; <http://purl.org/NET/scovo#dataset> _:b1 ; stats:rangeDimension <http://www.w3.org/2000/01/rdf-schema#Resource> .
It has only a single dimension <http://www.w3.org/2000/01/rdf-schema#Resource>, which means the histogram refers to subject URI resources.
A stats:PropertyHistogram
item may look like:
[] a stats:PropertyHistogram ; <http://www.w3.org/1999/02/22-rdf-syntax-ns#value> """ATKM/TMuamQAAAAFaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEjc3RyaW5nA0dlcm1h bnkDVW5pdGVkIFN0YXRlcwMAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAIAAAAAAAAAAQAAAAAAAAAB AAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAUdlcm1hbnkDSXRhbHkDVGhl IE5ldGhlcmxhbmRzA1VLA1VuaXRlZCBTdGF0ZXMD""" ; <http://purl.org/NET/scovo#dataset> _:b1 ; stats:propertyDimension <http://www.w3.org/2001/vcard-rdf/3.0#Country> ; stats:rangeDimension <http://www.w3.org/2001/XMLSchema#string> .
It has a property and range dimension. Here is the complete example.
The vocabulary is based on a simplified version of SCOVO and available at http://purl.org/rdfstats/stats.
Note: we don't use instances per dimension and link instead directly to property and range URIs - see also ISSUE 18.
Also note that we don't use SCOVO to represent all the histogram buckets. It is also unclear if we will SCOVO in future at all. Until know we are not aware of generic tools that can parse and visualize SCOVO and since our histograms are very specific types of statistical information, it is very unlikely that there will be any generic SCOVO parser for such histograms.
Version v2.0 is currently in preparation, please be patient.
The newest version can be checked out from the Subversion repository.
For your convenience, there are shell scripts available in the /bin folder. Either use Linux/Mac OS X or Cygwin on Windows or compose the classpath manually adding all the jars from the /lib directory and execute java -cp $CP rdfstats.generate.
usage: parameters: -c,--config-file <filename> RDFStats configuration file (either use this and optionally -e OR only use the other command line parameters) -d,--document <document-url> RDF document URL (format will be guessed by extension) -e,--endpoint <endpoint-uri> SPARQL endpoint URI -f,--format <key> File format (RDF/XML, N3, or N-TRIPLES), guessed based on file extension if omitted -m,--strhist-maxlen <length> Maximum length of strings processed for StringOrderedHistogram, default is<PHONE_NUMBER> -o,--out <filename> Model file (loaded if exsists as base model; output is written to screen if omitted) -q,--quick Only generate histograms for new classes or if the number of total instances has changed -s,--size <size> Size of histograms (amount of bins), default is 50 -t,--timezone <timezone> The time zone to use when parsing date values (default is your locale: Central European Time)
Example:
bin/generate -e http://localhost:8888/sparql -o statistics.n3 -f N3 -s 50
The statistics will be written into statistics.n3.
Logback is used over SLF4J as the logging framework,
but you can use any other frameworks by just replacing JARs as described here.
To change the log configuration, edit lib/logback/logback.xml
.
For a quick look into a statistics graph, you can use bin/decode:
usage: parameters: -c,--config <filename> Configuration file -e,--endpoint <endpoint-uri> Only print statistics for this endpoint URI -d,--document <document-url> Only print statistics for this document URL -i,--in <filename> Input RDF file or Web URI -f,--format <format> Input format (RDF/XML, N3, or N-TRIPLES), default: auto-detect based on file extension -t,--timezone <timezone> The time zone to use when parsing date values (default is your locale: Central European Time)
This just pretty-prints the statistics and histogram data to the screen.
To process the statistics in your application, you usually use the RDFStatsModelFactory: to create an RDFStatsModel:
RDFStatsModel m = RDFStatsModelFactory.create("file:statistics.n3", "N3");
alternatively you can specify another Jena model as the wrapped model for RDFStatsModel:
Model m = ModelFactory.createDefaultModel(); m.read("file:statistics.n3", "N3"); RDFStatsModel stats = RDFStatsModelFactory.create(m);
Instead of using command line parameters, RDFStats can be configured using RDF-based configuration files. The vocabulary for RDFStats configuration files can be found at http://purl.org/rdfstats/config. A sample configuration file is provided as part of the release in the root folder.
This is also useful when embedding RDFStats into your applications. If your applications also uses RDF-based configuration, you may even embedd RDFStats configuration data into your configuration and pass the model read from the filesystem (or Web) to the constructor of RDFStatsConfiguration.
Statistics and estimation functions are available via three interfaces:
instanceof
operator at runtime)An RDFStatsDataset
can be obtained from the RDFStatsModel calling getDataset(String sourceUrl)
There are several other interfaces which are extended by those three. The instances are printed below:
public interface RDFStatsModel extends GlobalGraphStatistics { /** get the actual Jena model wrapped by the RDFStatsModel class */ public Model getWrappedModel(); /** get a list of all available SCOVO datasets describing RDF sources */ public List<RDFStatsDataset> getDatasets(); /** get the SCOVO dataset for an RDF source * @throws RDFStatsModelException */ public RDFStatsDataset getDataset(String sourceUrl) throws RDFStatsModelException; /** get subject histogram * * @param sourceUrl of the dataset * @param blankNodes if true, get GenericSingleBinHistogram over blank nodes * @return the subject histogram if exists or null */ public Histogram<String> getSubjectHistogram(String sourceUrl, boolean blankNodes) throws RDFStatsModelException; /** get subject histogram as encoded string */ public String getSubjectHistogramEncoded(String sourceUrl, boolean blankNodes) throws RDFStatsModelException; /** * @param sourceUrl of the dataset * @return list of all properties where histograms are available for */ public List<String> getPropertyHistogramProperties(String sourceUrl); /** * @param sourceUrl of the dataset * @param rangeUri a specific range URI (e.g. http://www.w3.org/2001/XMLSchema#int or http://www.w3.org/2000/01/rdf-schema#Resource) * @return list of all properties, given the property values' range (URI) where histograms are available for */ public List<String> getPropertyHistogramProperties(String sourceUrl, String rangeUri); /** * @param sourceUrl of the dataset * @param property a specific property URI (e.g. http://xmlns.com/foaf/0.1/name or http://www.w3.org/1999/02/22-rdf-syntax-ns#type) * @return list of all range URIs, given property p where histograms are available for */ public List<String> getPropertyHistogramRanges(String sourceUrl, String property); /** get histogram for property, range URI * * @param sourceUrl of the dataset (must not be null) * @param p a property * @param rangeUri * @return the histogram if exists or null */ public Histogram<?> getPropertyHistogram(String sourceUrl, String p, String rangeUri) throws RDFStatsModelException; /** get histogram as encoded string */ public String getPropertyHistogramEncoded(String sourceUrl, String p, String rangeUri) throws RDFStatsModelException; } public interface GlobalGraphStatistics { /** get datasets that possibly have information about r * @throws RDFStatsModelException */ public List<RDFStatsDataset> getDatasetsDescribingResource(String r) throws RDFStatsModelException; /** get the set of all properties */ public Set<String> getProperties(); }
public interface RDFStatsDataset extends JavaResourceView, GraphStatistics, QueryStatistics { public String getSourceType(); public String getSourceUrl(); public String getCreator(); public Calendar getCalendar(); public Date getDate(); } public interface JavaResourceView { public String getURI(); public String getLocalName(); public String getLabel(); public Resource getWrappedResource(); } public interface GraphStatistics { /** @return a list of all properties used */ public Set<String> getProperties(); /** @return total number of distinct subjects including blank nodes, exact value (no estimation) */ public Long getSubjectsTotal() throws RDFStatsModelException; /** @return total number of blank nodes */ public Long getAnonymousSubjectsTotal() throws RDFStatsModelException; /** @return total number of URI subjects */ public Long getURISubjectsTotal() throws RDFStatsModelException; /** @return true if data source has no information about a subject (guaranteed), false positives possible, but no false negatives */ public Boolean subjectNotExists(String uri) throws RDFStatsModelException; // triple pattern estimation /** * @param s subject * @param p predicate * @param o object * @return estimated amount of triples to expect from the triple pattern * @throws RDFStatsModelException */ public Long triplesForPattern(Node s, Node p, Node o) throws RDFStatsModelException; /** * @param s subject * @param p predicate * @param o object * @param filter a list of filter expressions * @return estimated amount of triples to expect from the filtered triple pattern * @throws RDFStatsModelException */ public Long triplesForFilteredPattern(Node s, Node p, Node o, ExprList filter) throws RDFStatsModelException; } /** * each estimate function returns 3 values as an array with indexes: * 0: expected minimum triples * 1: expected average triples (good estimate) * 2: expected maximum triples (if this is 0, it is guaranteed that there are no false negatives but maybe false positives) */ public interface QueryStatistics { public Long[] triplesForBGP(BasicPattern bgp) throws RDFStatsModelException; public Long[] triplesForFilteredBGP(BasicPattern bgp, ExprList exprs) throws RDFStatsModelException; public Long[] triplesForQuery(String qry) throws RDFStatsModelException; public Long[] triplesForQuery(Query qry) throws RDFStatsModelException; public Long[] triplesForQueryPlan(Op plan) throws RDFStatsModelException; }
There is also an extended model for the concurrent (multi-threaded) manipulation of data: the RDFStatsUpdatableModel:
public interface RDFStatsUpdatableModel extends RDFStatsModel { /** get the actual Jena model wrapped by the RDFStatsModel class * * Attention! The obtained model must not be altered if other processes are * may alter this model (usually using the exclusive write lock which may be * obtained by requestExclusiveWriteLock(RDFStatsDataset ds); * * @return the wrapped Jena model */ public Model getWrappedModel(); // locking /** * request exclusive write lock for an RDFStatsDataset * * this is a simple lock for the complete updatable model which can only be acquired by one process at the same time * an additional MRSW lock provided by Jena is used, so during this exclusive write lock, any other process may access the underlying * RDFStatsModel as long as none of the actually updating (writing) methods are currently executing (because they are using the Jena Lock.WRITE) * * The process must return the exclusive lock after it has finished the update process calling returnExclusiveWriteLock(); * * @param ds if null, request write lock for all statistics */ public void requestExclusiveWriteLock(RDFStatsDataset ds); /** * @param ds if null, returns the write lock for all statistics * returns the exclusive write lock * @throws RDFStatsModelException */ public void returnExclusiveWriteLock(RDFStatsDataset ds) throws RDFStatsModelException; // modifications /** * updates a dataset * * @param ds * @param creator * @param date * @return again the ds reference * @throws RDFStatsModelException */ public RDFStatsDataset updateDataset(RDFStatsDataset ds, String creator, Calendar date) throws RDFStatsModelException; /** * create a new dataset get the lock for it * returns the new dataset reference which must be used for further calls to modifying methods * * @param sourceUrl the URI (either to a document or SPARQL endpoint) * @param sourceType URI reference to {@link Stats}.SPARQLEndpoint or .RDFDocument * @param creator * @param date * @return the new dataset * @throws RDFStatsModelException */ public RDFStatsDataset addDatasetAndLock(String sourceUrl, String sourceType, String creator, Calendar date) throws RDFStatsModelException; /** * removes SCOVO items which are part of the dataset ds and have not been changed since the last call to requestExclusiveLock() * * @param ds if null, returns all unchanged items regardless of the dataset * @return the number of removed items * @throws RDFStatsModelException */ public int removeUnchangedItems(RDFStatsDataset ds) throws RDFStatsModelException; /** * explicitly tell the updatable model to keep this histogram when calling removeUnchangedItems(RDFStatsDataset ds); * * @param dataset * @param p * @param rangeUri * @throws RDFStatsModelException */ public void keepPropertyHistogram(RDFStatsDataset dataset, String p, String rangeUri) throws RDFStatsModelException; /** * explicitly tell the updatable model to keep this subject histogram when calling removeUnchangedItems(RDFStatsDataset ds); * * @param dataset * @param blankNodes * @throws RDFStatsModelException */ public void keepSubjectHistogram(RDFStatsDataset dataset, boolean blankNodes) throws RDFStatsModelException; /** * create a new or update existing histogram for specific dataset, property, and rangeUri * * @param dataset * @param p * @param rangeUri * @param encodedHistogram * @throws RDFStatsModelException */ public boolean addOrUpdatePropertyHistogram(RDFStatsDataset dataset, String p, String rangeUri, String encodedHistogram) throws RDFStatsModelException; /** * create a new or update existing subject histogram for specific dataset * * @param dataset * @param blankNodes * @param encodedHistogram * @throws RDFStatsModelException */ public boolean addOrUpdateSubjectHistogram(RDFStatsDataset dataset, boolean blankNodes, String encodedHistogram) throws RDFStatsModelException; /** merge (optionally only newer) statistics from Model newModel into this model * * @param newModel the new model containing one or more RDFStats statistics datasets * @param onlyNewer if true, statistics are only merged if the dc:date of a new dataset is newer than that of the possibly existing dataset for the same RDF source * * @param return true if update fully succeeded, false if only partly * @throws RDFStatsModelException */ public boolean updateFrom(RDFStatsModel newModel, boolean onlyNewer) throws RDFStatsModelException; /** * merge (optionally only newer) statistics from Model newModel into this model * similar to updateFrom(RDFStatsModel newModel, boolean onlyNewer, boolean deleteNonPresent), but restrict on datasets for sourceUrl * * @param sourceUrl only import statistics for this RDF source * @param newModel * @param onlyNewer * * @return true if import finished successfully * @throws RDFStatsModelException */ public boolean updateFrom(String sourceUrl, RDFStatsModel newModel, boolean onlyNewer) throws RDFStatsModelException; }
This is the Histogram API:
/** * @author dorgon * * A histogram using the NATIVE java type. * * There are different implementations for different Java data types internally used like Integer, Float, String, etc. * Each histogram also stores the datatype URI from the original RDF node (see {@link RDF2JavaMapper}.getType(Node val)) * * Methods are either implemented by {@link AbstractHistogram} or by the concrete implementations (e.g. all methods * with NATIVE attributes are implemented specifically). */ public interface Histogram<NATIVE> { /** * @return total number of bins used (i.e. size of the histogram) */ public int getNumBins(); /** * @return histogram data as long[] (bin data) */ public long[] getBinData(); /** * @return data type URI of the source values (see {@link RDF2JavaMapper}.getType(Node val) for details on this URI) */ public String getDatatypeUri(); /** * @param idx the bin index * @return absolute bin quantity (size of the bin with index idx) */ public long getBinQuantity(int idx); /** * @param idx the bin index * @return relative bin quantity (bin quantity / totalValues) in the range [0..1] */ public float getBinQuantityRelative(int idx); /** * @param a NATIVE value * @return estimated quantity for value; estimated value but at least 1 if there is any value in the bin */ public long getEstimatedQuantity(NATIVE val); /** * @param a NATIVE value * @return estimated relative quantity in the range [0..1]; estimated value, but at least > 0 if there is any value in the bin */ public float getEstimatedQuantityRelative(NATIVE val); /** * @return the total amount of values in the source distribution, also used as divisor for normalization */ public long getTotalValues(); /** * @return the number of distinct values in the source distribution */ public long getDistinctValues(); /** * @return true if the source values are unique (e.g. a primary key of a database) */ public boolean hasUniqueValues(); /** * @param a NATIVE value * @return the bin index the NATIVE value goes into; returns -1 if the value is outside of the histogram data range */ public int getBinIndex(NATIVE val); /** * parse a node value to native representation * * this method must have a static version parseNodeValueImpl which can also be used by the * corresponding HistogramBuilder without instantiating the concrete Histogram class * * @param val * @return native Java type * @throws ParseException */ public NATIVE parseNodeValue(Node val) throws ParseException; }
Histogram types with a comparable domain (metric scale) also implement:
public NATIVE getMin(); public NATIVE getMax(); /** * @param val a NATIVE value * @return the cumulative quantity from 0 to a NATIVE value */ public long getCumulativeQuantity(NATIVE val); /** * @param idx bin index * @return the cumulative bin quantity from bin 0 to bin index idx */ public long getCumulativeBinQuantity(int idx); /** * @param val a NATIVE value * @return the cumulative relative quantity in the range [0..1] */ public float getCumulativeQuantityRelative(NATIVE val); /** * @param idx bin index * @return the cumulative relative quantity in the range [0..1] */ public float getCumulativeBinQuantityRelative(int idx); }
There are several possible ways how to embed RDFStats depending on your requirements. Both examples are illustrated in class at.faw.rdfstats.samples.EmbeddingSamples.
This is similar to the standalone program, where you want to monitor several SPARQL endpoints and make the statistics available by a central RDFStatsModel, but it is embedded into your application. In this case, just use the class GeneratorMultiple and supply an RDFStatsConfiguration object:
Model cfgModel = FileManager.get().loadModel("sample-config.ttl"); // or use your application config model RDFStatsConfiguration cfg = new RDFStatsConfiguration(cfgModel); GeneratorMultiple multiGen = new GeneratorMultiple(cfg); Model stats = multiGen.generate(); stats.commit(); // required when using FileModel with Jena assembler to flush all data to disk // now access via RDFStatsModel API RDFStatsModel s = RDFStatsModelFactory.create(stats); Resource ds = s.getDataset(null); ds.get...
The RDFStatsModel stats may be accessed by other processes (see API).
Another way is to use the RDFStatsGeneratorSPARQL (calling RDFStatsGeneratorFactory.generatorSPARQL(String)) class which only fetches statistics for a single endpoint. If you don't have a configuration, just generate a default one like in this example and specify an endpoint:
RDFStatsConfiguration conf = RDFStatsConfiguration.getDefault(); RDFStatsGeneratorSPARQL gen = RDFStatsGeneratorFactory.generatorSPARQL(conf, "http://localhost:8888/sparql"); gen.generate(); // access data RDFStatsModel s2 = RDFStatsModelFactory.create(conf.getStatsModel()); // model is referenced in configuration s2.get...
It is generally not trivial to generate meaningful histograms for strings. This is mainly because of the fact, that strings cannot be mapped easily to a metric scale like real numbers or integers. It is also difficult to find literature about auto-scaling string histograms which was a major requirement for RDFStats (if you have pointers for me, I would be pleased to receive them!).
Basically, there are three approaches:
1. is implemented in SimpleStringHistogram which is used for URIs. Approach 3 is implemented in OrderedStringHistogram because it is order-preserving and the histogram size can be arbitrarily scaled based on occurring common prefixes. Approach 2 is not trival for the general case and sparse distributions with run-away values.
RDFStats is licensed under Apache Software License 2.0
Contact: aka AndyL
This work is funded by the Austrian BMBWK (Federal Ministry for Education, Science and Culture), contract GZ BMWF-10.220/0002-II/10/2007.
Thanks to SourceForge.net for providing the infrastructure.


| Fig. 1 |
The site and tree selection principles of dendrochronology. ... |
| Fig. 2 |
Geographic distribution of targeted samples (ITRDB; red) vs. ... |
| Fig. 3 |
Comparisons of growth variability in ITRDB vs. FIA (targeted ... |
| Fig. 4 |
Comparison of median climate sensitivity and explained varia ... |
| Fig. 5 |
Regional ring-width index (RWI) chronologies for the U.S. So ... |


Users' Reference to B2020
Ken Thompson
edited for B2020 by
John Cowan
ABSTRACT
B2020 is a computer language intended for
recursive, primarily non-numeric applications
typified by system programming. B has a
small, unrestrictive syntax that is easy to compile.
Because of the unusual freedom of expression and
a rich set of operators, B
programs are often quite compact.
This manual contains a concise definition of the language and sample
programs.
[ This is a rendition, after scanning, OCR, and editing,
of an internal Bell Labs Technical Memorandum dated
January 7, 1972. It is Ken's original manual for the B
language on the PDP-11. An
image of the
original document is available in PDF, but it is big:
just under 1MB.
Nearby is CSTR #8,
which is a report by Steve Johnson and Brian Kernighan describing
the B implementation on Honeywell
equipment.
The language being described was really the same, but it's interesting
to look at the differences in description and environment.
To describe the BNF syntax, Ken used a variant that depends
on super- and subscripts to say "how many", which in the original
were stacked above each other when they occurred simultaneously.
This doesn't look too awful in the HTML rendering, but was probably
better in the original.
The other thing that is observable is the degree to which the GCOS
version had to struggle to work in that environment.

--DMR, July 1997 ]
[
Why is B still interesting in 2020?
Because it is a good medium-level language
for use on word-oriented machines
such as the older DEC PDP systems
(excluding the PDP-11).
On such equipment, the typeless nature of B
was an advantage,
whereas on the PDP-11
and other byte-oriented CPUs,
it was nothing but an annoyance.
That was the primary reason
for evolving B into C.
B2020 includes many C convenience features
but retains the typelessness of original B.
If B had not been abandoned,
it would probably have evolved
in something like this way.
--JC, September 2020
]
Introduction
B2020 is a computer language directly descended from B,
which is a computer language directly descendant from BCPL [1,2].
B2020 is good for recursive,
non-numeric, machine independent applications, such as system and
language work.
B2020, compared to BCPL, is syntactically rich in expressions and
syntactically poor in statements (though not as poor as B).
A look at the examples in
section 9 of this document will give a flavor of the language.
B was designed and implemented by D. M. Ritchie and Ken Thompson.
The B2020 modifications that do not come from C
(most of them do)
were designed by John Cowan.
Syntax
The syntactic notation in this manual is basically BNF with the
following exceptions:
The metacharacters < and > are removed. Syntactic variables are
in italics to differentiate them from literals and metacharacters.
-
The metacharacter | is removed. Each syntactic alternative
is placed on a separate line.
-
The metacharacters { and } denote syntactic grouping.
-
A syntactic group followed by numerical sub- and superscripts
denote repetition of the group as follows:
{..}m m,m+1,...
{..}mn m,m+1,...,n
Canonical Syntax
The syntax given in this section defines all the legal constructions
in B2020 without specifying the association rules. These are
given later along with the semantic description of each construction.
program ::=
{definition}0
definition ::=
FIXME
ival ::=
constant
name
statement ::=
auto name = {constant}01 {, name = {constant}01}0 ; statement
extern name {, name}0 ; statement
name : statement
case constant : statement
{ {statement}0 }
if ( rvalue ) statement {else statement}01
while ( rvalue ) statement
do statement until ( rvalue )
for ( rvalue1 ; rvalue2 ; rvalue3) statement
switch rvalue statement
goto rvalue ;
break ;
continue ;
return {( rvalue )}01 ;
{rvalue}01 ;
rvalue ::=
( rvalue )
lvalue
constant
lvalue assign rvalue
inc-dec lvalue
lvalue inc-dec
unary rvalue
& lvalue
rvalue binary rvalue
rvalue relop rvalue
rvalue ? rvalue : rvalue
rvalue ( {rvalue {, rvalue}0 }01 )
assign ::=
= {binary}01
inc-dec ::=
++
--
unary ::=
-
!
~
binary ::=
|
||
&
&&
<<
>>
-
+
%
*
/
relop :=
==
!=
<
<=
>
>=
lvalue ::=
name
* rvalue
rvalue [ rvalue ]
constant ::=
{digit}1
' {char}1 '
" {char}0 "
name ::=
alpha {alpha-digit}0
alpha-digit ::=
alpha
digit
Comments and Character Sets
Comments are delimited as in PL/I by /* and */.
In addition, // indicates a comment
that is delimited by the end of the line.
In general, B2020 requires tokens to be separated by blanks, comments
or newlines, however the compiler infers separators surrounding
any of the characters (){}[],;?: or surrounding any
maximal sequence of the characters +-*/<>&|!.
The character set used in B2020 is Unicode.
The syntactic variable 'alpha' is not defined. It represents any
Unicode character with a General Category
of Ll, Lm, Lt, Lu, or Lo, as well as _.
The syntactic variable 'digit' is not defined. It represents the
characters 0, 1, 2, ... 9.
Other Unicode digits are not included.
The syntactic variable 'char' is not defined. It is essentially
any Unicode character plus the escape character \ followed
by another character to represent characters not easily
represented. The following escape sequences are
currently defined:
\0 null
\( {
\) }
\t tab
\\ \
\' '
\" "
\n new line
In addition, the escape sequence \u followed by four hex digits,
or \U followed by eight hex digits, represents a Unicode character.
All keywords in the language are only recognized in lower case.
Keywords are reserved.
3.0 Rvalues and Lvalues
An rvalue is a binary bit pattern of a fixed length
such as 16, 32, or 64 bits.
Objects are rvalues of different kinds
such as integers, labels, vectors and functions. The actual kind
of object represented is called the type of the rvalue.
A B2020 expression can be evaluated to yield an rvalue, but its type
is undefined until the rvalue is used in some context. It is
then assumed to represent an object of the required type. For
example, in the following function call
(b? f:g[i] )(1, x>1)
The expression (b?f:g[i])
is evaluated to yield an rvalue which
is interpreted to be of type function. Whether f
and g[i]
are in
fact functions is not checked. Similarly, b
is assumed to be of
type truth value, x
to be type integer etc.
There is no check to insure that here are no type mismatches.
Similarly, there are no wanted, or unwanted, type conversions.
An lvalue is a bit pattern representing a storage location
containing an rvalue. An lvalue is a type in B2020. The unary operator
* can be used to interpret an rvalue as an lvalue. Thus
*X
evaluates the
expression x to yield an rvalue, which is then
interpreted as an lvalue. If it is then used in an rvalue context,
the application of * yields the rvalue therein stored. The
operator * can be thought of as indirection.
The unary operator & can be used to interpret an lvalue as an
rvalue. Thus
&x
evaluates the expression x as an lvalue. The application of &
then yields the lvalue as an rvalue. The operator & can therefore
be thought of as the address function.
The names lvalue and rvalue come from the assignment statement
which requires an lvalue on the left and an rvalue on the right.
4.0 Expression Evaluation
Binding of expressions (lvalues and rvalues) is in the same order
as the sub-sections of this section except as noted.
Thus expressions referred to as operands of + (section 4.4)
are expressions defined in sections 4.1 to 4.3.
The binding of operators at the same level
(left to right, right to left) is specified in each sub-section.
4.1 Primary Expressions
A name is an lvalue of one of three storage classes (automatic, external and internal).
A decimal constant is an rvalue.
It consists of a digit
between 1 and 9 followed
by any number of digits between 0
and 9. The value of the
constant should not exceed the
maximum value that can be stored in an object.
A decimal constant is an rvalue.
It consists of a digit
between 1 and 9 followed
by any number of digits between 0
and 9. The value of the
constant should not exceed the
maximum value that can be stored in an object.
An octal constant is the same as a decimal constant except
that it begins with a zero and cannot contain 8 or 9.
It is then interpreted in base 8.
A hexadecimal constant is the same as an octal constant
except that it begins with a zero followed by an x or X,
and can contain the hexadecimal digits a-f or A-F.
It is then interpreted in base 16.
A character constant is represented by ' followed by
as many characters as will fit into a rvalue
when encoded in UTF-8
(possibly escaped) followed by another '.
It has an rvalue equal to the value of the bytes
packed and right adjusted.
A string is any number of characters between " characters.
The characters are packed into adjacent objects (lvalues
sequential) and terminated with the character 'x
'. The
rvalue of the string is the lvalue of the object containing
the first character. See section 8.0 for library functions
used to manipulate strings in a machine independent
fashion.
Any expression in () parentheses is a primary expression.
Parentheses are used to alter order of binding.
A vector is a primary expression followed by any expression
in [] brackets. The two expressions are evaluated to
rvalues, added and the result is used as an lvalue. The
primary expression can be thought of as a pointer to the
base of a vector, while the bracketed expression can be
thought of as the offset in the vector. Since E1[E2
] is
identical to *(E1+E2)
, and addition is commutative, the
base of the vector and the offset in the vector can swap
positions.
A function is a primary expression followed by any number
of expressions in () parentheses separated by commas. The
expressions In parentheses are evaluated (in an unspecified
order) to rvalues and assigned to the function's parameters.
The primary expression is evaluated to an rvalue
(assumed to be type function). The function is then
called. Each call is recursive at little cost in time or
space.
A float constant is an rvalue.
It is written in decimal in the usual notation,
and represents an IEEE binary32 number.
The notations +0.inf, -0.inf, and +0.nan
represent positive and negative infinity and NaN respectively.
Note that the B2020 operators will not work correctly
on floating-point values.
Primary expressions are bound left to right.
4.2 Unary Operators
The rvalue (or indirection) prefix unary operator * is
described in section 3.0. Its operand is evaluated to
rvalue, and then used as an lvalue.
In this manner, address arithmetic may be performed.
The lvalue (or address) prefix unary operator & is also
described in section 3.0. Note that
&*x is identically x,
but *&x is only x if x is an lvalue.
The operand of the negate prefix unary operator - is interpreted
as an integer rvalue. The result is an rvalue with
opposite sign.
The NOT prefix unary operator ! takes an integer rvalue
operand. The result is zero if the operand is non-zero.
The result is one if the operand is zero.
The complement ~ operator takes an integer rvalue operand.
The result is the value interpreted
in two's complement with all bits flipped.
The increment ++ and decrement -- unary operators may be
used either in prefix or postfix form.
Either form requires an lvalue operand. The rvalue stored in the lvalue
is either incremented or decremented by one. The result is
the rvalue either before or after the operation depending
on postfix or prefix notation respectively. Thus if x
currently contains the rvalue 5, then ++x and x++ both
change x to 6. The value of ++x is 6 while x++ is 5.
Similarly, --x and x-- store 4 in X. The former has rvalue
result 4, the latter 5.
Unary operators are bound right to left. Thus -!x++ is bound
-(!(x++)).
4.3 Multiplicative Operators
The multiplicative binary operators *, /, and %, expect rvalue
integer operands. The result is also an integer.
The operator * denotes multiplication.
The operator / denotes division. The result is correct if
the first operand is divisible by the second.
If both operands are positive, the result is truncated
toward zero.
Otherwise the rounding is undefined, but never
greater than one.
The operator % denotes modulo. If both operands are positive,
the result is correct. It is undefined otherwise.
The multiplicative operators bind left to right.
4.4 Additive Operators
The binary operators + and - are add and subtract.
The additive
operators bind left to right.
Shift Operators
The binary operators
<< and >> are left and right shift respectively.
The left rvalue operand is taken as a bit pattern.
The right operand is taken as an integer shift count.
The result is the bit pattern shifted by the shift count.
Vacated bits are
filled with zeros. The result is undefined if the shift count
negative or larger than an object length. The shift operators
bind left to right.
4.6 Relational Operators
The relational operators < (less than), <= (less than or equal
to), > (greater than), and >= ( greater than or equal to) take
integer rvalue operands. The result is one if the operands are
in the given relation to one another. The result is zero otherwise.
4.7 Equality Operators
The equality operators == (equal to) and != (not equal to)
perform similarly to the relation operators.
4.8 The AND operators
The AND operator & takes operands as bit patterns. The result is
the bit pattern that is the bit-wise AND of the operands.
The logical AND operator && takes operands as
boolean values, where 0 means false. If the left operand is 0,
it will be returned and the right operand will not be evaluated.
Otherwise the right operand is returned.
The OR operators
The OR operator | performs exactly as AND, but the result is the
bit-wise inclusive OR of the operands.
The logical OR operator || takes operands as
boolean values, where 0 means false. If the left operand is not 0,
it will be returned and the right operand will not be evaluated.
Otherwise the right operand is returned.
4.10 Conditional Expression
Three rvalue expressions separated by ? and : form a conditional
expression. The first expression (to the left of the ?) is
evaluated. If the result is non-zero, the second expression is
evaluated and the third ignored. If the value is zero, the
second expression is ignored and the third is evaluated. The
result is either the evaluation of the second or third expression.
Binding is right to left. Thus a?b:c?d:e
is a?b:(c?d:e)
.
4.11 Assignment Operators
There are 12 assignment operators in B2020. All have the form
lvalue op rvalue
The assignment operator
= merely evaluates the rvalue and stores
the result in the lvalue. The assignment operators |=, &=, =,
|=, <<=, >>=, +=, -=, %=, *=, and /= perform a
binary operation (see sections 4.3 to 4.9) between the rvalue
stored in the assignment's lvalue and the assignment's rvalue.
The result is then stored in the lvalue. The expression x*=10 is
identical to x=x*10. The result
of an assignment is the rvalue. Assignments bind right to left,
thus x=y=0 assigns zero to y, then x, and returns the rvalue
zero.
5.0 Statements
Statements define program execution. Each statement is executed
by the computer in sequence. There are, of course, statements to
conditionally or unconditionally alter normal sequencing.
5.1 Compound Statement
A sequence of statements in {} braces is syntactically a single
statement. This mechanism is provided so that where a single
statement is expected, any number of statements can be placed.
5.1 Conditional Statement
A conditional statement has two forms. The first:
if(rvalue) statement1
evaluates the rvalue and executes statement1, if the rvalue is
non-zero. If the rvalue is zero, statement1 is skipped. The
second form:
if(rvalue) statement1 else statement2
is defined as follows in terms of the first form:
if(x=(rvalue)) statement1 if(!x) statement2
Thus, only one of the two statements is executed, depending on
the value of rvalue. In the above example,
x is not a real variable, but just a demonstration aid.
5.3 Loop Statements
The while statement has the form:
while(rvalue) statement
The execution is described in terms of the conditional and goto
statements as follows:
x: if(rvalue) { statement goto x; ]
Thus the statement is executed repeatedly while the rvalue is
non-zero. Again, x is a demonstration aid.
The do-until statement has the form:
do statement until (rvalue)
The execution is described in terms of the conditional and goto
statements as follows:
x: { statement; if (!rvalue) goto x; }
Thus the statement is executed at least once, and then repeatedly
while the rvalue is not 0.
The for statement has the form:
for(rvalue1; rvalue2; rvalue3) statement
The execution is described in terms of the while
statement as follows:
{ rvalue1; while(rvalue2) { statement; rvalue3 } }
Thus rvalue1 is evaluated,
and then the statement is executed and rvalue3 is evaluated repeatedly
while rvalue2 is non-zero.
5.4 Switch Statement
The switch statement is the most complicated
statement in B2020. The
switch has the form:
switch rvalue statement1
Virtually always, statement1 above is a compound statement. Each
statement in statement1 may be preceded by a case as follows:
case constant:
During execution, the rvalue is evaluated and compared to each
case constant in undefined order. If a case constant is equal to
the evaluated rvalue, control is passed to the statement following
the case. If the rvalue matches none of the cases, statement1
is skipped.
5.5 Jump Statements
The goto statement is as follows:
goto rvalue ;
The rvalue is expected to be of type label. Control is then
passed to the corresponding label. Goto's cannot be executed to
labels outside the currently executing function level.
The break statement is as follows:
break ;
Control is passed to the statement
following the innermost enclosing
loop or break statement.
The continue statement is as follows:
continue ;
Control is passed to the statement
the first statement
of the innermost enclosing loop statement.
However, if the loop statement is a for statement,
its rvalue3 is re-evaluated first.
5.6 Return Statement
The return statement is used in a function to return control to
the caller of a function. The first form simply returns control.
return ;
The second form returns an rvalue for the execution of the function.
return ( rvalue ) ;
The caller of the function need not use the returned rvalue.
3.7 Rvalue Statement
Any rvalue followed by a semicolon is a statement. The two most
common rvalue statements are assignment and function call.
5.8 Null Statement
A semicolon is a null statement causing no execution. It is used
mainly to carry a label after the last executable statement in a
compound statement. It sometimes has use to supply a null body
to a while statement.
No updates past this point.
6.0 Declarations
Declarations in B2020 specify storage class
of variables. Such declarations also, in some circumstances,
specify initialization.
There are
three storage
classes in B2020. Automatic storage is allocated for
each function
invocation. External storage is allocated before
execution and
is available to any and all functions.
Internal storage is local to a function and is available only to
that function, but is available to all invocations of that function.
6.1 External Declaration
The external declaration has the form:
extern name1 , name2 ... ;
The external declaration specifies that each of
the named variables is of the external storage class.
The declaration must
occur before the first use of each of the variables. Each of the
variables must also be externally defined.
6/2 Automatic Declaration
The automatic declaration also constitutes a definition:
auto name1 {constant}01 , name2 {constant]01 ... ;
In absence of the constant, the automatic declaration defines the
variable to be of class automatic. At the same time, storage is
allocated for the variable. When an automatic declaration is
followed by a constant, the automatic variable is
also initialized to the base of an automatic vector
of the size of the constant.
The actual subscripts used to reference the vector range
from zero to the value of the constant less one.
6.3 Internal Declaration
The first reference to a variable not declared as external or
automatic constitutes an internal declaration, All internal
variables not defined as labels are flagged as undefined within a
function. Labels are defined and initialized as follows:
name :
7.0 External Definitions
A complete B2020 program consists of a series of external definitions.
Execution is started by the hidden sequence
main(); exit();
Thus, it is expected that one of the external definitions is a
function definition of main. (Exit is a predefined library function.
See section 8.0)
7.1 Simple Definition
The simple external definition allocates an external object and
optionally initializes it:
name {ival , ival ...}0 ;
If the external object is defined with no initialization, it is
initialized with zero. A single initialization with a constant
initializes the external with the value of the constant.
Initialization with a name initializes the external to the address of
that name. Many such initializations may be accessed as a vector
based at &name.
7.2 Vector Definitions
An external vector definition has the following form:
name [ {constant}01 ] {ival , ival ...}0 ;
The name is initialized with the lvalue of the base of
an external vector. If the vector size is missing, zero is assumed. In
either case, the vector is initialized with the list of initial
values. Each initial value is either a constant or a name. A
constant initial value initializes the vector element to the
value of the constant. The name initializes the element to the
address of the name. The actual size
is the maximum of the given size and the number of initial values.
7.3 Function Definitions
Function definitions have the following form:
name ( arguments ) statement
The name is initialized to the rvalue of the function.
The arguments consist of a list of names separated by commas.
Each name defines an automatic lvalue that is assigned the rvalue of the
corresponding function call actual parameters. The statement
(often compound) defines the execution of the function when invoked.
8.0 Library Functions
There is a standard library of B2020 functions.
The following is a list of those functions:
- c = char(string, i);
-
The i-th character of the string is returned.
- error = chdir(string) ;
-
The path name represented by the string becomes
the current directory.
A negative number returned indicates an error.
- error = chmod(string, mode);
-
The file specified by the string has its mode changed to
the mode argument. A negative number returned indicates an
error. (*)
- error = chown(string, owner);
-
The file specified by the string has its owner changed to
the owner argument. A negative number returned indicates
an error. (*)
- error = close(file) ;
-
The open file specified by the file argument is closed. A
negative number returned indicates an error. (*)
- file = creat(string, mode);
-
The file specified by the string is either truncated or
created in the mode specified depending on its prior existence.
In both cases, the file is opened for writing and a
file descriptor is returned. A negative number returned
indicates an error. (*)
- ctime(time, date);
-
The system time (60-ths of a second) represented in the
two-word vector time is converted to a 16-character date in
the 8-word vector date. The converted date has the following format:
"Mmm dd hh:mm:ss".
- execl(string, arg0, arg1, ..., 0);
-
The current process is replaced by the execution of the
file specified by string. The arg-i strings are passed as
arguments. A return indicates an error. (*)
- execv(string, argv, count);
-
The current process is replaced by the execution of the
file specified by string. The vector of strings of length
count are passed as arguments. A return indicates an error. (*)
- exit( ) ;
-
The current process is terminated. (*)
- error = fork( ) ;
-
The current process splits into two. The child process is
returned a zero. The parent process is returned the process ID of
the child. A negative number returned indicates
an error. (*)
- error = fstat(file, status);
-
The i-node of the open file designated by file is put in
the 20-word vector status. A negative number returned
indicates an error. (*)
- char = getchar( ) ;
-
The next character form the standard input file is returned.
The character `*e' is returned for an end-of-file.
- id = getuid();
-
The user-ID of the current process is returned. (*)
- error = gtty(file, ttystat);
-
The teletype modes of the open file designated by file is
returned in the 3-word vector ttstat. A negative number
returned indicates an error. (*)
- lchar(string, i, char);
-
The character char is stored in the i-th character of the
string.
- error = link(string1, string2);
-
The pathname specified by string2 is created such that it
is a link to the existing file specified by string1. A
negative number returned indicates an error. (*)
- error = mkdir(string, mode);
-
The directory specified by the string is made to exist with
the specified access mode. A negative number returned
indicates an error. (*)
- file = open(string, mode);
-
The file specified by the string is opened for reading if
mode is zero, for writing if mode is not zero. The open
file designator is returned. A negative number returned
indicates an error. (*)
- printf(format, argl, ...);
-
See section 9.3 below.
- printn(number, base);
-
See section 9.1 below.
- putchar(char) ;
-
The character char is written on the standard output file.
- nread = read(file, buffer, count);
-
Count bytes are read into the vector buffer from the open
file designated by file. The actual number of bytes read
are returned. A negative number returned indicates an
error. (*)
- error = seek(filet offset, pointer);
-
The I/O pointer on the open file designated by file is set
to the value of the designated pointer plus the offset. A
pointer of zero designates the beginning of the file. A
pointer of one designates the current I/O pointer. A
pointer of two designates the end of the file. A negative
number returned indicates an error. (*)
- error = setuid(id);
-
The user-ID of the current process is set to id.
A negative number returned indicates an error. (*)
- error = stat(string, status);
-
The i-node of the file specified by the string is put in
the 20-word vector status. A negative number returned
indicates an error. (*)
- error = stty(file, ttystat);
-
The teletype modes of the open file designated by file is
set from the 3-word vector ttystat. A negative number
returned indicates an error. (*)
- time(timev);
-
The current system time is returned in the 2-word vector
timev. (*)
- error = unlink(string);
-
The link specified by the string is removed. A negative
number returned indicates an error. (*)
- error = wait( );
-
The current process is suspended until one of its child
processes terminates. At that time, the child's process-ID
is returned. A negative number returned indicates an error. (*)
- nwrite = write(file, buffer, count);
-
Count bytes are written out of the vector buffer on the
open file designated by file. The actual number of bytes
written are returned. A negative number returned indicates
an error. (*)
Besides the functions available from the library, there is a
predefined external vector named argv included with every program.
The size of argv is argv[0]+1.
The elements
argv[1]...argv[argv[0]] are the parameter strings as passed by
the system in the execution of the current process. (See shell
in II of [4])
9.0 Examples
The examples appear exactly as given to B.
9.1
/* The following function will print a non-negative number, n, to
the base b, where 2<=b<=10, This routine uses the fact that
in the Unicode character set, the digits O to 9 have sequential
code values. */
printn(n,b) {
extern putchar;
auto a;
if(a=n/b) /* assignment, not test for equality */
printn(a, b); /* recursive */
putchar(n%b + '0');
}
9.2
/* The following program will calculate the constant e-2 to about
4000 decimal digits, and print it 50 characters to the line in
groups of 5 characters. The method is simple output conversion
of the expansion
1/2! + 1/3! + ... = .111....
where the bases of the digits are 2, 3, 4, . . . */
main() {
extern putchar, n, v;
auto i, c, col, a;
i = col = 0;
while(i<n)
v[i++] = 1;
while(col<2*n) {
a = n+1 ;
c = i = 0;
while (i<n) {
c =+ v[i] *10;
v[i++] = c%a;
c =/ a--;
}
putchar(c+'0');
if(!(++col%5))
putchar(col%50?' ': '*n');
}
putchar('*n*n');
}
v[2000];
n 2000;
9.3
/* The following function is a general formatting, printing, and
conversion subroutine. The first argument is a format string.
Character sequences of the form `%x' are interpreted and cause
conversion of type 'x' of the next argument, other character
sequences are printed verbatim. Thus
printf("delta is %d*n", delta);
will convert the variable delta to decimal (%d) and print the
string with the converted form of delta in place of %d. The
conversions %d-decimal, %o-octal, *s-string and %c-character
are allowed.
This program calls upon the function `printn'. (see section
9.1) */
printf(fmt, x1,x2,x3,x4,x5,x6,x7,x8,x9) {
extern printn, char, putchar;
auto adx, x, c, i, j;
i= 0; /* fmt index */
adx = &x1; /* argument pointer */
loop :
while((c=char(fmt,i++) ) != `%') {
if(c == `*e')
return;
putchar(c);
}
x = *adx++;
switch c = char(fmt,i++) {
case `d': /* decimal */
case `o': /* octal */
if(x < O) {
x = -x ;
putchar('-');
}
printn(x, c=='o'?8:1O);
goto loop;
case 'c' : /* char */
putchar(x);
goto loop;
case 's': /* string */
while(c=char(x, j++)) != '*e')
putchar(c);
goto loop;
}
putchar('%') ;
i--;
adx--;
goto loop;
}
10.0 Usage
Currently on UNIX, there is no B command. The B compiler phases
must be executed piecemeal. The first phase turns a B source
program into an intermediate language.
/etc/bc source interm
The next phase turns the intermediate language into assembler
source, at which time the intermediate language can be removed.
/etc/ba interm asource
rm interm
The next phase assembles the assembler source into the object
file a.out. After this the a.out file can be renamed and the
assembler source file can be removed.
as asource
mv a.out object
rm asource
The last phase loads the various object files with the necessary
libraries in the desired order.
ld object /etc/brt1 -lb /etc/bilib /etc/brt2
Now a.out contains the completely bound and loaded program and
can be executed.
a.out
A canned sequence of shell commands exists invoked as follows:
sh /usr/b/rc x
It will compile, convert, assemble and load the file x.b into the
executable file a.out.
12.0 Implementation and Debugging
A B program is implemented as a reverse Polish threaded code
interpreter: The object code consists of a series of addresses of
interpreter subroutines. Machine register 3 is dedicated as the
interpreter program counter. Machine register 4 is dedicated as
the interpreter display pointer. The display pointer points to
the base of the current stack frame. The first word of each
stack frame is a pointer to the previous stack frame (prior
display pointer.) The second word in each frame is is the saved
interpreter program counter (return point of the call creating
the frame.) Automatic variables start at the third word of each
frame. Machine register 5 is dedicated as the interpreter stack
pointer. The machine stack pointer plays no role in the interpretation.
An example source code segment, object code and
interpreter subroutines follow:
automatic = external + 100.;
va; 4 / lvalue of first automatic on stack
x; .external / rvalue of external on stack
c; 100. / rvalue of constant on stack
b12 / binary operator #12 (+)
b1 / binary operator #1 (=)
...
va:
mov (r3)+,r0
add r4,rO / dp+offset of automatic
asr rO / lvalues are word addresses
mov r0,(r5)+
jmp *(r3)+ / linkage between subroutines
x:
mov *(r3)+,(r5)+
jmp *(r3)+
c:
mov (r3)+,(r5)+
jmp *(r3)+
b12:
add -(r5),-2(r5)
jmp *(r3)+
b1:
mov -(r5),r0 / rvalue
mov -(r5),r1 / lvalue
asl r1 / now byte address
mov r0,(r1) / actual assignment
mov r0,(r5)+ / = returns an lvalue
jmp *(r3)+
The above code as compared to the obvious 3 instruction directly
executed equivalent gives the approximate 5:1 speed and 2:1 space
penalties one pays in using B.
The salient features for debugging are then:
- 1.
-
Machine r4 is the display pointer and can be used to trace
function calls and determine automatic variable values at
each call.
- 2.
-
Machine r3 is the current program counter and can be used
to determine the current point of execution.
All externals are globals with their variable names prefixed by
`.'. Thus the debugger [4] can be used directly
to give values of external variables.
- 4.
-
All data lvalues are word addresses and therefore not
directly examinable by the debugger. (See ` request in I
of [4]) [I don't really know what this might refer to.
It is probably some command in the very early Unix debugger -- DMR]
13.0 Nasties
This section describes the 'glitches' found in all languages, but
rarely reported.
- 1.
-
The compiler makes sense of certain expressions with
operators in ambiguous cases (e.g. a+++b) but not others
even in unambiguous cases (e.g. a+++++b).
- 2.
-
The B assembler /etc/ba does not correctly handle
all possible combinations of intermediate language. The symptom
is undefined symbols in the assembly of the output from
/etc/ba. This is rare.
- 3.
-
The B interpreter /etc/bilib is really a library of threaded code segment.
The following code segments have not yet been written:
b103 =&
b104 ===
b105 =!=
b106 =<=
b107 =<
b110 =>=
b111 =>
b120 =/
- 4.
-
Initialization of external variables with addresses
of other externals is not possible due to a loader deficiency.
- 5.
-
Since externals are implemented as globals with names preceded by '.',
the external names `byte', `endif', `even'
and `globl' conflict with assembler pseudooperations and
should be avoided.
Diagnostics
Diagnostics
consist of two letters, an optional name, and a
source line number. Due to the free format of the source, the
number might be high. The following is a list of the
diagnostics.
error name meaninq
$) -- {} imbalance
() -- () imbalance
*/ -- /* */ imbalance
[] -- [] imbalance
>c -- case table overflow (fatal)
>e -- expression stack overflow (fatal)
>i -- label table overflow (fatal)
>s -- symbol table overflow (fatal)
ex -- expression syntax
lv -- rvalue where lvalue expected
rd name name redeclaration
sx keyword statement syntax
un name undefined name
xx -- external syntax
[ signature line ]
References
- 1.
-
Richards, M. The BCPL Reference Manual. Multics repository
M0099.
- 2.
-
Canaday, R.H. and Ritchie, D.M. Bell Laboratories BCPL.
MM 69-1371/1373-7/12.
- 3.
-
Ritchie, D.M. The UNIX Time Sharing System. MM 71-1273-4.
- 4.
-
Thompson, K. and Ritchie, D.M. UNIX Programmer's Manual.
Available by arrangement.
[Two of these references--the one to Richards's early BCPL
manual, and to the first edition of the UNIX Programmer's manual, are
available under my main home page.
The ultimate content of "The UNIX Time Sharing
System evolved into the C.ACM paper, there (in
further revised form) into the BSTJ paper available
there as well.]
Copyright © 1996 Lucent Technologies Inc. All rights reserved.


Comp Camp(Computer Camp) Is an ICT-Driven platform that seeks to front the spread of digital literacy in kids in rural and marginalized communities. This Event is organized by AFRICAN CENTRUNION a social intervention initiative that aims at using knowledge transfer in ICT and Entreprenuership to fight Africa's big3: Ignorance, Poverty & Sickness!
Some Position
Some Position
Some Position
We are a group of young guyz with a passion for great digital literacy that serves a practical purpose.


{{ request.user|capfirst }}
Support
{% include "topbar_test.html" %}
Feedback Form
Feedback List
Date of complain/Feedback received
Name
Sex
-- Select Sex --
Male
Female
Other
Address
District
-- Select District --
Rajshahi
Rangpur
Khulna
Barisal
Upazila
-- Select Upazila --
Union
-- Select Union --
Ward
-- Select Ward --
ward
Contact
{#
#} {#
Feedback From
#} {#
#} {#
#} {##} {#
#} {#
Feedback For
#} {#
#} {#
#}
Feedback From
-- Select Feedback Type --
Beneficiary
Non-beneficiary
Partner/partner staff
Gov't staff
Oxfam staff
Anonymous
{#
#}
Feedback For
-- Select Feedback Type --
Local Partner
Oxfam Bangladesh
{#
#}
Feedback Summary
Feedback Type
-- Select Feedback Type --
Sensitive
Urgent
Normal
Mode of Feedback
-- Select Mode of Feedback --
Oral/Face to face
Written
Email
Phone call/SMS
Postal
Other
Feedback Resolve Deadline
Feedback Status
-- Select Feedback Status --
Managed
Referred
Under Process
Not responded
Additional Remarks
Cancel
{% include "footer_test.html" %}


The server closed the network connection because the browser didn't finish the request within the specified time.