My first experience with Salvia divinorum was, for me, a rather shocking introduction to the world of the truly mind-altering psychedelic drugs.
At the time of the experience (and at the time of this writing) I'm a twenty-year-old college student. I've been smoking marijuana pretty consistently for about a year, and quite heavily since this past 4/20 (that was a crazy day). But (besides alcohol) that was about it. No caffeine, no cigarettes... I'm pretty health-conscious.
One day a few weeks ago, a couple of my friends (A and B) decided that we should try acid (we'd never done that before), and they bought six blotters (two for each of us). They dosed at about 10pm, but I realized at that point that I had to be in top form to swim for a Lifeguard Certification exam the next day, so I, unfortunately, had to abstain.
When they started tripping about an hour later and I was still 'just stoned,' I started to feel a bit left out of 'the circle,' so I suggested that we move along and smoke another bowl with some other friends of ours (I'll refer to them as R and L). We went down the hall to R&L's room, and L was packing a giant bong bowl with some weird looking leaves.
'What kind of weed is that?' I asked. It was dark and I couldn't see the leaves properly.
'This is no weed,' L said with a grin, 'this is Salvia.'
'Huh?'
'It's called Salvia. It's actually legal, you can buy it on the internet.'
'Um... OK...'
'It's not really like weed. Here, try some.'
At this point R stands up from his stupor. 'This is all wrong. This is wrong.' he says. He seems disoriented 'There are far too many people in this room.'  R sits back down and looks like he's trying to comprehend what he had just been experiencing. Now I'm a little concerned.
'Um... did you not enjoy that?' I ask with a furrowed brow. R seems dazed and confused and doesn't answer. I turn to L. 'Have you tried that saliva stuff?'
'Salvia.' he says with a laugh.
'Yeah, whatever, have you tried it?'
'Yeah, I just did it a few times.'
'Did you like it?'
'Um... (pause) just try it.' He passes me the bong. 'I sprinkled some 5x extract on there to make it stronger. You need to burn up all the leaves and take it all as one giant hit, and then hold it in as long as you can, like thirty seconds.'
'Okaaay...' it's a very large volume of leaves, but I'm up for a challenge.
I pick up the bong. Suddenly, another friend of ours (D) gets up and walks out of the room without a word. I hadn't even noticed him sitting there the entire time I was in the room. L looks up as D leaves, and then he looks back to the task at hand. My sense of foreboding increases a bit, but I can't imagine why people are reacting so strongly to this herb. It's legal, after all... how strong could it possibly be? I shrug my shoulders and torch the herb.
It burns fast. The bong fills up with smoke quickly. L kneels on the floor to make sure I'm doing it right. 'Gooood. Very good. Keep going 'till it's all gone. Awesome. Now just hold it in.' I know, man, you told me before. I'm holding it. 'Now pass me the bong.'
T+5 seconds. I'm passing the bong. My body feels very weird and I'm surprised it's working so fast. L takes the bong and I'm extremely relieved, because I thought I was going to drop it. Now everyone is watching me. I sit back down.
T+10 seconds. I've just sat down. I'm really glad I did because I feel like I have no idea how to stand and I don't really want to think about it.
T+15 through T+20 seconds (span of five seconds or so). Is this what Salvia does? It's so weird, it just makes my body feel completely retarded, tingly, uncomfortable and... WAIT, no... no, now the world is closing in around me. Oooooh crap, this is waaaay more than I was expecting. This is NOTHING like marijuana. At all. I'm going to start exhaling the smoke now. I feel it begin to pour through my nostrils. It feels good. Everyone is still watching me, but I'm starting to forget that they even exist. I need to tell them RIGHT NOW that I'm going under, because I know I won't be able to communicate in about a second and a half.
I hear a small grunt come out of my own throat, though it seems oddly detached. My peripheral vision has been closing in (tunnel vision) from about T+17 to T+20. I notice that my SIGHT is not the only thing narrowing to one focus, so is my CONSCIOUSNESS. All peripheral thoughts are being stripped away. All I have left in my mind is 'please remain seated with your hands and arms inside the craft at all times.' I put my hands on my knees as my sight and consciousness close in around me and narrow to a point directly in front of me, and then cease altogether.
Looking back, I don't know how long I blacked out for, but I can't imagine it being more than a few seconds. The next thing I experienced is impossible to describe, but it is certainly in the realm of what people describe as 'ego death.' There was no concept of 'I' at all, or space or time for that matter.
First, there was oblivion. That was the blackout. Then, there was oblivion with consciousness (very hard to describe). I actually EXPERIENCED oblivion for some unknown amount of time. It was as if there was no sensory input to my brain AT ALL, external OR INTERNAL. So no sight, no sound, no thought, no memory, no touch or smell or taste. No nothing, just consciousness.
When I say that there was no memory, it's not an 'amnesia' kind of thing. An amnesiac knows how to take a breath, knows how to speak, knows that he's alive. My consciousness knew none of this.
Anyway, somehow in the midst of this nothingness I feel like I'm being suffocated. I suddenly see a blanket covering me, my entire consciousness. The blanket is heavy and 'feels' rubbery, and it's entirely composed of yellow school busses. Yeah. Not only do I not find this ODD, I have no concept of what odd is. This school bus blanket is my ENTIRE existence, I have no reference point other than this. I don't like being suffocated, and I climb frantically to get air by climbing over the blanket.(Several minutes have passed... I really don't know how long, but it was probably under five minutes).
I am making no progress with the blanket, this thing has no top or bottom, but I continue to climb anyway. Suddenly, I look PAST the blanket and see the room that I'm tripping in. I'm confused because I somehow realize that this room has been here all along, and I've been SEEING it all along, I'd just never noticed it before. Here's the best analogy I can think of for this: imagine staring at your reflection in a window, and completely forgetting that it's transparent (you're using it as a mirror), then when you focus on something past the window, your reflection kinda disappears and you realize that there's something right in front of your face that you were staring straight at and did not notice.
Anyway I look up at all the people around the room. They're sitting on chairs (I'm on the floor) so I'm looking up at them like gods or kings or some kind of powerful beings. The room is spinning sideways (it does this sometimes when I'm really drunk, too). I'm really confused and I don't recognize anyone, but I feel somehow that these people are friendly, and know how to help me out of my confusion.
I grab onto my friend A's knees for support as she's sitting in a chair. I'm repeating (yelling?) something in a language I don't understand and I'm barely conscious of the fact that I'm saying anything at all. My friend B is (of course) taking a video of me on his cell phone, but I don't notice at all. When I watched the video afterward, I was able to make out the words 'You don't know what this is like,' repeated over and over.
My friend A, of course, says 'I wanna try a hit of that stuff!' I beg her incoherently not to do it. I need her to be in control until I can properly understand what just happened to me. L tells me 'Don't worry. You're on a drug. You'll be back to normal in about two minutes.'
I'm on a drug? What? How did I get on a drug? Did I take something? Is this what the rest of my life is going to be like? Did someone trick me into doing this? I definitely didn't do this voluntarily. Did I? What did I do?   Forever.
'You'll be back to normal in a couple of minutes.'
'Are you sure?'
'Yeah.'
'Do people actually do this?' I sit back down on the makeshift couch I'd been sitting on. I'm getting a little more lucid. Yes, I smoked some weird 'saliva' leaves, I remember now. This must be what it does.
'Huh? Uh... Yeah.'
'On purpose?' I'm coming back to reality nearly as fast as I left it.
(laughing) 'Yeah.' L tries to pass the repacked bong to A. A shies away from it.
'Actually, I'm kinda scared to do it now.'
I nod at her with a look like, 'That is a very wise choice.' I'm thinking at this point: 'I NEVER want to experience that ever again for the rest of my life. That was the most terrified I've ever been.' Now that I think about it, the closest analogue I can come up with is how a baby feels when it leaves the womb (oblivion=womb, first subsequent experience=life). It has no idea what to expect, all it knows is that it is completely helpless, with no understanding of its surroundings, and that it must trust others to help it.
Anyway... A and B pull me back out of the room, they want to go smoke their cigarettes outside.
'Dude,' I say, 'That was inSANE.' I'm completely aware of my surroundings again, but everything still seems a little surreal and trippy.
'Yeah,' says A, 'you were freaking out.' She laughs. 'You BEGGED me not to do it, remember?'
B looks superior. 'We're the ones on acid and YOU were the one bugging out.' I stop walking. B and A stop too. I address B directly.
'OK then, you try it.'
B laughs. 'OK, I will.' A laughs.
B takes a big hit. He sits there for about five minutes in silence with a blank look on his face, staring into space while I recount my experience to the semi-sober people in the room (those only on cannabis and acid). Suddenly, B gets up and walks out of the room (A and I have been standing by the door, so we leave with him). He keeps walking without saying a word. We're outside now, and he's still walking.
'So?' I ask him. 'Stronger than you expected, right?'
'Hmmm.' He looks confused.
'What?'
'Well...' he answers reluctantly, almost shyly 'I'm pretty sure you two are real.'
'Huh?' I'm trying to figure out how that answers my question.
'I'm pretty sure you're real 'cuz I keep taking you with me when I switch realities.'
'Oh, WOW...' I hadn't realized he was still tripping. A laughs nervously.
We're walking past my car now, and I decide to drive back to my quad to get some sleep. I tell A to take care of B, and I tell B 'Don't worry, you'll be back to normal in a couple of minutes.' He seems extremely relieved to hear this. I, however, am just trying to make him feel better, because my trip was over in about five minutes, while he's still tripping balls nearly ten minutes after dosing... I don't know why he's taking so long to come back to reality.
[I found out later that B did not come back to reality for the duration of his acid trip... another 8 hours. Before taking the Salvia he hadn't gotten any visuals and claimed that he wasn't tripping very hard. A's acid trip was pretty lame for the entire night. Apparently the blotters weren't very potent... but the combination of the acid and the Salvia sure did the trick for B.]
[Erowid Note: Driving while intoxicated or tripping is dangerous and irresponsible because it endangers other people. Don't do it!] As I drove back to my dorm I noticed that everything looked surreal. I regretted driving at that point because I was worried that I was still tripping a little bit and that it could be dangerous. I was glad that there were no other cars driving on the campus roads that late at night. I made it back without incident and went to sleep.
I woke up the next day, and I wasn't as worried about my lifeguard exam as I'd expected to be. I was far more relaxed during the exam than I usually am even when swimming for leisure. I felt completely sober... just RELAXED.
This relaxed feeling continued throughout the day. I met up with A and B during the day, and I mentioned this to them. It was a beautiful day and I smoked a bowl of cannabis outdoors, about twenty feet away from a couple of campus police officers, and I didn't even care at all. I felt like the cannabis was actually a waste, because I already felt like I was 'high.'
This 'afterglow' continued for THREE STRAIGHT DAYS, Friday, Saturday, and Sunday. I was VERY glad that it was the weekend. During this time, I didn't care about any of the problems I'd normally care about (schoolwork, etc). Life was just beautiful. I would just sit on the couch and enjoy BREATHING for a few hours, talk to myself outloud, play video games with my friends for an entire day, lay in the grass and just enjoy the fresh air and the tickle of the grass on the back of my neck... stuff I'd normally do while stoned. I didn't smoke any cannabis for the rest of the three days. I had no need for it.
I raved to my friends about this newfound peace of mind during the second and third days... I didn't know whether it was psychological or physiological but I could only attribute it to the Salvia (my friends were skeptical of this possibility, the drug is only supposed to last for a few minutes).
Either way, I thought that I would be in that state for the rest of my life, and I was happy beyond words. It faded after the third day though. Oh well.
After it faded, my friend from Chicago (I'm from New York) who knew nothing of my afterglow sent me a link to a website, where I found mention of reports of a persisting afterglow effect. So I wasn't crazy after all.
Anyway, I've smoked the leaves without the extract a few times since then and haven't gotten anywhere near that effect. I always get weird, uncomfortable, tingly body feelings at low doses, and slight detachment from reality at higher doses (bigger leaf-hits). Two other friends of mine got mild open-eye visuals with moderately small doses (large leaf-hits), but it's always an uncomfortable feeling.
Another friend of mine (an experienced acid tripper) belittles Salvia (calling it 'weak') because he doesn't understand what a real trip on it can be like. He considers it a weak psychedelic because all he's gotten from it are the above-described mild effects. He urged me to try other psychedelics for comparison.
I took 40mg of 2C-I a few days later (that was a BEAUTIFUL trip). While it was definitely more enjoyable than the Salvia trip -- and obviously much longer lasting -- I can honestly say that even at that high dose, it wasn't nearly as intense as the Salvia.
Overall, I'd say that I'd definitely do Salvia again. My trip was terrifying, but the three days of bliss afterward were totally worth it. I don't yet know if the afterglow is just a first-time thing or if I can get that with every major trip (like restarting a computer). I've ordered 1g of 20x extract online (it was only $10US) to test this out.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


User's Guide
Namespace
Most of the components provided by Pistache
live in the Net
namespace. It is thus
recommended to directly import this namespace with a using-declaration
:
Http Handler
Requests that are received by Pistache
are handled by a special class called Http::Handler
.
This class declares a bunch of virtual methods that can be overriden to handle special events
that occur on the socket and/or connection.
The onRequest()
function must be overriden. This function is called whenever Pistache
received data and correctly parsed it as an http request.
The first argument is an object of type Http::Request
representing the request itself.
It contains a bunch of informations including:
- The resource associated to the request
- The query parameters
- The headers
- The body of the request
The Request
object gives a read-only
access to these informations. You can access them
through a couple of getters but can not modify them. An http request is immutable.
Sending a response
ResponseWriter
is an object from which the final http response is sent to the client.
The onRequest()
function does not return anything (void
). Instead, the response is
sent through the ResponseWriter
class. This class provides a bunch of send()
function
overloads to send the response:
You can use this overload to send a response with an empty body and a given
HTTP Code (e.g Http::Code::Ok
)
This overload can be used to send a response with static, fixed-size content (body).
A MIME type can also be specified, which will be sent through the Content-Type
header.
This version can also be used to send a fixed-size response with a body except that it does not need to construct a string (no memory is allocated). The size of the content is directly deduced by the compiler. This version only works with raw string literals.
These functions are asynchronous
, meaning that they do not return a plain old ssize_t
value indicating the number of bytes being sent, but instead a Promise
that will be
fulfilled later on. See the next section for more details on asynchronous programming with
Pistache.
Response streaming
Sometimes, content that is to be sent back to the user can not be known in advance, thus the length
can not be determined in advance.
For that matter, the HTTP specification defines a special data-transfer mechanism called
chunked encoding where data is sent in a series
of chunks. This mechanism uses the Transfer-Encoding
HTTP header in place of the Content-Length
one.
To stream content, Pistache provides a special ResponseStream
class. To get a ResponseStream from
a ResponseWriter, call the stream()
member function:
To initate a stream, you have to pass the HTTP status code to the stream function (here Http::Code::Ok
or HTTP 200
).
The ResponseStream class provides an iostream
like interface that overloads the <<
operator.
The first line will write a chunk of size 2 with the content PO to the stream’s buffer. The second line will write a second
chunk of size 2 with the content “NG”. To end the stream and flush the content, use the special ends
marker:
The ends
marker will write the last chunk of size 0 and send the final data over the network. To simply flush the stream’s buffer
without ending the stream, you can use the flush
marker:
Headers writing
After starting a stream, headers become immutable. They must be written to the response before creating a ResponseStream:
Static file serving
In addition to text content serving, Pistache provides a way to serve static files through the Http::serveFile
function:
Return value
serveFile also returns a Promise representing the total number of bytes being sent to the wire
Controlling timeout
Sometimes, you might require to timeout after a certain amount of time. For example, if you are designing an HTTP API
with soft real-time constraints, you will have a time constraint to send a response back to the client.
That is why Pistache provides the ability to control the timeout on a per-request basis. To arm a timeout on a response,
you can use the timeoufterAfter()
member function directly on the ResponseWriter
object:
This will trigger a timeout if a response has not been sent within 500 milliseconds. timeoutAfter
accepts any kind
of duration.
When a timeout triggers, the onTimeout()
function from your handler will be called. By default, this method does nothing. If you
want to handle your timeout properly, you should then override this function inside your own handler:
The Request
object that is passed to the onTimeout is the exact same request that triggered the timeout. The ResponseWriter
is a
complete new writer object.
ResponseWriter state
Since the ResponseWriter object is a complete new object, state is not preserved with the ResponseWriter from the onRequest() callback, which means that you will have to write the complete response again, including headers and cookies.
Asynchronous HTTP programming
Interfaces provided by Pistaches
are asynchronous
and non-blocking
. Asynchronous programming allows for code
to continue executing even if the result of a given call is not available yet. Calls that provide an asynchronous
interface are referred to asynchronous calls
.
An example of such a call is the send()
function provided by the ResponseWriter
interface.
This function returns the number of bytes written to the socket file descriptor associated to the connection.
However, instead of returning directly the value to the caller and thus blocking the caller, it wraps
the value into a component called a Promise
.
A Promise
is the Pistache’s implementation of the
Promises/A+ standard available in many Javascript implementations. Simply put, during an
asynchronous call, a Promise
separates the launch of an asynchronous operation from the retrieval of its result.
While the asynchronous might still be running, a Promise<T>
is directly returned to the caller to retrieve the final
result when it becomes available. A so called continuation
can be attach to a Promise to execute a callback when
the result becomes available (when the Promise has been resolved or fulfilled).
The then()
member is used to attach a callback to the Promise. The first argument is a callable
that will be called
when the Promise has been succesfully resolved. If, for some reason, an error occurs during the asynchronous operation,
a Promise can be rejected and will then fail. In this case, the second callable will be called. Async::NoExcept
is
a special callback that will call std::terminate()
if the promise failed. This is the equivalent of the noexcept
keyword.
Other generic callbacks can also be used in this case:
Async::IgnoreException
will simply ignore the exception and let the program continueAsync::Throw
will “rethrow” the exception up to an eventual promise call-chain. This has the same effect than thethrow
keyword, except that it is suitable for promises.
Exceptions in promises callbacks are propagated through an exception_ptr
.
Promises can also be chained together to create a whole asynchronous pipeline:
Line 5 will propagate the exception if fetchDatabase()
failed and rejected the promise.
Headers
Overview
Inspired by the Rust eco-system and Hyper, HTTP headers are represented
as type-safe
plain objects. Instead of representing headers as a pair of (key: string, value: value)
, the choice has
been made to represent them as plain objects. This greatly reduces the risk of typo errors that can not catched by the
compiler with plain old strings.
Instead, objects give the compiler the ability to catch errors directly at compile-time, as the user can not add or request a header through its name: it has to use the whole type. Types being enforced at compile-time, it helps reducing common typo errors.
With Pistache
, each HTTP Header is a class
that inherits from the Http::Header
base class and use the NAME()
macro
to define the name of the header. List of all headers inside an HTTP request or response are stored inside an internal
std::unordered_map
, wrapped in an Header::Collection
class. Invidual headers can be retrieved or added to this object
through the whole type of the header:
get<H>
will return a std::shared_ptr<H>
where H: Header
(H inherits from Header). If the header does not exist, get<H>
will throw an exception. tryGet<H>
provides a non-throwing alternative that, instead, returns a null pointer.
Built-in headers
Headers provided by Pistache live in the Http::Header namespace
Defining your own header
Common headers defined by the HTTP RFC (RFC2616) are already implemented and available.
However, some APIs might define extra headers that do not exist in Pistache
. To support your own header types, you can define
and register your own HTTP Header by first declaring a class that inherits the Http::Header
class:
Since every header has a name, the NAME()
macro must be used to name the header properly:
The Http::Header
base class provides two virtual methods that you must override in your own implementation:
This function is used to parse the header from the string representation. Alternatively, to avoid allocating memory for the string representation, a raw version can be used:
str
will directly point to the header buffer from the raw http stream. The len
parameter is the total length of the header’s value.
When writing the response back to the client, the write
function is used to serialize the header into the network buffer.
Let’s combine these functions together to finalize the implementation of our previously declared header:
And that’s it. Now all we have to do is registering the header to the registry system:
Header's instantation
You should always provide a default constructor for your header so that it can be instantiated by the registry system
Now, the XProtocolVersion
can be retrieved and added like any other header in the Header::Collection
class.
Unknown headers
Headers that are not known to the registry system are stored as a raw pair of strings in the Collection class. getRaw() can be used to retrieve a raw header:
MIME types
MIME Types (or Media Type) are also fully typed. Such types are for example
used in an HTTP request or response to describe the data contained in the body of the message (Content-Type
header, …)
and are composed of a type, subtype, and optional suffix and parameters.
MIME Types are represented by the Mime::MediaType
class, implemented in the mime.h
header. A MIME type can be directly
constructed from a string:
However, to enforce type-safety, common types are all represented as enumerations:
To avoid such a typing pain, a MIME
macro is also provided:
For suffix MIMEs, use the special MIME3
macro:
If you like typing, you can also use the long form:
The toString()
function can be used to get the string representation of a given MIME type:
Routing
HTTP routing consists of binding an HTTP route to a C++ callback. A special component called an HTTP router will be in charge of dispatching HTTP requests to the right C++ callback. A route is composed of an HTTP verb associated to a resource:
Here, GET
is the verb and /users/1
is the associated resource.
HTTP methods
A bunch of HTTP methods (verbs) are supported by Pistache:
- GET: The
GET
method is used by the client (e.gbrowser
) to retrieve a ressource identified by an URI. For example, to retrieve an user identified by an id, a client will issue aGET
to the/users/:id
Request-URI. - POST: the
POST
method is used to post or send new information to a certain ressource. The server will then read and store the data associated to the request. POST is a common way of transmitting data from an HTML form. POST can also be used to create a new resource or update information of an existing resource. For example, to create a new user, a client will issue aPOST
to the/users
path with the data of the user to create in its body. - PUT:
PUT
is very similar toPOST
except thatPUT
is idempotent, meaning that two requests to the same Request-URI with the same identical content should have the same effect and should produce the same result. - DELETE: the
DELETE
method is used to delete a resource associated to a given Request-URI. For example, to remove an user, a client might issue aDELETE
call to the/users/:id
Request-URI.
To sum up, POST
and PUT
are used to Create and/or Update, GET
is used to Read and DELETE
is used to Delete
information.
Route patterns
Static routes
Static routes are the simplest ones as they do rely on dynamic parts of the Request-URI.
For example /users/all
is a static route that will exactly match the /users/all
Request-URI.
Dynamic routes
However, it is often useful to define routes that have dynamic parts. For example, to retrieve a specific user
by its id, the id is needed to query the storage. Dynamic routes thus have parameters that are then matched
one by one by the HTTP router. In a dynamic route, parameters are identified by a column :
/users/:id
Here, :id
is a dynamic parameter. When a request comes in, the router will try to match the :id
parameter to
the corresponding part of the request. For example, if the server receives a request to /users/13
, the router will
match the 13
value to the :id
parameter.
Some parameters, like :id
are named. However, Pistache
also allows splat (wildcard) parameters, identified by a star *
:
/link/*/to/*
Defining routes
To define your routes, you first have to instantiate an HTTP router:
Then, use the Routes::<Method>()
functions to add some routes:
Routes::bind
is a special function that will generate a corresponding C++ callback that will then
be called by the router if a given route matches the Request-URI.
Callbacks
A C++ callback associated to a route must have the following signature:
A callback can either be a non-static free or member function. For member functions, a pointer to the
corresponding instance must be passed to the Routes::bind
function so that the router knows on which
instance to invoke the member function.
The first parameter of the callback is Rest::Request
and not an Http::Request
. A Rest::Request
is
an Http::Request
will additional functions. Named and splat parameters are for example retrieved through
this object:
As you can see, parameters are also typed. To cast a parameter to the appropriate type, use the as<T>
member template.
Cast safety
An exception will be thrown if the parameter can not be casted to the right type
Installing the handler
Once the routes have been defined, the final Http::Handler
must be set to the HTTP Endpoint. To retrieve the handler,
just call the handler()
member function on the router object:
REST description
Documentation writing for this part is still in progress, please refer to the rest_description example


Naval History Homepage and Site Search
|
||||||||
|
||||||||
|
Fleet Minesweeping Sloop, Flower-class, Acacia-type Ordered 1.15, Acacia, Azalea and Arabis-types built on merchant ship lines, with similar warship-like appearance. ACACIA Pendant Nos M.26 (2.15), T.00 (9.15). Launched 15.4.15 Swan Hunter. 1200 tons, 262(oa), 250(pp)x33x11ft. TE 1800ihp, 16.5kts. Armament: 2-12pdr, 2-3pdr AA. Crew: 90. Acacia-types served in Grand Fleet, at Queenstown, and in Mediterranean. Sold 6.9.22 Dornom Bros. (British Warships 1914-1919/Conway's All the World's Fighting Ships 1906-21) |
||||||||
|
||||||||
|
Notes: 1. Latitude/longitude, including for days in port, show representative decimal positions for each day, as calculated by the Old Weather project's analysis program. As such, they differ by varying amounts from the positions recorded, usually at noon, in the log pages. In addition, some latitudes/longitudes have been amended in edited logs for errors in the logs, for errors in identifying locations by the analysis program, or simply for greater accuracy. In all cases, refer to the log-page scans for the positions as originally recorded. Not all log pages contain this information and the ships' positions have therefore often been estimated. 2. Full account of any day is available by clicking on the link above that day. Groups of links refer to log book covers and introductory information; some may be blank. Editor’s notes:
The first time of sighting/visiting a place I have provided the latitude and longitude to one decimal place only. However, the latitude and longitude to 4 decimal places (if available) is given in the gazetteer at the far end of the log.
|
||||||||
|
THE VOYAGES OF HMS ACACIA 1915-1916
(Maps prepared using Journey Plotter, developed by Maikel. The Plots can only be approximate. They are made by joining-up positions on successive days, and sometimes positions are not given. There will therefore be occasions when the ship appears to have travelled overland) LOGS FOR MAY 1915 4caf8378cadfd34197000008: (http://oldweather.s3.amazonaws.com/ADM53-32581/0001_0.jpg) 4caf8378cadfd34197000009: (http://oldweather.s3.amazonaws.com/ADM53-32581/0001_1.jpg) 4caf8378cadfd3419700000a: (http://oldweather.s3.amazonaws.com/ADM53-32581/0002_0.jpg) 4caf8378cadfd3419700000b: (http://oldweather.s3.amazonaws.com/ADM53-32581/0002_1.jpg) 4caf8378cadfd3419700000c: (http://oldweather.s3.amazonaws.com/ADM53-32581/0003_0.jpg) Above 5 pages: Book cover 4caf8378cadfd3419700000d: (http://oldweather.s3.amazonaws.com/ADM53-32581/0003_1.jpg) HMS Acacia. Copy of Log for Month of May 1915. Signed L Dickinson Sub Lieut RNR 4caf8378cadfd3419700000e: (http://oldweather.s3.amazonaws.com/ADM53-32581/0004_0.jpg) Blank 4caf8378cadfd3419700000f: (http://oldweather.s3.amazonaws.com/ADM53-32581/0004_1.jpg) Blank 4caf8378cadfd34197000010: (http://oldweather.s3.amazonaws.com/ADM53-32581/0005_0.jpg) Barometer information: Aneroid: Maker and number; J Hicks London No 2222: Height of cistern above sea 20feet Thermometer for air temperature information: Position; Upperdeck: Whether in screen; yes: Maker and number; Negretta and Lambra 1206 &1237 11th May – 31st May. Thermometer for sea temperatures Negretta and Lambra No 1554 11th May – 31st May. 4caf8378cadfd34197000011: (http://oldweather.s3.amazonaws.com/ADM53-32581/0005_1.jpg) Blank
THE VOYAGES OF HMS ACACIA
4caf8378cadfd34197000012: (http://oldweather.s3.amazonaws.com/ADM53-32581/0006_0.jpg) 11 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard 9.00am: Commissioned. Complement: 77 men 10.00am: Hands taking in ammunition 1.30pm: Unmoored & proceeded pilot & 2 tugs 2.30pm: Moored to Herd Buoy forward, swung ship for adjustment of compasses 3.30pm: Cast off & returned to berth 4.45pm: Arrived off berth 5.00pm: Moored at Neptune Works, Walker-on-Tyne 7.00pm: Hands receiving and storing provisions 10.00pm: Hands billeted at Simpson’s Hotel, Wallsend Provisions: fresh meat 90lb, vegetables 100lb, bread 140lb Fresh water: tanks not completed Thermometers: not in place on board Weather: winds SW force 4 to 1; no barometer yet; plenty of rain 4caf8378cadfd34197000013: (http://oldweather.s3.amazonaws.com/ADM53-32581/0006_1.jpg) 12 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard 6.00am: Hands on board preparing ship for sea 7.20am: Unmoored and proceeded pilot and 2 tugs 8.20am: Passed breakwater 8.55am: Measured mile runs to 9.55 am 10.30am: Commenced 6 hours steaming trials 12.00pm: Hands victualled on aboard 4.30pm: Steaming trials over 4.30pm: Measured Mile runs to 4.55pm 5.10pm: Entered River Tyne 6.00pm: Arrived off berth 6.10pm: Moored at Neptune Works 7.00pm: Leave for starboard watch to 7.00am Weather: winds SW/NE force 4; no barometer; rain in the morning, clearing later; NE swell 4caf8378cadfd34197000014: (http://oldweather.s3.amazonaws.com/ADM53-32581/0007_0.jpg) 13 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard 5.30am: Lash up & stow 6.00am: Hands employed receiving and stowing stores 7.30am: Breakfast 12.00pm: Dinner 1.15pm: Hands receiving & stowing stores 4.00pm: Tea 4.30pm: Liberty for Port Watch till 7.00am 7.30pm: Supper 10.00pm: Hands pipe down Provisions: fresh meat – lb, vegetables 100lb, bread 60lb Fresh water: tanks not yet completed Weather: winds NW force 2; dry in the fore noon, drizzle all after noon 4caf8378cadfd34197000015: (http://oldweather.s3.amazonaws.com/ADM53-32581/0007_1.jpg) 14 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Weather: winds N force 3; clear skies with some cloud 4caf8378cadfd34197000016: (http://oldweather.s3.amazonaws.com/ADM53-32581/0008_0.jpg) 15 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Fresh water: 22 tons. Tanks ready Weather: winds NE force 2; clear skies with some cloud 4caf8378cadfd34197000017: (http://oldweather.s3.amazonaws.com/ADM53-32581/0008_1.jpg) 16 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Fresh water: expended 1.5 tons Weather: winds SE force 2; mostly cloudy 4caf8378cadfd34197000018: (http://oldweather.s3.amazonaws.com/ADM53-32581/0009_0.jpg) 17 May 1915 Walker- on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard 6.30am: Hands testing boats Weather: winds SE/SW force 2; mostly cloudy ending with drizzle 4caf8378cadfd34197000019: (http://oldweather.s3.amazonaws.com/ADM53-32581/0009_1.jpg) 18 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Weather: winds E force 2; clear skies with some cloud 4caf8378cadfd3419700001a: (http://oldweather.s3.amazonaws.com/ADM53-32581/0010_0.jpg) 19 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Distance through water nil miles. Fuel expended not shown, 251 tons remaining Weather: winds E/SSW force 3 to 4; clear skies changing to rain by afternoon 4caf8378cadfd3419700001b: (http://oldweather.s3.amazonaws.com/ADM53-32581/0010_1.jpg) 20 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Distance through water nil miles. Fuel expended 0.5 tons Weather: winds SE/E/NW force 3; cloud, ending day with rain 4caf8378cadfd3419700001c: (http://oldweather.s3.amazonaws.com/ADM53-32581/0011_0.jpg) 21 May 1915 Walker-on-Tyre Lat 54.97, Long -1.535 Swan and Hunter Shipyard Distance through water nil miles. Fuel expended 0.5 tons Weather: winds SW/E force 3; rain in the morning, cloud in the after noon 4caf8378cadfd3419700001d: (http://oldweather.s3.amazonaws.com/ADM53-32581/0011_1.jpg) 22 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Distance through water nil miles. Fuel expended 0.5 tons Weather: winds NE force 2; cloud, with some blue sky later 4caf8378cadfd3419700001e: (http://oldweather.s3.amazonaws.com/ADM53-32581/0012_0.jpg) 23 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Provisions: fresh meat 70lb; vegetables 200lb; bread 140lb Distance through water nil miles. Fuel expended 1.0 tons Weather: winds SE/E/NE force 2 to 3; clear skies with some cloud 4caf8378cadfd3419700001f: (http://oldweather.s3.amazonaws.com/ADM53-32581/0012_1.jpg) 24 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard 4.00am: Barometer and thermometer recordings commence Distance through water nil miles. Fuel expended 1.5 tons Weather: winds NE force 1 to Calm; barometer readings commence, pressure high; temperature 50F; clear skies 4caf8378cadfd34197000020: (http://oldweather.s3.amazonaws.com/ADM53-32581/0013_0.jpg) 25 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 Swan and Hunter Shipyard Distance through water nil miles. Fuel expended 1.5 tons Weather: winds Calm force 0; barometer falling slowly; temperature 58F; misty all day 4caf8378cadfd34197000021: (http://oldweather.s3.amazonaws.com/ADM53-32581/0013_1.jpg) 26 May 1915 Walker-on-Tyne Lat 54.97, Long -1.535 10.41am: Steaming on various courses and at various speeds for sweep trials. 1.30pm: Gun crews on gun trials 1.30pm: Sweep trials continued to 4.00pm 5.00pm: Passed breakwater 6.00pm: Alongside Neptune Works 6.20pm: Moored at berth Provisions: fresh meat 30lb; vegetables 200lb; bread 140lb Distance through water [editor’s note, not recorded] miles. Fuel expended 7.5 tons Weather: winds N/NE/E force 1; barometer steady; temperature 58F; cloudy and drizzly 4caf8378cadfd34197000022: (http://oldweather.s3.amazonaws.com/ADM53-32581/0014_0.jpg) 27 May 1915 Walker-on-Tyne Lat 56.0, Long -2.0 2.40pm: St Mary Island Lighthouse [Lat 55.1, Long -1.5] distance 1.6 miles 3.30pm: Exercised fire, collision and abandon ship stations 4.07pm: Coquet Island Lighthouse [Lat 55.3 Long -1.5] distance 2 miles 5.40pm: Longstone Lighthouse [Lat 55.6, Long -1.6] distance 1.5 miles 7.38pm: St Abb’s Head Lighthouse [Lat 55.9, Long -0.1] distance 1.5 miles Distance through water 126 miles. Fuel expended 11.5 tons Engine drinking: received 5 tons; expended 1.5 tons, 20.5 tons remaining of water Weather: winds E/ NE/NW force 1 to 3; barometer rising slowly; temperature 53F; mostly blue skies; NE swell 4caf8378cadfd34197000023: (http://oldweather.s3.amazonaws.com/ADM53-32581/0014_1.jpg) 28 May 1915 Scapa Flow Lat 58.2, Long -2.7 12.00am: Zig-zagging N9E - N43E 3.20am: Buchan Ness [Lat 57.5, Long -1.78] bearing N19W 4.00am: Buchan Ness Lighthouse distance 3.5 miles 10.19am: Noss Head [Lat 58.5, Long -3.0] distance1.8 miles 11.16am: Pentland Skerries distance 2.2 miles 12.00pm: Received orders from Exam Str proceeded Distance through water 268 miles. Fuel expended 14 tons Engine drinking: 1.5 tons, 19 tons remaining of water Weather: winds N force 4 to 2; barometer falling slowly [Editor’s note: possible significant penning error at 8pm- shows rise of 27 points]; temperature 44F; mostly cloudy; NE swell, usual tidal currents observed 4caf8378cadfd34197000024: (http://oldweather.s3.amazonaws.com/ADM53-32581/0015_0.jpg) 29 May 1915 Scapa Flow Lat 58.9, Long -3.1 10:50pm: Grand Fleet left Distance through water 281 miles. Fuel expended 14 tons Weather: winds N/E force 4; barometer steady; temperature 48F; mostly cloudy; NE swell, usual tidal currents observed 4caf8379cadfd34197000025: (http://oldweather.s3.amazonaws.com/ADM53-32581/0015_1.jpg) 30 May 1915 Scapa Flow Lat 58.9, Long -3.1 6.15pm: Hoisted whaler Distance through water nil miles. Fuel expended 1.25 tons Weather: winds NE/NW/W force 2 to 4; barometer from 29.81 to 30.32 and back again in one day; temperature 44F; cloudy in the morning then overcast and into rain for the evening/night 4caf8379cadfd34197000026: (http://oldweather.s3.amazonaws.com/ADM53-32581/0016_0.jpg) 31 May 1915 Scapa Flow Lat 58.9, Long -3.1 7.50am: Drifter left ship with mails 8.00am: Grand Fleet left 1.35pm: HMS Iron Duke left Distance through water nil miles. Fuel expended 1.5 tons Weather: winds W/SW force 4; barometer falling fast; temperature 48F; rain first 4 hours, cloudy later LOGS FOR JUNE 1915 4caf8379cadfd3419700002b: (http://oldweather.s3.amazonaws.com/ADM53-32581/0018_1.jpg) 1 June 1915 Scapa Flow Lat 58.9, Long -3.1 M2 Berth 1 Able Bodied Seaman + 1 Stoker joined 1 Able Bodied Seaman + 1 Stoker left Distance through water nil miles. Fuel expended 0.25 tons Weather: winds NW force 4 to 1; barometer rising steadily; temperature 50F; cloudy 4caf8379cadfd3419700002c: (http://oldweather.s3.amazonaws.com/ADM53-32581/0019_0.jpg) 2 June 1915 Scapa Flow Lat 58.9, Long -3.1 2.55pm: Anchor aweigh. Proceeded to firing practice 7.40pm: Anchored in Cairston Roads, Hoy Sound [Hoy Sound, Lat 59, Long -3.3] Distance through water nil miles. Fuel expended 3.5 tons Weather: winds Calm/SE force 1; barometer steady; temperature 48F; some cloud then drizzling rain and overcast 4caf8379cadfd3419700002d: (http://oldweather.s3.amazonaws.com/ADM53-32581/0019_1.jpg) 3 June 1915 Scapa Flow Lat 58.9, Long -3.1 9.30am: Commenced sweeping exercises 11.30am: Finished exercises 12.40pm: Passed Hoy Sound guard ship HMS Royal Arthur 1.30pm: Alongside collier in Long Hope 2.15pm: Commenced coaling 5.00pm: Coaling finished Midnight: Drifter alongside Provisions received: fresh meat 117lb; vegetables -lb; bread 192lb Distance through water nil miles. Fuel expended 5 tons, 250 tons remaining Weather: winds SE/SW force 1 to 2; barometer rising briskly, 29.78 to 30.00 over 12 hours; temperature 55F; some cloud 4caf8379cadfd3419700002e: (http://oldweather.s3.amazonaws.com/ADM53-32581/0020_0.jpg) 4 June 1915 Scapa Flow Lat 58.9, Long -3.1 9.00am: Motor boat put out 7.00pm: Preparing for sea 9.00pm: Hoisted motor boat Provisions received: fresh meat 92lb, vegetables 100lb, bread 192lb Distance through water nil miles. Fuel expended 2 tons Weather: winds SW force 1 to calm; barometer steady; temperature 55F; some cloud 4caf8379cadfd3419700002f: (http://oldweather.s3.amazonaws.com/ADM53-32581/0020_1.jpg) 5 June 1915 Scapa Flow Lat 58.8, Long -3.1 5.05am: Weighed anchor and proceeded 5.38am: Passed Switha Gateway [Lat 58.8, Long -3.1] 6.13am: Pentland Skerries Lighthouse distance 1.5 miles 10.00am: Altered course 16 points to allow HMS Foxglove to take station 2.15pm: Passed quantities of wreckage barrels etc 7.40pm: Sited Sumburgh Head Lighthouse [Lat 59.9, Long -1.3] Distance through water 68 miles. Fuel expended 22.5 tons Weather: winds SSE/NE/N/NxW/W/WSW force 2 increasing to 4 by end of day; barometer steady but rising at end of day; temperature 54F; some cloud 4caf8379cadfd34197000030: (http://oldweather.s3.amazonaws.com/ADM53-32581/0021_0.jpg) 6 June 1915 Lat 59.2, Long -1.2 4.10am: Stopped. Took on board crew of 9 of Trawler Japonica of Aberdeen sunk by submarine 8pm: HMS Foxglove took station astern 8.35pm: Stopped for stearing gear defects to 8.45pm: 9.08pm: Pentland Skerries at South 9.42pm: Passed Switha Gateway [Lat 58.8, Long -3.1] 9.49pm: Anchored in Long Hope [Lat 58.8, Long -3.1] Distance through water 255 miles. Fuel expended 23 tons Weather: winds W/SE hours force 3; barometer slowly falling; temperature 50F; some cloud; swell 2 4caf8379cadfd34197000031: (http://oldweather.s3.amazonaws.com/ADM53-32581/0021_1.jpg) 7 June 1915 Scapa Flow Lat 58.9, Long -3.1 5.20am: Thick fog 10.35am: Discharged crew of Trawler Japonica of Aberdeen to HMS Imperieuse Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE veering to SW force 2; barometer falling during pm; temperature 50F; Fog all day long 4caf8379cadfd34197000032: (http://oldweather.s3.amazonaws.com/ADM53-32581/0022_0.jpg) 8 June 1915 Scapa Flow Lat 58.9, Long -3.1 3.30am: Drifter alongside 10.30am: HMS Skipjack left collier and anchored in berth 11.15am:
Fleet Surgeon of HMS
Benbow
visited
& inspected ship Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/SW force 1; barometer falling 29.88 to 29.68; temperature 55F; early rain clearing up to some cloud mid morning 4caf8379cadfd34197000033: (http://oldweather.s3.amazonaws.com/ADM53-32581/0022_1.jpg) 9 June 1915 Scapa Flow Lat 58.9, Long -3.1 4.15am: HMS Skipjack, HMS Gossamer, HMS Speedwell, and HMS Foxglove left harbour 7.25am: Moored alongside HMS Assistance for repair 5.00pm: Drifter alongside with stores Distance through water nil miles. Fuel expended 0.25 tons Weather: winds WSW/SSE/Calm force 2 to 0; barometer rising; temperature 55F; blue skies and some cloud 4caf8379cadfd34197000034: (http://oldweather.s3.amazonaws.com/ADM53-32581/0023_0.jpg) 10 June 1915 Scapa Flow Lat 58.9, Long -3.1 1.00pm: Hands overhauling boat gear, painting ship etc. 8.30pm: Hoisted whaler Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/SW/SE force 1; barometer rising; temp 56F; clear skies with cloud 4caf8379cadfd34197000035: (http://oldweather.s3.amazonaws.com/ADM53-32581/0023_1.jpg) 11 June 1915 Scapa Flow Lat 58.9, Long -3.1 5.00am: Hands employed on wire sweeping gear 6.00am: Lost one 12 inch MacMahone spanner overboard 4.00pm: Drifter left for Kirkwall 11.15pm: Drifter alongside Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/SW/SE force 1; barometer rising; temp hit a lovely 72F; blue skies, with clouds petering out in the pm 4caf8379cadfd34197000036: (http://oldweather.s3.amazonaws.com/ADM53-32581/0024_0.jpg) 12 June 1915 Scapa Flow Lat 58.9, Long -3.1 7.30pm: Lost overboard one Bosun's call Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SW force 1; barometer rising; temperature 55F; blue skies some cloud, misty by midnight 4caf8379cadfd34197000037: (http://oldweather.s3.amazonaws.com/ADM53-32581/0024_1.jpg) 13 June 1915 Scapa Flow Lat 58.9, Long -3.1 2.40am: Destroyers enter sea harbour 9.30am: Unmoored & proceeded for engine trials in Scapa Flow 3.00pm: Rear Admiral F.S. (Francis Spurstow) Miller [Editor’s note: see gazeteer at end of log for details] and S.O.M.S. visited re defects Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE force 1; barometer rising; temperature 50F; blue skies some cloud 4caf8379cadfd34197000038: (http://oldweather.s3.amazonaws.com/ADM53-32581/0025_0.jpg) 14 June 1915 Scapa Flow Lat 58.9, Long -3.1 2.00am: Deadlights opened. Ventilation attended to 4.40am: Minesweepers left harbour 11.00am: Left HMS Assistance for trials in Scapa Flow 2.50am: Moored alongside HMS Assistance 7.20pm: Anchored in Long Hope 10.25pm: Weighed anchor and proceeded 11.26pm: Pentland Skerries distance 1.5 miles Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/Calm force 1; barometer steady; temperature 63F; mostly blue skies 4caf8379cadfd34197000039: (http://oldweather.s3.amazonaws.com/ADM53-32581/0025_1.jpg) 15 June 1915 Aberdeen Lat 57.15, Long -2.06 4.00am: Rattray Head [Lat 57.6, Long -1.8] distance 4 miles 5.35am: Buchan Ness distance 2.5 miles 7.25am: Passed breakwaters 7.45am: Moored to quay 1.00pm: Left jetty for dry dock being towed by two tugs 1.40pm: Vessel dry docked 3.00pm: Vessel shored 6.00pm: Repair work proceeding as fast as possible Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/Calm force 1; barometer steady; temperature 57F; blue skies 4caf8379cadfd3419700003a: (http://oldweather.s3.amazonaws.com/ADM53-32581/0026_0.jpg) 16 June 1915 Aberdeen Lat 57.15, Long -2.06 In dry dock 9:30pm: Unnecessary lights out Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/SW Calm; barometer slowly falling; temperature 58F; mostly blue skies 4caf8379cadfd3419700003b: (http://oldweather.s3.amazonaws.com/ADM53-32581/0026_1.jpg) 17 June 1915 Aberdeen Lat 57.15, Long -2.06 In dry dock 11.00am: Senior Ranking Officer visited ship 9:30pm: Unnecessary lights out Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/SW force 1; barometer steady and high 30.48; temperature 55F; blue skies 4caf8379cadfd3419700003c: (http://oldweather.s3.amazonaws.com/ADM53-32581/0027_0.jpg) 18 June 1915 Aberdeen Lat 57.15, Long -2.06 In dry dock 9.00am: Hands employed fitting buoys, collision mats, breakers etc 1.00pm: Hands getting stores on board for HMS Hollyhock Provisions: fresh meat 130lb, vegetables 100lb, bread 160lb Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/Calm force 1; barometer steady; temperature 55F; mostly blue skies 4caf8379cadfd3419700003d: (http://oldweather.s3.amazonaws.com/ADM53-32581/0027_1.jpg) 19 June 1915 Aberdeen Lat 57.15, Long -2.06 In dry dock Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/Calm force 1; barometer falling slowly; temperature 55F; blue skies and some cloud 4caf8379cadfd3419700003e: (http://oldweather.s3.amazonaws.com/ADM53-32581/0028_0.jpg) 20 June 1915 Aberdeen Lat 57.15, Long -2.06 Ship in dry dock 1.00pm: Leave to Stokers to 11pm Distance through water nil miles. Fuel expended 0.25 tons Weather: winds Calm/S/Calm force 1; barometer falling to 29.96; temperature 55F; clear skies with clouds 4caf8379cadfd3419700003f: (http://oldweather.s3.amazonaws.com/ADM53-32581/0028_1.jpg) 21 June 1915 Aberdeen Lat 57.15, Long -2.06 4.00am: Flooding dry dock 5.00am: Dock flooded 6.00am: Left dry dock for wet dock towed by two tugs, no steam 7.15am: Moored alongside quay in Victoria Dock 1.00pm: A. Slater, Engine Room Artificer, discharged to Royal Infirmary Aberdeen [see gazeteer] Provisions: fresh meat 160lb, vegetables 500lb, bread 250lb Water: 20 tons Coal: 218.5 tons Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SW/SE/Calm force 1; barometer rising slowly; temperature 55F; mostly blue skies 4caf8379cadfd34197000040: (http://oldweather.s3.amazonaws.com/ADM53-32581/0029_0.jpg) 22 June 1915 Aberdeen to Scapa Flow Lat 57.5, Long -1.7 9.00am: Unmoored & proceeded 9.10am: Passed through locks 9.23am: Passed Pierheads 11.00am: Buchan Ness Lighthouse distance 1.8 miles 11.45am: Rattray Head 3 miles 5.44pm: Pentland Skerries Lighthouse distance 1.8 miles 6.45pm: Passed Switha Gateway Zigzagging 2 points 7.05pm: Moored to Collier Spilsby 8.20pm: Commenced coaling 11.10pm: Finished coaling Distance through water nil miles. Fuel expended 0.25 tons Weather: winds Calm/ENE force 0 to 3; barometer steady; temperature 56F; mostly blue skies distant objects unusually clear and distinct at midday 4caf8379cadfd34197000041: (http://oldweather.s3.amazonaws.com/ADM53-32581/0029_1.jpg) 23 June 1915 Scapa Flow M2 berth Lat 58.9, Long -3.1 3.35am: Minesweepers left 8.15am: Cast off from collier 8.55am: Anchored in M2 berth 1.00pm: Surgeon of HMS Skipjack inspected crew 2.00pm: Water boat alongside 6.00pm: One Stoker left for HMS Crescent for punishment 7.45pm: One Stoker joined from HMS Benbow 8.15pm: Three Ratings discharged to hospital ship HMHS Plassey Distance through water nil miles. Fuel expended 0.25 tons Weather: winds E/SE force 1 to 2; barometer steady; temperature 50F; mostly blue skies 4caf8379cadfd34197000042: (http://oldweather.s3.amazonaws.com/ADM53-32581/0030_0.jpg) 24 June 1915 Scapa Flow Lat 58.7, Long -2.8 2.00am: Opened all ventilation 5.30am: Reduced orders for steam 15 knots 9.18am: Weighed anchor and proceeded 9.50am: Passed Switha Gateway 10.00am: HMS Dahlia in company. Cruising awaiting HMS Foxglove 12.06pm: Pentland Skerries distance 1.5 miles. Zigzagging 4 points 7.25pm: Heavy Weather reduced to 12 knots 9.00pm: Reduced to 10 knots Distance through water nil miles. Fuel expended 0.25 tons Weather: winds E/ENE force 1; barometer steady; temperature 48F; overcast and cloudy; swell up to 5 4caf8379cadfd34197000043: (http://oldweather.s3.amazonaws.com/ADM53-32581/0030_1.jpg) 25 June 1915 At Sea Lat 60.5, Long -0.3 12.45am: Observed Outer Skerries Lighthouse bearing N6E 5.00am: HMS Foxglove distance 2 miles on port beam. HMS Dahlia distance 2 miles on starboard beam 1.20pm: HMS Dahlia ordered to examine two trawlers 2.00pm: HMS Dahlia took station astern 3 cables 4.00pm: Altered course N15W to close HMS Foxglove 4.20pm: Conveyed two Dutch trawlers to Lerwick 6.30pm: Off Lerwick [Lat 60.1, Long -1.1] 9.00pm: Cruising round watching HMS Dahlia (examining two Dutch trawlers) to 9.45pm 11.00pm: HMS Dahlia took station astern 3 cables Distance through water nil miles. Fuel expended 0.25 tons Weather: winds E/ESE force 5 to 6; barometer steady; temperature 50F; overcast in the fore noon, plus mist in the after noon; swell 5 to 4 4caf8379cadfd34197000044: (http://oldweather.s3.amazonaws.com/ADM53-32581/0031_0.jpg) 26 June 1915 At sea, and Scapa Flow Lat 58.9, Long -3.1 6.25am: Observed Old Head ahead [Lat 58.75, Long -2.9]. Stopped for steering gear defect 6.39am: Proceeded. Foggy 6.50am: Too foggy to enter 8.00am: Dense fog 12.00pm: Thick fog 3.00pm: Passed Pentland Skerries 1 mile 3.47pm: Passed Switha Gate 4.00pm: Moored alongdside collier 4.20pm: Commenced coaling 6.40pm: Drifter alongside with mails 6.45pm: Flushed coaling 6.45pm: Acting SPO discharged to HMS Plassey 8.25pm: Left collier 8.43pm: Anchored in Long Hope Sound Distance through water nil miles. Fuel expended 0.25 tons Weather: winds ESE force 2; barometer falling slowly; temperature 55F; some cloud plus thick fog 8am to midday 4caf8379cadfd34197000045: (http://oldweather.s3.amazonaws.com/ADM53-32581/0031_1.jpg) 27 June 1915 Scapa Flow Lat 58.9, Long -3.1 6.00pm: Hoisted motor boat 6.13pm: Weighed anchor and proceeded from Long Hope Sound 7.00pm: In M2 berth Scapa Flow Distance through water nil miles. Fuel expended 0.25 tons Weather: winds ESE/E force 2; barometer falling slowly; temperature 53F; overcast and cloudy, with drizzle for much of the day 4caf8379cadfd34197000046: (http://oldweather.s3.amazonaws.com/ADM53-32581/0032_0.jpg) 28 June 1915 Scapa Flow Lat 58.9, Long -3.1 2.00pm: Hands fitting modified sweep, & cleaning out boats Distance through water nil miles. Fuel expended 2.5 tons Weather: winds ESE/E/SE force 1; barometer falling; temperature 52F; overcast with early rain, with a break in the clouds mid-afternoon 4caf8379cadfd34197000047: (http://oldweather.s3.amazonaws.com/ADM53-32581/0032_1.jpg) 29 June 1915 Scapa Flow Lat 58.9, Long -3.1 Anchored in M2 Berth 8.15am: Mine Sweepers left 1.00pm: Hands refitting rails on boat deck, painting deck 3.45pm: Party for HMS Shannon Distance through water nil miles. Fuel expended 2.75 tons Weather: winds ESE/Calm force 1; barometer falling to low at 29.76; temperature 56F; mist, then overcast 4caf8379cadfd34197000048: (http://oldweather.s3.amazonaws.com/ADM53-32581/0033_0.jpg) 30 June 1915 Scapa Flow Lat 58.9, Long -3.1 9.30am: Drifter with mails 10.30am: Seaplane up from HMS Campania 4.30pm: Sent stores to HMS Hollyhock Distance through water nil miles. Fuel expended 0.25 tons Weather: winds SE/E force 1; barometer rising gently; temperature 52F; overcast all day long LOGS FOR JULY 1915 4caf8379cadfd34197000049: (http://oldweather.s3.amazonaws.com/ADM53-32581/0033_1.jpg) Log Cover/Certification July 1915 4caf8379cadfd3419700004a: (http://oldweather.s3.amazonaws.com/ADM53-32581/0034_0.jpg) Blank page 4caf8379cadfd3419700004b: (http://oldweather.s3.amazonaws.com/ADM53-32581/0034_1.jpg) Blank page 4caf8379cadfd3419700004c: (http://oldweather.s3.amazonaws.com/ADM53-32581/0035_0.jpg) Barometer information: Aneroid: Maker and number; J Hicks London No 2222: Height of cistern above sea 25ft Error of mercurial barometer +.10 Thermometer information: Position; amidships: Whether in screen; yes: Maker and number; J Hicks 1236; London1234 1st July – 31st July 4caf8379cadfd3419700004d: (http://oldweather.s3.amazonaws.com/ADM53-32581/0035_1.jpg) 1 July 1915 Scapa Flow Lat 58.9, Long -3.1 1.20pm:


Application Name:
Instance Index:
Container Address:
Cell Address:
Java Version:
:
DESCRIPTION NOT AVAILABLE
12 FACTORS NOT AVAILABLE


{% extends "%s/2019/base_chapter.html" % lang %} {% set metadata = {"part_number":"IV","chapter_number":19,"title":"Resource Hints","description":"Resource Hints chapter of the 2019 Web Almanac covering usage of dns-prefetch, preconnect, preload, prefetch, priority hints, and native lazy loading.","authors":["khempenius"],"reviewers":["andydavies","bazzadp","yoavweiss"],"translators":null,"discuss":"1774","results":"https://docs.google.com/spreadsheets/d/14QBP8XGkMRfWRBbWsoHm6oDVPkYhAIIpfxRn4iOkbUU/","queries":"19_Resource_Hints","published":"2019-11-11T00:00:00.000Z","last_updated":"2020-06-30T00:00:00.000Z","chapter":"resource-hints"} %} {% block index %}
{% endblock %} {% block main_content %}Resource hints provide "hints" to the browser about what resources will be needed soon. The action that the browser takes as a result of receiving this hint will vary depending on the type of resource hint; different resource hints kick off different actions. When used correctly, they can improve page performance by giving a head start to important anticipated actions.
Examples of performance improvements as a result of resource hints include:
There are four separate resource hints supported by most browsers today: dns-prefetch
, preconnect
, preload
, and prefetch
.
dns-prefetch
The role of dns-prefetch
is to initiate an early DNS lookup. It's useful for completing the DNS lookup for third-parties. For example, the DNS lookup of a CDN, font provider, or third-party API.
preconnect
preconnect
initiates an early connection, including DNS lookup, TCP handshake, and TLS negotiation. This hint is useful for setting up a connection with a third party. The uses of preconnect
are very similar to those of dns-prefetch
, but preconnect
has less browser support. However, if you don't need IE 11 support, preconnect is probably a better choice.
preload
The preload
hint initiates an early request. This is useful for loading important resources that would otherwise be discovered late by the parser. For example, if an important image is only discoverable once the browser has received and parsed the stylesheet, it may make sense to preload the image.
prefetch
prefetch
initiates a low-priority request. It's useful for loading resources that will be used on the subsequent (rather than current) page load. A common use of prefetch is loading resources that the application "predicts" will be used on the next page load. These predictions could be based on signals like user mouse movement or common user flows/journeys.
97% of resource hint usage relied on using the <link>
tag to specify a resource hint. For example:
<link rel="prefetch" href="shopping-cart.js">
Only 3% of resource hint usage used HTTP headers to specify resource hints. For example:
Link: <https://example.com/shopping-cart.js>; rel=prefetch
Because the usage of resource hints in HTTP headers is so low, the remainder of this chapter will focus solely on analyzing the usage of resource hints in conjunction with the <link>
tag. However, it's worth noting that in future years, usage of resource hints in HTTP headers may increase as HTTP/2 Push is adopted. This is due to the fact that HTTP/2 Push has repurposed the HTTP preload Link
header as a signal to push resources.
Note: There was no noticeable difference between the usage patterns for resource hints on mobile versus desktop. Thus, for the sake of conciseness, this chapter only includes the statistics for mobile.
| Resource Hint | Usage (percent of sites) |
|---|---|
dns-prefetch |
29% |
preload |
16% |
preconnect |
4% |
prefetch |
3% |
prerender (deprecated) |
0.13% |
The relative popularity of dns-prefetch
is unsurprising; it's a well-established API (it first appeared in 2009), it is supported by all major browsers, and it is the most "inexpensive" of all resource hints. Because dns-prefetch
only performs DNS lookups, it consumes very little data, and therefore there is very little downside to using it. dns-prefetch
is most useful in high-latency situations.
That being said, if a site does not need to support IE11 and below, switching from dns-prefetch
to preconnect
is probably a good idea. In an era where HTTPS is ubiquitous, preconnect
yields greater performance improvements while still being inexpensive. Note that unlike dns-prefetch
, preconnect
not only initiates the DNS lookup, but also the TCP handshake and TLS negotiation. The certificate chain is downloaded during TLS negotiation and this typically costs a couple of kilobytes.
prefetch
is used by 3% of sites, making it the least widely used resource hint. This low usage may be explained by the fact that prefetch
is useful for improving subsequent—rather than current—page loads. Thus, it will be overlooked if a site is only focused on improving their landing page, or the performance of the first page viewed.
| Resource Hint | Resource Hints Per Page: Median |
Resource Hints Per Page: 90th Percentile |
|---|---|---|
dns-prefetch |
2 | 8 |
preload |
2 | 4 |
preconnect |
2 | 8 |
prefetch |
1 | 3 |
prerender (deprecated) |
1 | 1 |
Resource hints are most effective when they're used selectively ("when everything is important, nothing is"). Figure 2 above shows the number of resource hints per page for pages using at least one resource hint. Although there is no clear cut rule for defining what an appropriate number of resource hints is, it appears that most sites are using resource hints appropriately.
crossorigin
attribute
Most "traditional" resources fetched on the web (images, stylesheets, and scripts) are fetched without opting in to Cross-Origin Resource Sharing (CORS). That means that if those resources are fetched from a cross-origin server, by default their contents cannot be read back by the page, due to the same-origin policy.
In some cases, the page can opt-in to fetch the resource using CORS if it needs to read its content. CORS enables the browser to "ask permission" and get access to those cross-origin resources.
For newer resource types (e.g. fonts, fetch()
requests, ES modules), the browser defaults to requesting those resources using CORS, failing the requests entirely if the server does not grant it permission to access them.
crossorigin value |
Usage | Explanation |
|---|---|---|
| Not set | 92% | If the crossorigin attribute is absent, the request will follow the single-origin policy. |
| anonymous (or equivalent) | 7% | Executes a cross-origin request that does not include credentials. |
| use-credentials | 0.47% | Executes a cross-origin request that includes credentials. |
crossorigin
attribute as a percent of resource hint instances.In the context of resource hints, usage of the crossorigin
attribute enables them to match the CORS mode of the resources they are supposed to match and indicates the credentials to include in the request. For example, anonymous
enables CORS and indicates that no credentials should be included for those cross-origin requests:
<link rel="prefetch" href="https://other-server.com/shopping-cart.css" crossorigin="anonymous">
Although other HTML elements support the crossorigin attribute, this analysis only looks at usage with resource hints.
as
attribute
as
is an attribute that should be used with the preload
resource hint to inform the browser of the type (e.g. image, script, style, etc.) of the requested resource. This helps the browser correctly prioritize the request and apply the correct Content Security Policy (CSP). CSP is a security mechanism, expressed via HTTP header, that helps mitigate the impact of XSS and other malicious attacks by declaring a safelist of trusted sources; only content from these sources can be rendered or executed.
88% of resource hint instances use the as
attribute. When as
is specified, it is overwhelmingly used for scripts: 92% of usage is script, 3% font, and 3% styles. This is unsurprising given the prominent role that scripts play in most sites' architecture as well the high frequency with which scripts are used as attack vectors (thereby making it therefore particularly important that scripts get the correct CSP applied to them).
At the moment, there are no proposals to expand the current set of resource hints. However, priority hints and native lazy loading are two proposed technologies that are similar in spirit to resource hints in that they provide APIs for optimizing the loading process.
Priority hints are an API for expressing the fetch priority of a resource: high
, low
, or auto
. They can be used with a wide range of HTML tags: specifically <image>
, <link
>,


public class MoodEvent
extends java.lang.Object
implements java.io.Serializable
Mood
,
SocialSetting
,
Photograph
,
Serialized Form| Constructor and Description |
|---|
MoodEvent(Mood mood,
SocialSetting socialSetting,
java.lang.String trigger,
Photograph picture,
MoodLocation location)
Depending on the input that the system receives, each field aside from the mood and the date,
can be set to null (not inputted).
|
| Modifier and Type | Method and Description |
|---|---|
java.util.Date |
getDate()
Getter method to return the date that the mood event was created
|
java.lang.String |
getId()
Getter for Id given
|
MoodLocation |
getLocation()
Getter method to return the location where the mood event took place.
|
Mood |
getMood()
Getter method to return the mood that was set in the mood event.
|
java.lang.String |
getMoodOwner()
Getter for owner of mood event
|
Photograph |
getPicture()
Getter method to return the picture that the participant has set.
|
SocialSetting |
getSocialSetting()
Getter method to return the social setting that was affiliated with the mood event
|
java.lang.String |
getTrigger()
Getter method to return the trigger/reason of the mood event
|
void |
setDate(java.util.Date date)
Setter method to set the date that the mood event was created.
|
void |
setId(java.lang.String id)
Setter for uniqueID
|
void |
setLocation(MoodLocation location)
Setter method to set the location where the participant has registered their mood event.
|
void |
setMood(Mood mood)
Setter method to set the mood to the parameter.
|
void |
setPicture(Photograph picture)
Setter method to set the picture that the participant has chosen so long that the picture
is within the correct size.
|
void |
setSocialSetting(SocialSetting socialSetting)
Setter method to set the social setting given.
|
void |
setTrigger(java.lang.String trigger)
Setter method to set the reason for the mood event.
|
java.lang.String |
toString()
Method to display on the history tab the general description of your mood, as well as the
date that the mood has been last created/editted
|
public MoodEvent(Mood mood, SocialSetting socialSetting, java.lang.String trigger, Photograph picture, MoodLocation location) throws EmptyMoodException, TriggerTooLongException
mood
- socialSetting
- trigger
- picture
- location
- EmptyMoodException
TriggerTooLongException
public java.lang.String getId()
public Mood getMood()
Mood
public SocialSetting getSocialSetting()
SocialSetting
public java.lang.String getTrigger()
public java.util.Date getDate()
public Photograph getPicture()
Photograph
public MoodLocation getLocation()
Location
public java.lang.String getMoodOwner()
public void setId(java.lang.String id)
id
- public void setMood(Mood mood) throws EmptyMoodException
mood
- EmptyMoodException
public void setSocialSetting(SocialSetting socialSetting)
socialSetting
- public void setTrigger(java.lang.String trigger) throws TriggerTooLongException
trigger
- TriggerTooLongException
public void setDate(java.util.Date date)
date
- public void setPicture(Photograph picture)
picture
- public void setLocation(MoodLocation location)
location
- public java.lang.String toString()
toString
in class java.lang.Object


[gecode-users] Order of branching
Christian Schulte
cschulte at kth.se
Mon Dec 21 12:46:48 CET 2015
Hi,
You might have to implement a brancher on your own, check part B in MPG.
There is an example both in MPG as well as with Gecode "Knights" that uses a
brancher similarly to the one you sketch.
Cheers
Christian
--
Christian Schulte, www.gecode.org/~schulte
Professor of Computer Science, KTH, cschulte at kth.se
Expert Researcher, SICS, cschulte at sics.se
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Philippe
Sent: Sunday, December 20, 2015 12:56 PM
To: users at gecode.org
Subject: [gecode-users] Order of branching
Hi all and happy birthday to Gecode !
Here is the question of the day:
I have an IntVarArray _x and I would like to dynamically choose the order of
branching. The indice of the first variable to branch is 0.
Then if x[0] = j, the next variable to branch is x[j] and so on.
I've checked the MPG guide, especially "Branching on integer and Boolean
variables" but without success for now.
Thank you for your help
Philippe.
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list


Grid allows you to create complex layouts to position content in rows and columns.
As well as setting display: grid; there is also display: inline-grid; for the extra level of fun design.
Welcome to my collection of cheatsheets in my teach-myself-to-code journey!
At this stage of the design process we have gathered all the content for the project and are ready to lay out the design of the page.
We already have a cheatsheet for Display and Positioning, but just like Flexbox was deserving of a page all to itself so too is Grid .
Grid allows you to create complex layouts to position content in rows and columns.
As well as setting display: grid; there is also display: inline-grid; for the extra level of fun design.
Grid is an immensely powerful tool used to specify the placement of elements in the document.
Grid and flexbox can work hand in hand for specifying the layout of a document;flexbox for the 1D layout (a single column or row) and grid for the 2D layout of rows and columns together...just as the name suggests...and also like flexbox the source order of the content items does not matter and you can place them in any order in the grid which makes it really simple to rearrange with media queries for responsive design.
Using grid will involve setting the grid container and then the placement of the grid items in the container.
Some terms we need to know before we dive into it...
Properties for the grid container...
The first step in creating a grid is to define the element which will be the grid container using display.
div {
display: grid;
}
div {
display: inline-grid;
}
Using a space seperated list of values for the track-size and line-name we can define the columns and rows that make up the grid.
Values for track-size can be...
A 3 x 3 grid can be created by...
.container {
display: grid;
grid-template-columns: 100px 200px 100px;
grid-template-rows: 50px 15px 25px;
}
This grid can also be created by...
container {
display: grid;
grid-template-columns: 20% 65% 15%;
grid-template-rows: 25% 50% 25%;
}
This grid can even be created by...
.container {
display: grid;
grid-template-columns: 2fr 3fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
}
And another way this grid can be created...
.container {
display: grid;
grid-template-columns: 1fr 200px 2fr;
grid-template-rows: 50px auto 35%;
}
Lastly, we also have the magic of minmax()...
.container {
display: grid;
/*center column will not be smaller than 100px or larger than 500px*/
grid-template-columns: 2fr minmax(100px, 500px) 1fr;
grid-template-rows: minmax(50px, 100px) auto minmax(50px, 100px);
}
If the column or row is defined with only track-size then the grid lnes are automatically numbered with positive and negative numbers (postive numbers for the grid lines going from first line to the last line or negative numbers when going from the last grid line to the first grid line) - 3 columns will have 4 lines.
This allows you to target the first cell using the gridline 1 or the last cell using the gridline -1 without knowing the actual size of the grid.
Otherwise you can specifically set names (in []) for the line-name that you create yourself such as [first-line], [row1-start], [col2-end], etc., and the same line can have more than one name [row-1-end row-2-start]
container {
display: grid;
grid-template-columns: [start] 20% [line-1] 65% [line-2] 15% [end];
grid-template-rows: [r1-start] 25% [r1-end r2-start] 50% [r2-end r3-start] 25% [r3-end];
}
Multiple lines can also have the same name...
.container {
display: grid;
grid-template-columns: [col1] 20% [col1] 65% [col1] 15% [col1];
}
and can be referenced by their count...
.item {
grid-column-start: col1 2; /*starts from the second col1 line*/
}
and last of all...we have repeat()!
.container {
display: grid;
grid-template-columns: [col1] 1fr [col1] 1fr [col1] 1fr [col1];
grid-template-rows: 1fr 1fr 1fr;
}
can be written as...
.container {
display: grid;
grid-template-columns: repeat(3, 1fr [col1]);
grid-template-rows: repeat (3 1fr);
}
There is some extra magic we can use with repeat()...auto-fit and auto-fill.
.container {
display: grid;
grid-template-columns: repeat(auto-fit, 200px);
}
Using auto-fit will add extra columns but if no content will size as 0 so no extra blank space shows.
.container {
display: grid;
grid-template-columns: repeat(auto-fill, 200px);
}
Using auto-fill will add extra columns with no content, but shows as blank space.
Using grid-template-areas gives a visual representation of the grid and content. The grid is defined by referencing the grid-area for each cell.
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main none" /*using none means no grid area defined*/
". footer footer"; /*using . means an empty grid cell*/
grid-template-columns: repeat(3 1fr);
grid-template-rows: auto;
}
header {
grid-area: header;
}
nav {
grid-area: nav;
}
main {
grid-area: main;
}
footer {
grid-area: footer;
}
Each row needs to have the same number of cells!!!
When using grid-template-areas the grid-lines are automatically named, for example for the grid area named header the name of the area’s starting row line and starting column line will be header-start and the name of its last row line and last column line will be header-end (some lines might have multiple names).
The shorthand for for setting grid-template-rows, grid-template-columns, and grid-template-areas is grid-template.
So this...
.container {
display: grid;
grid-template-rows: [row1-start] 25px [row1-end row2-start] 25px [row2-end];
grid-template-columns: auto 50px auto;
grid-template-areas:
"header header header"
"footer footer footer";
}
can instead be written as...
.container {
display: grid;
grid-template:
[row1-start] "header header header" 25px [row1-end]
[row2-start] "footer footer footer" 25px [row2-end]
/ auto 50px auto;
}
The order is grid-template: rows / columns;
However, grid (coming up soon) is used more often than grid-template.
This specifies the size of the grid lines... the space between the grid cells. It is only applied between cells (not the outside edges)
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
column-gap: 10px;
row-gap: 15px;
}
You would be correct if you guessed that grid-gap was the shorthand for column-gap and row-gap.
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px 10px;
}
or...
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
}
If row-gap is not specified it will take the same value as column-gap
To align grid-items along the row axis we use justify-items .
The values that can be set are:
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
justify-items: center;
}
To align grid-items along the column axis we use align-items (where justify-items was aligning to the row axis).
The values that can be set are the same as those used with justify-items:
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
justify-items: center;
align-items: center;
}
The shorthand for justify-items and align-items is...you've guessed it...place-items!
Instead of...
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
justify-items: center;
align-items: center;
}
You can use...
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
place-items: center stretch;
}
The first value is for align-items and the second for justify-items...although if you set only one value both will use it place-items: center;
We use justify-content (and the upcoming align-content) to align the grid along the row (inline) axis when the total size of the grid is smaller than the grid container itself...such as can happen if the grid-items are a fixed size.
The values that can be set are:
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
justify-content: center;
}
Similar to justify-content we use align-content) to align the grid along the column (block) axis.
The values that can be set are the same as used with justify-content:
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
align-content: center;
}
The shorthand for justify-content and align-content is...you've guessed coorectly yet again...it is...place-content!
Instead of...
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
justify-content: center;
align-content: center;
}
You can use...
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-gap: 10px;
place-content: center stretch;
}
The first value is for align-content and the second for justify-content...although if you set only one value both will use it place-content: center;
All of the grids so far have been explicit grids in that they are manually defined with set rowns or columns.
We are now going to look at implicit grids. If a grid item is positioned into a column that is not explicitly sized by grid-template-columns , or grid-template-rows implicit grid tracks are created to hold it.
The values we can set for grid-auto-columns or grid-template-rows are the same as used for and grid-template-rows... length (px or rem , etc.), fraction (fr), percentage (%), minmax(), auto...and ones I have mentioned yet...min-content and fit-content!
.container {
display: grid;
grid-auto-columns: minmax(25px, auto);
grid-auto-rows: min-content;
}
So as well as not explicitly defining the columns and rows in the grid (and grid-auto-columns & grid-auto-rows come into play), there is also what happens when grid-items are not explicitly placed which leads us to... auto-placement algorithm which, as the name might kinda give away, is dictating how items are automatically placed in the grid.
The values that can be set are:
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
grid-auto-flow: column;
grid-gap: 10px;
}
Using dense only visually changes appearance so may be accessibility issues for content appearing out of order!
Now to put it ALL together! grid is the shorthand for setting...grid-template-rows, grid-template-columns, grid-template-areas, grid-auto-rows, grid-auto-columns, and grid-auto-flow all into a single declaration.
So....
.container {
display: grid;
grid-template-columns: 100px auto 100px;
grid-template-rows: 50px 50% 50px;
}
can also be written as....
.container {
display: grid;
grid: 100px auto 100px / 50px 50% 50px;
}
Or....
.container {
display: grid;
grid-auto-flow: row;
grid-template-columns: 100px auto 100px;
}
can also be written as....
.container {
display: grid;
grid: auto-flow / 100px auto 100px;
}
And even....
.container {
display: grid;
grid-auto-flow: row dense;
grid-auto-rows: 100px;
grid-template-columns: 1fr 2fr;
}
can also be written as....
.container {
display: grid;
grid: auto-flow dense 100px / 1fr 2fr;
}
Similar to....
.container {
display: grid;
grid-template-rows: 100px 300px;
grid-auto-flow: column;
grid-auto-columns: 200px;
}
written as....
.container {
display: grid;
grid: 100px 300px / auto-flow 200px;
}
Now are you ready for this....
.container {
display: grid;
grid-template-areas:
"header header header"
"main main main";
grid-auto-flow: column;
grid-auto-columns: 200px;
}
written as....
.container {
display: grid;
grid: [row1-start] "header header header" 1fr [row1-end]
[row2-start] "footer footer footer" 25px [row2-end]
/ auto 50px auto;
}
Now that we have out grid container created we wil look a bit closer at the grid items (grid children) we will be placing in the grid.
Properties for the grid items...
It will be a 3 x 3 grid used for examples with named lines as follows:
"top-left ... top-center-left ... top-center-right ... top-right"
"center-left ... center-center-left ... center-center-right ... center-right"
"bottom-left ... bottom-center-left ... bottom-center-right ... bottom-right"
We use these properties when we want to place a grid-item in the grid by choosing the column or row start line and the column or row end line.
The values that can be set are:
There are a few ways we can do this...starting with the line numbers
.item {
grid-column-start: 1;
grid-column-end: 4;
}
or the negative line numbers...
.item {
grid-column-start: -1;
grid-column-end: -4;
}
or the line numbers...with span
.item {
grid-column-start: 1;
grid-column-end: span 3;
}
or the line names...
.item {
grid-column-start: top-left;
grid-column-end: span bottom-left;
}
If you use auto it sets the item to use an automatic span or placement (default span is 1).
.item {
grid-column-start: auto;
}
And for the other direction...
There are a few ways we can do this...starting with the line numbers
.item {
grid-column-start: -1;
grid-row-start: 1;
grid-row-end: 4;
}
or the negative line numbers...
.item {
grid-column-start: -1;
grid-row-start: -4;
grid-row-end: -1;
}
or the line numbers...with span
.item {
grid-column-start: -1;
grid-row-start: 1;
grid-row-end: span 3;
}
or the line names...
.item {
grid-column-start: top-right;
grid-row-start: top-right;
grid-row-end: span bottom-right;
}
If the column-end or row-end is not specified the item will span 1 track.
Items can overlap too (use z-index for stacking order).
Guess what....there is a shorthand for grid-column-start & grid-column-end and grid-row-start & grid-row-end which is....you guessed it...grid-column and grid-row!!
So...
.item {
grid-column-start: 1;
grid-column-end: span 3;
grid-row-start: 1;
grid-row-end: 4;
}
can be written as...
.item {
grid-column: 1 / span 3;
grid-row: 1 / 4;
}
There are two ways that grid-area can be used:
So using short-shorthand means that...
.item {
grid-column-start: 1;
grid-column-end: span 3;
grid-row-start: 1;
grid-row-end: 4;
}
instead of being written as...
.item {
grid-column: 1 / span 3;
grid-row: 1 / 4;
}
is written as...
.item {
/* row-start / column-start / row-end / column-end */
grid-area: 1 / 1 / 4 / span 3;
}
BUT...my prefered method would be using it this way...
.container {
display: grid;
grid-template-areas:
"header header header"
"nav main main"
"footer footer footer";
grid-template-columns: repeat(3 1fr);
grid-template-rows: auto;
}
header {
grid-area: header;
}
nav {
grid-area: nav;
}
main {
grid-area: main;
}
footer {
grid-area: footer;
}
This applies only the grid item in a single cell and is used to align along the row (inline) axis
The values that can be set are:
.item {
justify-self: center;
}
Using justify-self aligns along the row (inline) axis and align-self aligns along the column (block) axis.
The values are the same as those available for justify-self:
.item {
justify-self: center;
align-self: center;
}
You'll never have guessed this but place-self is the shorthand for justify-self and align-self!
So we can write...
.item {
align-self: center;
justify-self: start;
}
You can use...
.item {
place-self: center start;
}
The first value is for align-self and the second for justify-self...although if you set only one value both will use it place-self: center;


