Rose Tremain was one of only five women writers to be included in Granta’s original list of 20 Best of Young British Novelists in 1983. Her novels and short stories have been published worldwide in 27 countries and have won many prizes, including the Sunday Express book of the Year Award (for Restoration, also shortlisted for the Booker Prize); the Prix Femina Etranger, France (for Sacred Country); the Whitbread Novel of the Year Award (for Music & Silence) and the Orange Prize for Fiction 2008 (for The Road Home). Restoration was filmed in 1995 and a stage version was produced in 2009.
Her latest novel is the acclaimed The Gustav Sonata which sees Rose writing at the height of her inimitable powers
(Observer). Rose’s books are available through Suffolk Libraries.
Who were your literary influences when you were growing up?
At my school, we read no contemporary literature at all. It wasn’t until I was about sixteen that I discovered, for instance, Lawrence Durrell, whose over-rated purple prose felt beautiful to me then. I loved it so much, I wanted to eat the text! Meanwhile, I tried to write lyric poetry like Keats and gripping yarns, like Conrad. But the then Poet Laureate, John Masefield was watching over me. Our class made some poster-paint pictures of scenes from his novel, Lost Endeavour, and sent them to Masefield, and he was so touched that he invited us all to tea. I was then about 14 and I confided to him that I wanted to be a writer and he quoted W.B. Yeats to me: “Do not hurry, do not rest.” And I have never forgotten this.
Do you spend a lot of time researching? What is your writing routine?
Research is important. If, like me, you write about experiences outside your own, you have to know the world you’re trying to evoke. I work not only from written research, but a lot from pictures and photographs. For my recent novel, The Gustav Sonata, one of the most helpful sources was a traveller’s guide to Switzerland, heavily illustrated with pictures of everything from pastures to patisserie, cathedrals to cheese manufacture. Interior scenes and indeed landscapes can be evoked by the tiniest details, but they have to feel real and true. But here, I was also helped by my own memorable experiences of being taken to Switzerland as a young child and, later being sent to school there for a year.
Writing routines vary for every one of us. The most important thing, when I’m working on a novel, is to try to clear the diary of interruptions. This isn’t always easy because talking to audiences about our work has become part of a writer’s life. But my happiest days are those when I can work without being disturbed for six or seven hours.
What draws you to a new subject?
This is a mysterious process. Over a long writing life, I’ve been drawn to a variety of subjects and themes and I can never predict where I’m likely to go next. But this, I think, is what has kept me going over forty years as a published author. I seldom recycle any part of my own biography, but search for new places and characters who are distant from me in age, type and (often) gender. This is the process which gets my imagination working. Dreaming a new story into existence is as enthralling to me now as it was when I was 30.
Robert Merivel: What makes people love this man?
I think people love Robert Merivel because we are all – every one of us – like him, in certain ways. We are courageous and yet afraid, boastful and yet uncertain of our capacities, drawn to material splendour but pricked by a puritanical conscience. We can also usually predict – ahead of him – the troubles he is going to tumble into, and then laugh or cry with him. In other words, he is human and fallible, but often saved by irony and wit and a tendency to collapse into drunken monologues or unstoppable giggling at inappropriate moments.
Once this character was ‘found’, via his voice and his appetites, it was easy to become him. I always knew that, one day, I would write the sequel to Restoration and this came out (Merivel: A Man of His Time) in 2013. In the second book, Sir Robert is older, but not much wiser and the world around him begins to darken.
Are Anton and Gustav in The Gustav Sonata based on anyone?
These boys are pure inventions, not based on anyone. However, in the opening section, I draw on some personal recollections of the loneliness of childhood and its terrors and the way adult behaviour is so unpredictable. Connected to the idea of Swiss ‘neutrality’ (a state much harder to sustain that we might suppose), I wanted to create a person, Gustav, who, because he is not loved, strives for a kind of ‘neutrality of feeling’ all his life. He achieves a high degree of self-mastery, but his passionate love for Anton threatens to undermine this from the day they first meet at Kindergarten, aged 5. Anton is Gustav’s antithesis, the spoilt child of loving parents, with seemingly boundless self-belief. Yet Anton, too, is overwhelmed by destructive forces within himself and he comes to realise that the only person who can save him is Gustav.
What is your latest project?
I’m working on several things: a stage play based on my short story, The Darkness of Wallis Simpson, a 3-part TV adaptation of my novel, Trespass, a mystery with incest at its troubled heart, set in the Cevennes region of France, and a story for children about an iron bird. I have a new idea for a novel, but this is a tiny, hard-to-see embryo, which may or may not put on flesh and acquire a beating heart. Watch this space – or rather, perhaps, don’t watch it!
Do you have a message for your many readers in Suffolk Libraries?
You’ve been patient with my many excursions into different forms and subjects and I hope most of you have found something to love. I’ll try to keep on working and experimenting and not let you down.


To run you must supply client ID and api key in ../oauthConfig.js, and launch from localhost with no port.