PowerColor Radeon RX 5700 XT Liquid Devil, The Fastest Navi Graphics Card With 2070 MHz Clock Speed & $599 US Premium Pricing
by Hassan MujtabaPowerColor has officially launched the flagship Radeon RX 5700 XT Liquid Devil custom graphics card. The graphics card offers full use of liquid cooling on a custom PCB, delivering the fastest clock speeds featured on a Navi based graphics card.
PowerColor Unleashes The Radeon RX 5700 XT Liquid Devil - Fastest Navi Clocked at 2070 MHz, Liquid Cooled & A $599 US Price Tag
While we got to see a teaser of the card last week, today, PowerColor is officially unveiling the card to the public. Right off the bat, we can tell that the Liquid Devil is one stunning look card with the fastest performance that AMD's Navi 10 GPU can offer. The card features a full cover EK based water block (EK-FX RX 5700) and PowerColor has redesigned it with their own logos and design choices.
AMD Radeon Pro W5700 With Navi 10 GPU Announced For Workstations – USB Type-C & 9 TFLOPs For $799 US
The water block on the Radeon RX 5700 XT Liquid Devil covers the entire PCB and provides cooling to the GPU, VRAM, and VRM/MOSFETs. It comes with a nickel-plated copper base that effectively dissipates heat from the components, keeping your graphics card running smooth and silent. The water block also has RGB LEDs embedded beneath it so that the can flash through the acrylic built of the water block, offering a nice lighting display that you can fully customize.
Talking about the GPU now, the Radeon RX 5700 XT Navi 10 GPUs for the Liquid Devil are specially selected and binned for higher clock speed and lower temperatures. It's like the silicon lottery but for GPUs. Each GPU is then featured on a fully custom-designed PCB which makes use of a 12 layer design and offers a 10 phase VRM design with DrMOS and high-polymer capacitors which can sustain up to 300W of power.
The clock speeds on the card are just as impressive as the design itself. Featuring a peak clock of 2070 MHz which can be unleashed through the Unleash BIOS profile on the card. There are two modes on the card which can be toggled through a BIOS switch. One is Unleash which offers the max 2070 MHz clock speed while the other is the OC profile which delivers stable OC performance. There's a backplate too and the RX 5700 XT Red Devil would make use of dual 8-pin connectors to power up. As for display connectors, we are looking at three Display Port and a single HDMI port.
There are also dyes added to the main package which include red, blue and yellow color to customize the liquid color on the graphics card. Other accessories in the PowerColor Radeon RX 5700 XT Liquid Devil package would include removable plugs and a 7mm Allen key. The card is expected to hit retail stores on 25th November for a price of 599$ /599€ / 569£ (via Videocardz).