|
|||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Class Summary | |
|---|---|
| ActionMessagesTool | This tool deals with Struts action messages. |
| ErrorsTool | This tool deals with Struts error messages. |
| FormTool | View tool to work with HTML forms in Struts. |
| MessageResourcesTool | Abstract view tool that provides access to Struts' message resources. |
| MessageTool | The MessageTool is used to render internationalized message strings. |
| SecureLinkTool | Tool to be able to use Struts SSL Extensions with Velocity. |
| StrutsLinkTool | The StrutsLinkTool extends the standard LinkTool to add methods
for working with Struts' Actions and Forwards: |
| StrutsUtils | A utility class to expose the Struts shared resources. |
| TilesTool | The TilesTool is used to interact with the Struts-Tiles framework that is part of Struts 1. |
| ValidatorTool | View tool that works with Struts Validator to produce client side javascript validation for your forms. |
VelocityStruts contains view tools for integrating Velocity with the Apache Struts 1 framework by providing easy access to Struts resources from within Velocity templates.
|
|||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


An acquaintance of mine recently attempted to acculturate into my society, yet his mannerisms and behavior did not meet the acceptability standards that I personally believed were necessary for membership. [G|D]
By working together, we were able to come up with an innovative adaptation strategy that allowed us to use adobe bricks to build a more adaptive structure for our needs. [G|D]
As we approached the advent of a new era, my aide carefully searched for the perfect agate - a symbol of courage and strength to carry us through the coming days. [G|D]
Alleging his innocence, he ran with alacrity to the alabaster palace, desperately hoping that they would believe him and save him from his plight. [G|D]


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import includes.errorSummary @(formForErrorSummary: Option[Form[_]] = None, mainHeadingText: String, preHeadingText: String, headerWidthClasses: Option[String] = Some("column-two-thirds"), preHeadingAccessibleAnnouncement: String = "", customBackLinkContent: Option[Html] = None, additionalTopLinkContent: Option[Html] = None )(implicit messages: Messages) @preHeadingHidden = @{ if(preHeadingAccessibleAnnouncement=="") messages("tai.ptaHeader.accessible.preHeading") else preHeadingAccessibleAnnouncement }


In this tutorial we will create a FHIR server that can then be used as a sandox for future development. Creating a FHIR server from scratch can be a time consuming process. There are a variety of pre-built solutions out there including open-source options. In creating this tutorial I was looking for something that works quickly out-of-the-box with minimal low level coding. Basically, I want you, the learner, to be able to spend your time working with FHIR, rather than having to spend a lot of time installing and getting the server to run correctly.
Thankfully, the folks at Health Samurai have created a free solution that meets the criteria above. Their product - AidBox.io - is a nice option for getting up and running quickly.
The remainder of this tutorial will show how to get up and running with Aidbox, and perform basic Read and Write FHIR functions on your own FHIR sandbox.
Disclosure: I have no financial or other connection with Health Samurai. AioBox.io just happens to be the fastest and easiset solution I have come across on the web.
Other options include:
The sign-up process is about as simple as it can be. Register on the website by entering your name, company name, and email. You will receive a confirmation email that has a link in it. When you click the link you will be brought back to the AidBox.io website and asked to enter a password.
Voila! Wasn't that easy?
Now just log in to your new account and proceed to the next step.
Once you've logged in to your new AidBox account you should see the screen below. There is only one more step before you have your FHIR server up and running, and that is creating a "Box".
Simply give your FHIR server "Box" a unique name and click "Create". A new server will be created and you will see a link to it appear in a box on your AidBox Dasboard, like this:
Click on the link to your new box and proceed to the next step.
The last piece of the puzzle to get your server up and running (so that you can easily access it from an outside client) is to set up the security policy. FHIR allows you to set the access policy on a resource by resource level. The policy that we will set up is blank, meaning that anyone, anywhere can connect to your server and read, write, and delete any data. This is obviously not the security policy you would use for a production server, but for playing in the sandbox, it is a perfect place to start.
Select "Security" from the left hand menu bar. You should see the following screen:
Give your new securty access policy an Id, Title, and Description. In the Policy box below, you want to enter one set of open and closed braces: {}
. Then scroll to the bottom of the screen and select "Create".
You should now see the policy you've created show up in the Policy list. If you click on the title of your Policy in the list you will again see the Id, Title, Description, and policy code that you just created. You can make changes and save this policy again if needed.
Now that we opened all the doors to our server, proceed to the next step and let's take it for a test drive.
To test if your server and access policies are working, open a new web browser window, and enter the FHIR endpoint URL for your personal AidBox. This will consist of the name you chose for your box plus ".aidbox.io/fhir/". For instance, the AidBox created for this website is http://learnFHIR.aidbox.io/fhir
If you enter that into the address bar of your web browser you should see something like the following:
The text you see displayed in the browser window is the Conformance Statement for your FHIR server. This is a data structure that tells anyone who is interested what FHIR Resources are available from your server (among other things).
If you can see the Conformance Statement, congratulations! You are up and running with your own private FHIR server. You are officially part of the future of healthcare interoperability.
AidBox also provides a slick interface for testing your RESTful endpoint (http://[your-server-name]/fhir/
). If you return to the AidBox Dashboard and select "REST Console" from the left side menubar, you will see the following screen:
AidBox also conveniently gives a number of sample FHIR resource interactions along the right hand side of the screen. Experimenting with those samples is a good way of becoming familiar with a wide variety of FHIR functions.
In the center of the screen is a dropdown list that allows you to choose from the standard RESTful interactions: GET, PUT, POST, DELETE. To retrieve information from a FHIR resource we want to select "GET". To GET a list of patients we point our FHIR URL at /fhir/patient
and click the execute button (or control-enter). Try this in your server and you should see a screen like this:
You can see that the FHIR query returned a "Bundle" of information. However, this bundle returned a total of 0 objects. Why? Because we don't yet have any information in our FHIR database to find!
The last step in our tutorial will be putting some sample data onto the FHIR server, so when we do a query we have something to find.
AidBox also provides a variety of premade FHIR interactions including reading and writing information from the server. Lets use one of these pre-made calls first just to see what the interaction looks like.
Scroll down the options along the right side of the REST Console dashboard until you find the one called "Create Patient Adam". Notice that the REST call has changed from GET
to POST
. A POST
call will create new information in the database.
The URL is pointed at the "Patient" resources http://[server]/fhir/Patient
. The JSON data object shown direclty below the URL is the Patient object that will be added to the database.
Click the "Execute" button and you should see the following:
The Response body will echo the same Patient data object that was just added to the FHIR database. You can explore the data object itself by clicking on the individual data items and drilling into the object substructure. You can also change the display method from "Pretty" to "Raw" and look at the full JSON of the patient resource:
Now create a new FHIR request by selecting GET
, typing /fhir/Patient
into the URL, and clicking execute. This creates a FHIR query for all the patients in the database. Once you execute the query you should see the following response:
Notice that the bundle now contains 1 entry. If you drill down into the entry
section of the reponse you will see the patient information for "Adam", the simulated patient that you added to the database in the previous step.
Let's do this again, but instead of using the pre-formatted AidBox example well make our own Patient resource. This time, change the REST function to POST
and enter /fhir/Patient
at the URL.
In the data console below the URL copy and paste the text below:
{ "birthDate" : "1981-09-21", "resourceType" : "Patient", "active" : true, "gender" : "male" }
You can change the birthdate and gender of the data object, but don't change the resource type or active value, otherwise the FHIR call will not work as expected.
Once you click Execute
you should see the following, where the Response
body echoes the data structure that you created. Notice that in addition to the data fields that you created additional fields for id
and meta
data were added automatically. This is expected. The ID
value is unique to the database, and provides a way to reference the FHIR resource directly.
Finally, if you perform a GET
call on the URL /fhir/Patient
and execute you will see the following:
Notice that the returned bundle
now contains two data objects - the sample patient created with the help of the AidBox example FHIR calls listed on the right hand side of the screen as well as the basic patient resource that you created above. Using the "pretty" display of the response body you can drill down into the data and confirm the contents for yourself.


Records information on CrossFit exercise elements, both custom and official.
Finds a pre-defined exercise and creates it if it doesn’t exist.
# File app/models/exercise.rb, line 42 def self.find_or_new_by_attributes(user_id, a) # see if the category is already defined in the standard exercises a = a[1].except(:_destroy) a[:repetitions] = nil if a[:repetitions].blank? a[:weight] = nil if a[:weight].blank? a[:rounds] = nil if a[:rounds].blank? a[:distance] = nil if a[:distance].blank? a[:units] = nil if a[:units].blank? e = Exercise.select_official_exercises.where(:repetitions => a[:repetitions], :weight => a[:weight], :distance => a[:distance], :units => a[:units], :rounds => a[:rounds]) e = e.where(:exercise_category_id => a[:exercise_category_attributes][:category]).first # unless it is defined as official, check user exercises unless e e = User.find_by_id(user_id).exercises.where(:repetitions => a[:repetitions], :weight => a[:weight], :distance => a[:distance], :units => a[:units], :rounds => a[:rounds]) e = e.where(:exercise_category_id => a[:exercise_category_attributes][:category]).first end # no official or custom exercise found, make new unless e e = Exercise.new(a) e.exercise_category = ExerciseCategory.find_by_id(a[:exercise_category_attributes][:category]) e.save User.find_by_id(user_id).exercises << e end e end
Returns all of this user’s custom exercises.
# File app/models/exercise.rb, line 33 def self.select_custom_exercises(user_id) User.find_by_id(user_id).exercises end
—– CLASS METHODS —– Returns all “official” predefined exercises.
# File app/models/exercise.rb, line 28 def self.select_official_exercises Exercise.where(:user_id => 1) end
# File app/models/exercise.rb, line 37 def self.with_category(category_id) Exercise.where(:exercise_category_id => category_id) end
—– CUSTOM VALIDATION METHODS —– Validates that this model contains at least piece of useful information. One of: repetitions, weight, rounds, distance, or description.
# File app/models/exercise.rb, line 87 def at_least_one_metric unless self.repetitions || self.weight || self.rounds || self.distance || self.description self.errors[:base] << "A description must be entered if you don't fill in a metric" end end
—– INSTANCE METHODS —– find an existing exercise category or make a new one
# File app/models/exercise.rb, line 77 def exercise_category_attributes=(category) self.exercise_category = ExerciseCategory.find_by_id(category[:category]) unless self.exercise_category self.exercise_category = ExerciseCategory.find_or_initialize_by_category(category) end end
Validates that the correct units were supplied for fields that conditionally require it.
# File app/models/exercise.rb, line 94 def needs_units if (self.weight && (self.units).blank?) self.errors[:base] << 'Please specify the units for the exercise' elsif (self.distance && (self.units).blank?) self.errors[:base] << 'Please specify the units for the exercise' end end