Chapter 3:
Note: recipes 4-8 need to reside on a web server and cannot be demoed
on a local file system due to security restrictions of the getImageData()
method of the canvas context.
Recipe 1
Recipe 2
Recipe 3
******************************
Recipe 4
Recipe 5
Recipe 6
Recipe 7
Recipe 8
******************************
Recipe 9
Recipe 10
Recipe 11
Recipe 12


Participants' Answers
You can find all the answers from participants in the following four tables:
- Characteristics: contains all the characteristics of the code recommendation that practitioners indicated as important.
- Coverage: contains the improvements that participants would like to see in terms of coverage of support (i.e., the scenarios in which IDE should provide a recommendation)
- Accuracy: contains the improvements that participants would like to see in terms of accuracy of the code recommendation.
- Usability: contains the improvements that participants would like to see in terms of usability.


unseen lets you encrypt or decrypt images. We use the AES256 algorithm under the hood. The uploaded images are not stored by the server in any form after completing the requested process.
Close1. Make a key of length 64. Use our little generator below or make your own. Allowed characters : (a-f, 0-9)
2. Upload the image you wish to encrypt.
3. Provide the key.
4. Wait for the magic.
5. Collect your encrypted image and your .dat file!
1. Upload the image you wish to decrypt.
2. Upload the .dat file that corresponds to your image.
3. Provide your key.
4. Wait for the magic.
5. Collect your decrypted image.
"Not every part of your private life needs to be public."