made by Savkimov Aziz 👨💻
Testing is test your app for work without bags
To know that your code is working as planned, it needs to be tested in some kind.
After testing, your main goal is to write the minimal required code to make the tests pass. This coding style where you write tests before you write the actual implementation is a.k.a. TDD.
Example: you go to the personal account of the online store. You click "pay", and you are thrown to the main page, and even logged out.
Unit tests cover blocks of code to ensure they run without problems. A tested unit can be a function, a module, a class. Unit tests should be isolated and independent of each other. For a given input, unit test checks the result. It can help you make sure that individual parts of your applications work as expected by finding problems early and avoiding regressions.
Integration tests cover cross-module processes, where individual modules are combined and tested while working together. Thanks to them you can provide a way to ensure that your code works well as a whole.
The point of E2E tests is emulating an actual user within our running application. They will simulate behavior like scrolling, clicking, and typing and check if our application works well from the point of view of an actual user.
Jest is an open-source testing framework created by Facebook with a focus on simplicity. Jest makes it faster and easier to write JavaScript tests by having everything included out of the box and needing zero configuration. Jest also runs your tests in parallel, providing a smoother, faster test run.
 It requires some additional setup and configuration but gives you complete control of your testing framework in return.
Cypress is an all in one testing tool that is focused on making End-to-End testing easy and modern. Cypress is used to deal with complex UI’s running on modern Javascript stacks. By using their framework and assertion library, it becomes easy to validate states in the UI.
touch maths.js
touch maths.spec.js
function factorialize(num) {
if (num < 0) return -1;
else if (num == 0) return 1;
else {
return num * factorialize(num - 1);
}
}
module.exports = { factorialize }
const { factorialize } = require("./maths");
test("factorial of 3", () => {
expect(factorialize(3)).toBe(6);
});
test("factorial of 5", () => {
expect(factorialize(5)).toBe(120);
});
These matchers can also be negated using the not statement:
test("factorial of 3 is not 5", () => {
expect(factorialize(3)).not.toBe(5);
});
by Savkimov Aziz 👨💻


From @phoebeno
Hi Regine,
Here was my question to Don and his reply. I am happy to do as he says and look them up to fill in Description.
Truly, Phoebe
From: Donald R. Thornbury Sent: Friday, December 9, 2022 4:36 PM To: Phoebe E. Nobles Subject: RE: question about Alma item records
Hello Phoebe. Yes, it’s necessary to create Description. It’s what displays in Alma. The bulk import profile for items includes NO IT DOESN’T The import profile omits Description. Not my fault! Or maybe my fault for not checking everything. I’ll put in a GitHub ticket to fix it. I can’t fix it myself in production. All they had to do was copy EVERYTHING I did in sandbox. Anyway, blame-laying aside, yes. If it’s a small number of items, just look them up and use the Generate button to fill in Description from Enumeration A.
Don
From: Phoebe E. Nobles Sent: Friday, December 9, 2022 4:20 PM To: Donald R. Thornbury Cc: Lynn Durgin Subject: question about Alma item records
Hi Don,
Regine just helped us create a small batch of new item records for AC464, and I am noticing that the Box numbers of the existing boxes appear under both “Volume” and “Description” in Alma—but the new item records only have a box number listed under “Volume.” Do we need to make box numbers appear under the “Description” field? These are records that will not appear individually in the catalog, but exist because the boxes will be at ReCAP.
Thank you, Phoebe
cc @LynnDurgin Hi @phoebeno @doncat
thanks for confirming! I've updated the import profile to populate the description field with the same information that goes into Enum A. @doncat, my fault entirely--this is the aspace2alma items import profile that's in the Sandbox in draft, awaiting implementation in production.
For your reference, that ticket is here: https://github.com/PrincetonUniversityLibrary/alma-config/issues/340
mentioned
by None at 2022-12-09 22:04:53.subscribed
by None at 2022-12-09 22:04:53.mentioned
by Don Thornbury at 2022-12-09 22:07:56.subscribed
by Don Thornbury at 2022-12-09 22:07:56.mentioned
by None at 2022-12-09 22:07:56.subscribed
by None at 2022-12-09 22:07:56.mentioned
by None at 2022-12-09 22:07:56.subscribed
by None at 2022-12-09 22:07:56.labeled
by Eliot Jordan at 2022-12-09 22:30:14.assigned
by Eliot Jordan at 2022-12-09 22:30:15.Split into two PRs: https://github.com/pulibrary/figgy/pull/5585 https://github.com/pulibrary/figgy/pull/5586
head_ref_force_pushed
by Eliot Jordan at 2022-12-09 22:28:20.closed
by Eliot Jordan at 2022-12-09 22:44:53.head_ref_deleted
by Eliot Jordan at 2022-12-09 22:44:58.head_ref_force_pushed
by Eliot Jordan at 2022-12-09 22:42:53.head_ref_force_pushed
by Eliot Jordan at 2022-12-09 22:46:02.head_ref_force_pushed
by Eliot Jordan at 2022-12-09 22:43:39.ready_for_review
by Eliot Jordan at 2022-12-09 22:48:50.head_ref_force_pushed
by Eliot Jordan at 2022-12-09 23:02:26.labeled
by None at 2022-12-10 05:05:15.assigned
by Chuck McCallum at 2022-12-09 22:02:07.renamed
by Chuck McCallum at 2022-12-10 01:12:40.replaced by #706. closing.
closed
by Chuck McCallum at 2022-12-10 01:13:33.head_ref_deleted
by Chuck McCallum at 2022-12-10 01:13:40.referenced
by Jane Sandberg at 2022-12-09 22:35:16.merged
by Jane Sandberg at 2022-12-09 22:35:16.closed
by Jane Sandberg at 2022-12-09 22:35:16.head_ref_deleted
by Jane Sandberg at 2022-12-09 22:35:17.