sxiv path/to/file- Open an image in fullscreen mode:
sxiv -f path/to/file- Open a newline-separated list of images, reading filenames from standard input:
echo path/to/file | sxiv -i- Open a space-separated list of images as a slideshow:
sxiv -S seconds path/to/file- Open a space-separated list of images in thumbnail mode:
sxiv -t path/to/file


--- layout: category title: Welcome! --- {% for post in site.posts limit:15 %} {% include excerpt.html %} {% endfor %}


Version 4.2.0
Release Date: June 3, 2022
4.2.0 release of CodeIgniter4
Highlights
Update minimal PHP requirement to 7.4.
To make the default configuration more secure, auto-routing has been changed to disabled by default.
OCI8 Driver for Oracle Database (contributed by ytetsuro). See Database.
Improved Auto Routing (opt-in) (contributed by kenjis). See New Improved Auto Routing.
Query Builder Subqueries and UNION support (contributed by Andrey Pyzhikov). See Database.
New Contributors
@fdomgjoni99 made their first contribution in #5608
@beganovich made their first contribution in #5823
@michaelrk02 made their first contribution in #5878
@valmorflores made their first contribution in #6051
@lonnie-vault made their first contribution in #6060
BREAKING
Method Signature Changes
The method signature of
CodeIgniter\Database\BaseBuilder::join()
andCodeIgniter\Database\*\Builder::join()
have been changed.The method signature of
Validation::setRule()
has been changed. Thestring
typehint on the$rules
parameter was removed. Extending classes should likewise remove the parameter so as not to break LSP.The method signature of
CodeIgniter\CLI\CommandRunner::_remap()
has been changed to fix a bug.The default parameter values for
Service::reset()
andCIUnitTestCase::resetServices()
have been changed fromfalse
totrue
. This is to eliminate unexpected problems during testing, such aslang()
not getting translated messages.
Behavior Changes
- The
CodeIgniter\CodeIgniter
class has a new property$context
and it must have the correct context at runtime. So the following files have been changed: public/index.php
spark
- The
The
system/bootstrap.php
file has been modified to easily implement Preloading. Returning aCodeIgniter
instance and loading.env
file have been moved toindex.php
andspark
.The
CodeIgniter\Autoloader\Autoloader::initialize()
has changed the behavior to fix a bug. It used to use Composer classmap only when$modules->discoverInComposer
is true. Now it always uses the Composer classmap if Composer is available.The color code output by CLI::color() has been changed to fix a bug.
To prevent unexpected access from the web browser, if a controller is added to a cli route (
$routes->cli()
), all methods of that controller are no longer accessible via auto-routing.There is a possible backward compatibility break for those users extending the History Collector and they should probably update
History::setFiles()
method.The
dot_array_search()
’s unexpected behavior has been fixed. Nowdot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])
returnsnull
. The previous versions returned23
.The
CodeIgniter::storePreviousURL()
has been changed to store only the URLs whose Content-Type wastext/html
. It also affects the behavior ofprevious_url()
andredirect()->back()
.
Enhancements
New Improved Auto Routing
Added an optional new more secure auto router. These are the changes from the legacy auto-routing:
- A controller method needs HTTP verb prefix like
getIndex()
,postCreate()
. Developers always know the HTTP method, so requests by an unexpected HTTP method does not pass.
- A controller method needs HTTP verb prefix like
- The Default Controller (
Home
by default) and the Default Method (index
by default) must be omitted in the URI. It restricts one-to-one correspondence between controller methods and URIs.
E.g. by default, you can access
/
, but/home
and/home/index
will be 404.
- The Default Controller (
- It checks method parameter count.
If there are more parameters in the URI than the method parameters, it results in 404.
- It does not support
_remap()
method. It restricts one-to-one correspondence between controller methods and URIs.
- It does not support
- Can’t access controllers in Defined Routes.
It completely separates controllers accessible via Auto Routes from those accessible via Defined Routes.
See Auto Routing (Improved) for the details.
Database
- Added new OCI8 driver for database.
It can access Oracle Database and supports SQL and PL/SQL statements.
- QueryBuilder
Added Subqueries in the FROM section. See Subqueries.
Added Subqueries in the SELECT section. See Select.
The
BaseBuilder::buildSubquery()
method can take an optional third argumentstring $alias
.Union queries. See Union queries.
- Raw SQL string support
Added the class
CodeIgniter\Database\RawSql
which expresses raw SQL strings.select(), where(), like(), join() accept the
CodeIgniter\Database\RawSql
instance.DBForge::addField()
default value raw SQL string support. See Raw Sql Strings as Default Values.
SQLite3 has a new Config item
foreignKeys
that enables foreign key constraints.
Helpers and Functions
HTML helper
script_tag()
now usesnull
values to write boolean attributes in minimized form:<script src="..." defer />
. See the sample code forscript_tag()
.Added 4th parameter
$includeDir
toget_filenames()
. Seeget_filenames()
.- Exception information logged through
log_message()
has now improved. It now includes the file and line where the exception originated. It also does not truncate the message anymore. The log format has also changed. If users are depending on the log format in their apps, the new log format is “<1-based count> <cleaned filepath>(<line>): <class><function><args>”
- Exception information logged through
Commands
- Added
spark db:table
command. See Database Commands for the details. - You can now see the names of all the tables in the database you are currently connected in the terminal.
spark db:table --show
- Or you can see the field names and the records of a table.
spark db:table my_table
spark db:table my_table --limit-rows 50 --limit-field-value 20 --desc
- Or you can see metadata like the column type, max length of a table.
spark db:table my_table --metadata
- Added
The
spark routes
command now shows closure routes, auto routes, and filters. See URI Routing.
Others
Added
$this->validateData()
in Controller. See $this->validateData().- Content Security Policy (CSP) enhancements
Added the configs
$scriptNonceTag
and$styleNonceTag
inConfig\ContentSecurityPolicy
to customize the CSP placeholders ({csp-script-nonce}
and{csp-style-nonce}
)Added the config
$autoNonce
inConfig\ContentSecurityPolicy
to disable the CSP placeholder replacementAdded the functions
csp_script_nonce()
andcsp_style_nonce()
to get nonce attributesSee Content Security Policy for details.
New View Decorators allow modifying the generated HTML prior to caching.
Added Validation Strict Rules. See Traditional and Strict Rules.
Added support for webp files to app/Config/Mimes.php.
RouteCollection::addRedirect()
can now use placeholders. See Redirecting Routes for details.- Debugbar enhancements
Debug toolbar is now using
microtime()
instead oftime()
.
Added a sample file for Preloading. See preload.php.
Changes
Update minimal PHP requirement to 7.4.
To make the default configuration more secure, auto-routing has been changed to disabled by default.
Validation. Changed generation of errors when using fields with a wildcard (*). Now the error key contains the full path. See Getting All Errors.
Validation::getError()
when using a wildcard will return all found errors matching the mask as a string.The current version of Content Security Policy (CSP) outputs one nonce for script and one for style tags. The previous version outputted one nonce for each tag.
The process of sending cookies has been moved to the
Response
class. Now theSession
class doesn’t send cookies, set them to the Response.
Deprecations
CodeIgniter\Database\SQLSRV\Connection::getError()
is deprecated. UseCodeIgniter\Database\SQLSRV\Connection::error()
instead.CodeIgniter\Debug\Exceptions::cleanPath()
andCodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath()
are deprecated. Use theclean_path()
function instead.CodeIgniter\Log\Logger::cleanFilenames()
andCodeIgniter\Test\TestLogger::cleanup()
are both deprecated. Use theclean_path()
function instead.CodeIgniter\Router\Router::setDefaultController()
is deprecated.The constant
SPARKED
in spark is deprecated. Use the$context
property inCodeIgniter\CodeIgniter
instead.CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces()
is deprecated, and no longer used.The constants
EVENT_PRIORITY_LOW
,EVENT_PRIORITY_NORMAL
andEVENT_PRIORITY_HIGH
are deprecated. Use the class constantsCodeIgniter\Events\Events::PRIORITY_LOW
,CodeIgniter\Events\Events::PRIORITY_NORMAL
andCodeIgniter\Events\Events::PRIORITY_HIGH
instead.
Bugs Fixed
The SQLSRV driver ignores the port value from the config.
See the repo’s CHANGELOG_4.2.md for a complete list of bugs fixed.