Implements classes and methods for large scale SNP enrichment analysis (e.g. SNPs associated with genes expression in a GWAS signal).
| Version: | 1.7.0 |
| Depends: | R (≥ 3.0.0), methods |
| Imports: | parallel, snpStats, grid, ggplot2, grDevices, graphics, stats, utils |
| Published: | 2015-10-01 |
| Author: | Mickael Canouil [aut, cre], Loic Yengo [ctb] |
| Maintainer: | Mickael Canouil <mickael.canouil at cnrs.fr> |
| BugReports: | https://github.com/mcanouil/snpEnrichment/issues |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| URL: | https://github.com/mcanouil/snpEnrichment |
| NeedsCompilation: | no |
| Materials: | ChangeLog |
| CRAN checks: | snpEnrichment results |
| Reference manual: | snpEnrichment.pdf |
| Package source: | snpEnrichment_1.7.0.tar.gz |
| Windows binaries: | r-devel: snpEnrichment_1.7.0.zip, r-release: snpEnrichment_1.7.0.zip, r-oldrel: snpEnrichment_1.7.0.zip |
| OS X binaries: | r-release: snpEnrichment_1.7.0.tgz, r-oldrel: snpEnrichment_1.7.0.tgz |
| Old sources: | snpEnrichment archive |
Please use the canonical form https://CRAN.R-project.org/package=snpEnrichment to link to this page.


The Salmon Cookies
Home
Sales
Our Products
Contact us
Add a new location
Location
Min
Max
Avg
submit


Asciidoctor reveal.js is a converter for Asciidoctor and Asciidoctor.js that transforms an AsciiDoc document into an HTML5 presentation designed to be executed by the reveal.js presentation framework.
There are two main technology stacks that can transform AsciiDoc into HTML5 / reveal.js:
-
Asciidoctor / Ruby / Bundler (See Ruby Setup)
-
Asciidoctor.js / JavaScript (Node.js) / NPM (See Node / JavaScript Setup)
Right now the Asciidoctor / Ruby stack is the better tested one but with the changes in v1.1.0 they have feature parity.
Ruby Setup
|
Note
|
asciidoctor-reveal.js is now a Ruby Gem. To ensure repeatability, we recommend that you manage your presentation projects using bundler. |
For a quick start clone our starter repository and follow instructions there.
For more complete instructions, read on.
Prerequisites
-
Install bundler (if not already installed) using your system’s package manager or with:
$ gem install bundler
-
If you’re using RVM, make sure you switch away from any gemset:
$ rvm use default
or
$ rvm use system
Install
|
Note
|
These instructions should be repeated for every presentation project. |
-
Create project directory
$ mkdir my-awesome-presentation $ cd my-awesome-presentation
-
Create a file named
Gemfile
with the following content:source 'https://rubygems.org' gem 'asciidoctor-revealjs' # latest released version
NoteFor some reason, when you use the system Ruby on Fedora, you also have to add the json gem to the Gemfile. -
Install the gems into the project
$ bundle config --local github.https true $ bundle --path=.bundle/gems --binstubs=.bundle/.bin
-
Optional: Copy or clone reveal.js presentation framework. Allows you to modify themes or view slides offline.
$ git clone -b 3.6.0 --depth 1 https://github.com/hakimel/reveal.js.git
Rendering the AsciiDoc into slides
-
Create content in a file (*.adoc, *.ad, etc.). See examples in Syntax Examples section to get started.
-
Generate HTML presentation from the AsciiDoc source
$ bundle exec asciidoctor-revealjs CONTENT_FILE.adoc
|
Tip
|
If you are using GitHub Pages, plan ahead by keeping your source files on master branch and all output files on the gh-pages branch.
|
Node / JavaScript Setup
Prerequisites
First you must install and configure Node.js on your machine.
Install
Using npm:
$ npm i --save asciidoctor-reveal.js
Rendering the AsciiDoc into slides
Once the package is installed, you can convert AsciiDoc files using reveal.js converter.
Here we are converting a file named presentation.adoc
into a reveal.js presentation using Node.js:
// Load asciidoctor.js and asciidoctor-reveal.js
var asciidoctor = require('asciidoctor.js')();
require('asciidoctor-reveal.js');
// Convert the document 'presentation.adoc' using the reveal.js converter
var attributes = {'revealjsdir': 'node_modules/reveal.js@'};
var options = {safe: 'safe', backend: 'revealjs', attributes: attributes};
asciidoctor.convertFile('presentation.adoc', options); (1)
-
Creates a file named
presentation.html
(in the directory where command is run)
= Title Slide
// depending on your npm version, you might need to override the default
// 'revealjsdir' value by removing the comments from the line below:
//:revealjsdir: node_modules/asciidoctor-reveal.js/node_modules/reveal.js
== Slide One
* Foo
* Bar
* World
To render the slides, run:
node asciidoctor-revealjs.js
You can open the presentation.html
file in your browser and enjoy!
Syntax Examples
Let’s see some examples of revealjs
backend features.
Additional examples can be found in the AsciiDoc files (.adoc) in examples/
.
Basic presentation with speaker notes
= Title Slide
== Slide One
* Foo
* Bar
* World
== Slide Two
Hello World - Good Bye Cruel World
[NOTE.speaker]
--
Actually things aren't that bad
--
In previous snippet we are creating a slide titled Slide One with bullets and another one titled Slide Two with centered text (reveal.js’ default behavior) with speaker notes.
Starting with Reveal.js 3.5 speaker notes supports configurable layouts:
Speaker notes are opened by pressing s
.
With Reveal.js 3.5 they require a webserver to work.
This limitation is not present in 3.6.
You can get a Web server running quickly with:
ruby -run -e httpd . -p 5000 -b <IP_ADDRESS>
Then open your browser at: http://localhost:5000/
Slides without titles
There are a few ways to have no titles on slides.
-
Setting your title to
!
-
Adding the
notitle
option to your slide -
Adding the
conceal
option to your slide
Here is an example of the three techniques in action:
= Concealed Slide Titles
:backend: revealjs
== !
This
[%notitle]
== Presentation
presentation's titles
[%conceal]
== Concealed
should be concealed
|
Note
|
conceal and notitle have the advantage that the slide still has an id so it can be linked to.
|
Background colors
[background-color="yellow"]
== Slide Three
Is very yellow
Slide Three applies the attribute data-background-color to the reveal.js
<section> tag.
Anything accepted by CSS color formats works.
Background images
[%notitle]
== Grand Announcement
image::cover.jpg[background, size=cover]
This will put cover.jpg
as the slide’s background image.
It sets reveal.js’ data-background-image
attribute.
The size
attribute is also supported.
See the relevant reveal.js documentation for details.
|
Note
|
Background images file names are now relative to the :imagedir: attribute if set.
|
|
Note
|
The canvas keyword can be used instead of background for the same effect.
|
[%notitle]
== The Great Goat
image::https://upload.wikimedia.org/wikipedia/commons/b/b2/Hausziege_04.jpg[canvas,size=contain]
As you can see, you can use a URL to specify your image resource too.
Background videos
A background video for a slide can be specified using the background-video
element attribute.
[background-video="https://my.video/file.mp4",background-video-loop=true,background-video-muted=true]
== Nice background!
For convenience background-video-loop
and background-video-muted
attributes are mapped to loop
and muted
options which can be specified with options="loop,muted"
.
For example:
[background-video="https://my.video/file.mp4",options="loop,muted"]
== Nice background!
See the relevant reveal.js documentation for details.
Note that the data-
prefix is not required in asciidoc files.
Background iframes
The background can be replaced with anything a browser can render in an iframe using the background-iframe
reveal.js feature.
[%notitle,background-iframe="https://www.youtube.com/embed/LaApqL4QjH8?rel=0&start=3&enablejsapi=1&autoplay=1&loop=1&controls=0&modestbranding=1"]
== a youtube video
See the relevant reveal.js documentation for details.
Slide Transitions
[transition=zoom, %notitle]
== Zoom zoom
This slide will override the presentation transition and zoom!
[transition-speed=fast, %notitle]
== Speed
Choose from three transition speeds: default, fast or slow!
See the relevant reveal.js documentation for details.
Fragments
== Slide Four
[%step]
* this
* is
* revealed
* gradually
Slide Four has bullets that are revealed one after the other.
This is what reveal.js
calls fragments.
Applying the step option or role on a list ([%step]
or [.step]
) will do the trick.
Here is the relevant reveal.js
documentation on the topic.
Note that only fade-in
is supported for lists at the moment.
Stretch class attribute
Reveal.js supports a special class that will give all available screen space to an HTML node.
This class element is named stretch
.
Sometimes it’s desirable to have an element, like an image or video, stretch to consume as much space as possible within a given slide.
To apply that class to block simply use asciidoctor’s class assignment:
[.stretch]
Videos
In addition to background videos, videos can be inserted directly into slides. The syntax is the standard asciidoc video block macro syntax.
== Trains, we love trains!
video::kZH9JtPBq7k[youtube, start=34, options=autoplay]
By default videos are given as much space as possible.
To override that behavior use the width
and height
named attributes.
Syntax highlighting
To enable highlight.js for syntax highlighting (which is the revealjs
default):
= Title slide
:source-highlighter: highlightjs
With enabled source-highlighter you can write code blocks as usual:
== Slide Five
Uses highlighted code
[source, python]
----
print "Hello World"
----
By default [source]
blocks and blocks delimited by ----
will be highlighted.
An explicit [listing]
block will not be highlighted.
highlight.js
does language auto-detection but using the language="…"
attribute will hint the highlighter.
For example this will highlight this source code as Perl:
== Slide Five
[source,perl]
----
print "$0: hello world\n"
----
|
Note
|
Currently revealjs uses a rather old version of highlight.js that does not handle callouts correctly.
To fix this download a current version of highlight.js and copy it to reveal.js/plugin/highlight/highlight.js .
|
To use Coderay:
= Title slide
:source-highlighter: coderay
To use Pygments:
= Title slide
:source-highlighter: pygments
Vertical slides
== Slide Six
Top slide
=== Slide Six.One
This is a vertical subslide
Slide Six uses the vertical slide feature of reveal.js
.
Slide Six.One will be rendered vertically below Slide Six.
Here is the relevant reveal.js
documentation on that topic.
Title slide customization
The title slide is customized via Asciidoc attributes.
These are the global variable assigned at the top of a document under the lead
title that look like this: :name: value
.
This converter supports changing the color, image, video, iframe and transitions of the title slide.
Read the relevant reveal.js documentation to understand what attributes need to be set.
Keep in mind that for title slides you must replace data-
with title-slide-
.
Here is an example:
= EPIC TITLE
:imagesdir: images
:title-slide-background-image: 70s.jpg
:title-slide-transition: zoom
:title-slide-transition-speed: fast
== Next slide
Content
The title slide is also added a title
CSS class to help with template customization.
Content meant for multiple converters
Some content can be created with both slides and book in mind.
To mark slides split points you can use preprocessor conditionals combined
with a backend declaration.
Breaking points are set using slides with no title === !
wrapped in a
conditional: ifdef::backend-revealjs[=== !]
.
In the end, the whole document has to be compiled with the backend option:
-b revealjs
For example:
== Main section
=== Sub Section
Small +
Multiline +
intro
. very
. long
. list
. of
. items
ifdef::backend-revealjs[=== !]
Some overview diagram
ifdef::backend-revealjs[=== !]
Detailed view diagram
CSS override
If you use the :customcss:
document attribute, a CSS file of the name given in the attribute is added to the list of CSS resources loaded by the rendered HTML.
Doing so, you can then easily override specific elements of your theme per presentation.
For example, to do proper position-independent text placement of a title slide with a specific background you can use:
.reveal section.title h1 {
margin-top: 2.3em;
}
.reveal section.title small {
margin-top: 15.3em;
font-weight: bold;
color: white;
}
If the :customcss:
attribute value is empty then asciidoctor-revealjs.css
is the CSS resource that the presentation is linked to.
Slide state
Reveal.js supports a data-state tag that can be added on slides which gets rendered into <section>
tags.
In AsciiDoc the data-state
can be applied to a slide by adding a state attribute to a section like this:
[state=topic]
== Epic Topic
That state can be queried from Javascript or used in CSS to apply further customization to your slide deck. For example, by combining this feature with the CSS override one, you can alter fonts for specific pages with this CSS:
@import 'https://fonts.googleapis.com/css?family=Baloo+Bhai';
section[data-state="topic"] h2 {
font-family: 'Baloo Bhai', cursive;
font-size: 4em;
}
Admonitions
Asciidoctor font-based admonitions are supported. Make sure to add the following attribute to your document:
:icons: font
Here is an example slide:
== But first
WARNING: This presentation is dangerous!
Here are details about Asciidoctor’s Admonition icons support.
Reveal.js Options
There are some attributes that can be set at the top of the document which they are specific of revealjs
converter.
|
Note
|
Default settings are based on reveal.js default settings.
|
| Attribute | Value(s) | Description |
|---|---|---|
|
beige, black, league, night, serif, simple, sky, solarized, white |
Chooses one of reveal.js’ built-in themes. |
|
<file|URL> |
Overrides CSS with given file or URL. Default is disabled. |
|
<file|URL> |
Overrides highlight.js CSS style with given file or URL. Default is built-in lib/css/zenburn.css. |
|
<file|URL> |
Overrides reveal.js directory. Example: ../reveal.js or https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0 |
|
true, false |
Display controls in the bottom right corner. |
|
true, false |
Display a presentation progress bar. |
|
true, false |
Display the page number of the current slide. |
|
true, false |
Push each slide change to the browser history. |
|
true, false |
Enable keyboard shortcuts for navigation. |
|
true, false |
Enable the slide overview mode. |
|
true, false |
Enables touch navigation on devices with touch input. |
|
true, false |
Vertical centering of slides. |
|
true, false |
Loop the presentation. |
|
true, false |
Change the presentation direction to be RTL. |
|
true, false |
Turns fragments on and off globally. |
|
true, false |
Flags if the presentation is running in an embedded mode (i.e., contained within a limited portion of the screen). |
|
<integer> |
Delay in milliseconds between automatically proceeding to the next slide.
Disabled when set to 0 (the default).
This value can be overwritten by using a |
|
true, false |
Stop auto-sliding after user input. |
|
true, false |
Enable slide navigation via mouse wheel. |
|
true, false |
Hides the address bar on mobile devices. |
|
true, false |
Opens links in an iframe preview overlay. |
|
none, fade, slide, convex, concave, zoom |
Transition style. |
|
default, fast, slow |
Transition speed. |
|
none, fade, slide, convex, concave, zoom |
Transition style for full page slide backgrounds. |
|
<integer> |
Number of slides away from the current that are visible. Default: 3 |
|
<file|URL> |
Parallax background image. Defaults to none |
|
<CSS size syntax> |
Parallax background size (accepts any CSS syntax). Defaults to none |
If you want to build a custom theme or customize an existing one you should
look at the
reveal.js
theme documentation and use the revealjs_customtheme
AsciiDoc attribute to
activate it.
Minimum Requirements
-
asciidoctor 1.5.6
Copyright and Licensing
Copyright © 2012-2017 Olivier Bilodeau, Guillaume Grossetie, Dan Allen, Rahman Usta, Charles Moulliard and the Asciidoctor Project. Free use of this software is granted under the terms of the MIT License.


Access denied to domain {{ domain_name }} for current user account.
Please click here to login.
Logout from current account.


Zero Clipboard Test
Text:
Copy me!
Copy To Clipboard...
Debug Console:
You can paste text here if you want, to make sure it worked:


Feauture
Details
Release Date
Announced 2019, November
Display
6.59 inches, 106.6 cm2 (~84.7% screen-to-body ratio) 1080 x 2340 pixels, 19.5:9 ratio (~391 ppi density)
Dimension
163.1 x 77.2 x 8.8 mm (6.42 x 3.04 x 0.35 in)
Weight
206 g (7.27 oz)
OS
Android 9.0 (Pie); EMUI 9.1
Chipset
Hisilicon Kirin 710F (12 nm)
CPU
Octa-core (4x2.2 GHz Cortex-A73 & 4x1.7 GHz Cortex-A53)
GPU
Mali-G51 MP4
Memory
128GB 6GB RAM
Cameras
Triple 48MP + 8MP + 2MP (Main) | 16MP (Selfie)
Sensors
Fingerprint (side-mounted), accelerometer, gyro, proximity, compass
Battery
Non-removable Li-Po 4000 mAh battery
Colors
Midnight Black, Breathing Crystal
Versions


What is TechLink?
We are passionate about building an Information Science and Technology community that is there to foster and create connections; through field research and interfacing with technology leaders, providing its members with industry trends/data.
The society will act as a data center using research conducted through it to empower its members with information to build better start-Up companies that sync with the industries and consumers they target.
What is our mission?
To develop a community of think tanks, technocrats that are connected in such a way that ignites a virtual silicon valley of brilliant minds, stimulating an environment of a start-up culture among university students in our locality.
What are our main objectives?
- To build a community of interconnected undergrads, alumni students, industry expects for ease of access to information on industry trends, to better equip, inspire and improve the learning experience for all members.
- To provide interactions between senior and junior students at the institute.
- To maintain a link between HIT students who graduate and those that stay, within the field of IST.
- To support development young local natives with respect to technology, through outreach programs and events, workshops that energize pre-tertiary students to join the technology industry.
- To promote continuous growth of knowledge within the field of IST by conducting relevant research.
- To promote the values of working in teams and have repositories of previously explored technology, industrial projects, making incremental innovation possible.
- To promote innovation and identify problems through providing information in the IST field on a local scale before an international scale can be undertaken.
Vision
- Contribute to the technological revolution in our community.
- Build a community of passion, goal and merit oriented people who are willing to work together to change their communities through profitable ideas implemented with technology.
- Build more and varied opportunities for HIT alumni, current student and the industry to connect with each other.
Here are our core values:
- Community
- Creativity and Innovation
- Empowerment
- Intellect and Ideas
- Leadership and Inspiration
- Public service and making a difference
What our operations focus on:
- Facilitate and create opportunities for the exchange of ideas, the appreciation of technology, professional networking and development, and lifelong learning in the various fields of IST.
- Support and develop opportunities for our membership to serve our community with problem solving that are technologically based.
- Foster the growth of start-ups and research that promotes incremental innovation in the local industry and previously explored ideas.
- To maintain a center of information such as: industry standards and expectations, trends, scope of industry in specific fields that are related to IST.
What is the job of the founding committee?
The job of the people above is to oversee the key recruitment and filling of positions. The first action will be to set up a board of directors based on merit, commitment and shared vision from the initial members. The positions and structure of the society with be the first objective of the board of directors when they will be met however the first positions of President and two VPs will only be appointed by the Founding committee.
Committee Members:
Tatenda Kwaramba
A Computer Science student at Harare Institute of Technology who is passionate about working with his fellow technocrats to come up with brilliant projects that with fulfill the Society’s mission and see its vision come true. Tatenda is critical thinker who will take this organization through its early critical building stage to its full functionality and ensure the right people based on merit are recruited.
Tinashe Munyanyiwa
A Computer Science Student at HIT, who believes that the tech revolution will only grow exponentially if there is a start-up culture and believes a society will create a perfect environment to stimulate productive interactions between the technocratic members.
Developer
An Information Technology Student at HIT who is passionate about technology.


Traditions and Hearthside Stories of West Cornwall, Vol. 2, by William Bottrell, [1873], at sacred-texts.com
In St. Levan Churchyard is a cloven rock called St. Levan's stone. For some reason, now unknown, this must have been a venerated object when the church was built, or it would have been used in the building. The common notion, however, is that long before St. Levan's time this rock was regarded as sacred, because Merlin prophecied—
It is stated that Merlin came here with King Arthur, when he slaughtered the Danes at the battle of Velan-drùchar. The separation of this prophetic stone is so slow that there appears to be no danger of the world's ending just yet.


YELLOW
STONE
APPARL
ACCESSORIES
JOURNAL
ABOUT US
LOGIN
CART
APPAREL
ACCESSORIES
JOURNAL
ABOUT US
LOGIN
Wear What Matters
SHOP NOW
Shop Products
SHOP NOW
What Are You Looking For?
SHOP NOW
Find Your Patch.
Press It On.
Change It Up.
Repeat.
Removable Embroidered Patches
All of our embroidered patches are easily interchangeable.
SHOP ALL PATCHES
Wear What Matters
Patches
A campus Apparel Company
Campus Life