EVO HTML to PDF Converter automatically repeats the thead and tfoot of a HTML table in all the PDF pages where the table is rendered. This is the default behavior of the converter.
You can disable this behavior from API or you can disable it from HTML adding style="display: table-row-group" to thead and tfoot tags.
At the top of the demo you can choose the HTML document to convert which can be:
-
A HTML page from a given URL. The URL must be accessible from the computer where the converter runs. If the page requires authentication or if you are using a proxy server to access Internet
then you have to set the converter properties accordingly as described in documentation
-
A HTML string. When you convert a HTML string you also have the option to specify a base URL that will be used
by converter to resolve the relative URLs found in the HTML string to fully qualified URLs. If your HTML string uses only fully qualified URLs then this parameter is not necessary
The options you can set in this demo are:
Repeating Options
-
Repeat HTML Table Header. Using this option you can enable or disable the HTML table header repeating in PDF pages where the table is rendered
-
Repeat HTML Table Footer. Using this option you can enable or disable the HTML table footer repeating in PDF pages where the table is rendered


We, at The Roots India, believe that there comes a point in every individual’s life wherein he/she feels difficult to manage his/her personal goals with the goals of the organization. Since corporate are dealing with humans, it is very important for them to explore and enhance the Emotional Quotient of their employees other than the Intelligence Quotient. We are the only organization using performing arts as a medium for enhancement in a corporate set up. We work towards decreasing the attenuation rate by creating a sense of belongingness for the employees. We work towards creating an environment which not only elevates them as an employee but also at the individual level. Our modules based on performing arts work on communication skills, conflict management, team building, self confidence amongst many other with all segments of an organization, be it HR, Marketing, Finance, or Operations. Our modules are designed for every level of management from top to manager level and also cater to different age groups. With this the employees start experimenting with their ideas, exploring new dimensions, experiencing and expressing their view points which in turn empowers them as well as the organization. If you are looking for such a module for your organization, connect with us at therootssociety@gmail.com.


---
sort_order: 52
tei_id: rdx_191dd.p.idp6792656
annotation_count: 0
images:
small-thumbnail: https://readux.ecds.emory.edu/books/emory:191dd/pages/emory:rfdwg/mini-thumbnail/
json: https://readux.ecds.emory.edu/books/emory:191dd/pages/emory:rfdwg/info/
full: https://readux.ecds.emory.edu/books/emory:191dd/pages/emory:rfdwg/fs/
page: https://readux.ecds.emory.edu/books/emory:191dd/pages/emory:rfdwg/single-page/
thumbnail: https://readux.ecds.emory.edu/books/emory:191dd/pages/emory:rfdwg/thumbnail/
title: Page 52
number: 52
---
{% raw %}52 THE LAND-CLAISL{% endraw %}
{% raw %}" It wouldn't take her away from you at all, Mrs. Wyman,{% endraw %}
{% raw %}except during school hours. I would not propose to have her{% endraw %}
{% raw %}leave your protection at present, on any account. The Judge's{% endraw %}
{% raw %}wife first mentioned the matter to me, and I have since spoken{% endraw %}
{% raw %}to nearly all the oicners of c7iildren in the town, and they will{% endraw %}
{% raw %}be very glad to have a school. Of course it will not make{% endraw %}
{% raw %}Miss Newcome rich; but may furnish her money enough to{% endraw %}
{% raw %}buy her dolls' clothes—young ladies dress dolls until they are{% endraw %}
{% raw %}married, I believe, ]\Iiss Alicia':'''{% endraw %}
{% raw %}Alicia smiled at her roguish " brother " in a satisfied way,{% endraw %}
{% raw %}that showed she was uot put out by his raillery.{% endraw %}
{% raw %}" Waal, I duuno ; she must do as she likes, I reckon, Mary.{% endraw %}
{% raw %}It might take up her mind, aud be a good thing, after <all."{% endraw %}
{% raw %}" Oh, yes, if she wants to, she might try it when she gets{% endraw %}
{% raw %}strong," and Mrs. Wyman brushed some imaginary dust or{% endraw %}
{% raw %}crumbs out of her apron with much energy. " But, there's no{% endraw %}
{% raw %}need—noue at all. She's got money of her own—plenty of{% endraw %}
{% raw %}it just uow ; and I guess there's more where this come from."{% endraw %}
{% raw %}" Oh! dear ilrs. Wyman I / have no money.  You don't kuow as well as I{% endraw %}
{% raw %}do. He told me not to say any thing about it; but he's gone{% endraw %}
{% raw %}off now, and I don't know as he's ever coming back. I didn't{% endraw %}
{% raw %}*ell anybody, uot even Silas before. But I hate secrets, and{% endraw %}
{% raw %}can't keep them one bit better than the rest of my sex, A{% endraw %}
{% raw %}secret alw.ays makes me feel mean till it's off my mind; so{% endraw %}
{% raw %}I'm going to get this off, as soon as possible. There was a{% endraw %}
{% raw %}man here—a real gentleman—when you was sick, and out of{% endraw %}
{% raw %}your head, that had a great many questions to ask husband{% endraw %}
{% raw %}and me about you.  I told him you did, and you didn't; that is, the{% endraw %}
{% raw %}picture was much the same as you in most of the features,{% endraw %}
{% raw %}but handsomer and prouder a great deal. When he went{% endraw %}
{% raw %}away he wouldn't tell me his business, but gave me a purse{% endraw %}


vs.
Structure that both Humans and Computers can interpret
Three key components to Markup:
Opening and Closing Tags surround values.
<tag>element</tag>
Nesting: Tags can surround other tags.
<tag><inner>element</inner></tag>
Extra information associated with tags. These are key/value pairs that inside the opening tag. The value must be surrounded by quotation marks.
<tag attribute="value">element</tag>
Tags mark the beginning and end of elements. Elements are your content, and can either be text or another nested structure of tags.
<!DOCTYPE html>   <title>My Awesome Webpage</title>
Paragraphs

This is my first web paragraph.

It will be well designed!

Emphasis

So exciting! Note: I totally know what I'm doing.

So exciting! Note: I totally know what I'm doing.
Put the next thing
 on a new line.
Put the next thing
on a new line.

Above

Below

Above
Below

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5

Heading 6
 <h7>Heading 7</h7>

List Item One

List Item Two

List Item Three

List Item One

List Item Two

List Item Three

The anchor tag defines a link
It is the building block of the Internet!
Google
Use the href
attribute to specify the destination.
Images must be fetched from the server, they are included in web documents
with the img
tag, which will cause the Browser to get them and
place them in the document.

 1,1	 2,1

 1,2	 2,2

 This is a block

In this paragraph this is inline.


Here I am using three colors: white, light blue (with a tint of violet), and dark purple.
This is the second design after designing with two colors. At the beginning I couldn't design with three colors without having the guidance of two. That's why I did them in reversed order.
Once I had the interface with two colors, I decided to change just the text's color to the dark purple and remove the white border line around the content area. This will make white just a color for the buttons. Light blue violet for the background. And dark purple for the text.
I find that using three colors makes everything look better distributed and cleaner. Each color has like an specific job instead of several jobs like the two color design page where white was text, buttons, and content border, and where light blue was both button text and background.
...
asdfjkl;


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/July.20meeting.20in.20Amsterdam.html ---
Hey everyone! We're planning to have a small Lean users meeting in Amsterdam next month, July 10-12. Sorry for the late notice, this has been planned sort of last minute. @Kevin Buzzard @Patrick Massot @Floris van Doorn will join the local crowd, and anyone else who wants to make the trip is more than welcome.
We'll start Wednesday afternoon to allow for travel time that morning.
Do we have a participant list for this Amsterdam meeting next week? It would help to prepare for greater efficiency. @Jan-David Salchow for instance, will you be around?
I’m still avoiding lean while finishing my thesis ;) But I’m happy to show up on Thursday or Friday evening
Is there a schedule for the meeting somewhere? Or is it purely informal?
Oops, sorry Patrick, I missed your message from before. Jan-David, there's no official schedule, but we can keep you updated!
Hi, we had a brief discussion about tactics that people wish would be there. Here's the list
- Groebner basis: compute if something is an ideal
- Polya (nonlinarith
and field
)
- modules
: normalforms like ring
, abel
- continuity
: Proving continuity of (composition of) functions
- obtain
: combine have : \exists ...
with rcases this ...
- fix the WLOG
tactic
- Label for rcases
: rcases label : term with ...
- some tactic to collect have statements, e.g. something like have : ..., moreover have : ...., show ... by simp -- the last simp uses the last two collected hypotheses
Last updated: Apr 24 2020 at 19:02 UTC


Please choose the color key closest in color to the vertical stripe with the red dot. Click on Next Image when you have made your choice. The SUBMIT button will appear after all images have been viewed.


const val EXTRA_EXISTING_PERSON: String
Intent extra key for supplying a Person to this activity. The details of this person will be used as the first person of the marriage.
This should only be specified if a new marriage is being created (i.e. EXTRA_MARRIAGE is not being passed).


---
layout: post
title: early day part 2
date: '2006-02-02T17:01:00.001+01:00'
author: Steven Van Acker
tags:
modified_time: '2008-01-16T09:19:01.860+01:00'
blogger_id: tag:blogger.com,1999:blog-5513234137363262204.post-4760225034186033062
blogger_orig_url: http://www.singularity.be/2006/02/early-day-part-2_02.html
---
It is now 4PM
I started the afternoon by picking up the wash-drying machine. Then I went shopping for a digital camera, but the prices are too high.
I cleared the snow from the windshield of my car and drove around a bit. I'm getting more comfortable driving around with a car on gasoline.
I ended up at the insurance firm and asked about some stuff. I can open a saving account with 6% interest (under some terms), which sounds pretty cool. Adding theft insurance to our house would cost an extra 80 euro per year. And it seems I CAN get insurance for a car without having a drivers license. But since I probably won't get to drive around on my own any time soon, that's just an interesting fact and nothing exciting.
Now I'm too tired to do anything. I'll have some tea and then do nothing at all :)


Ask a question or send a comment to our customer service team.
If you have any problems using this page to send us a message,
please email us at<EMAIL_ADDRESS>{% extends 'public_secondary.html' %} {% load i18n %} {% block page_title %} Ask Us {% endblock %} {% load dw_tabs %} {% block body %} {% activetab "main_nav" "support" %} {{ block.super }} {% endblock %} {% block page_scss %} {{ block.super }} {% endblock %} {% load i18n %} {% block page_js %} {{ block.super }} {% endblock %} {% block page_breadcrumbs %} Home > Support > Ask Us {% endblock %} {% block main_content %}
Ask a question or send a comment to our customer service team.
If you have any problems using this page to send us a message,
please email us at support@datawinners.com


The Nordklim dataset 1.0 is a unique and useful achievement for climate analysis. It includes observations of twelve different climate elements from more than 100 stations in the Nordic region, in time span over 100 years. The project contractors were NORDKLIM/NORDMET on behalf of the National meteorological services in Denmark (DMI), Finland (FMI), Iceland (VI), Norway (DNMI) and Sweden (SMHI).
| Version: | 1.2 |
| Depends: | R (≥ 2.10) |
| Published: | 2015-07-19 |
| Author: | Heikki Tuomenvirta [aut], Achim Drebs [aut], Eirik Førland [aut], Ole Einar Tveito [aut], Hans Alexandersson [aut], Ellen Vaarby Laursen [aut], Trausti Jónsson [aut], Jose Gama [cre] |
| Maintainer: | Jose Gama <rxprtgama at gmail.com> |
| License: | GPL (≥ 3) |
| NeedsCompilation: | no |
| Citation: | nordklimdata1 citation info |
| CRAN checks: | nordklimdata1 results |
| Reference manual: | nordklimdata1.pdf |
| Package source: | nordklimdata1_1.2.tar.gz |
| Windows binaries: | r-devel: nordklimdata1_1.2.zip, r-release: nordklimdata1_1.2.zip, r-oldrel: nordklimdata1_1.2.zip |
| OS X binaries: | r-release: nordklimdata1_1.2.tgz, r-oldrel: nordklimdata1_1.2.tgz |
| Old sources: | nordklimdata1 archive |
Please use the canonical form https://CRAN.R-project.org/package=nordklimdata1 to link to this page.


SOPHIA Di MARTINO In Talks for LOKI Co-Starring Role - Report
by Chris Arrant, EditorSophia Di Martino is in talks for a co-starring role in Disney+'s Loki show, according to Variety. The actor reportedly beat out several other actors in what the Hollywood trade called a "highly contested" part.
Di Martino was last seen in the film Yesterday, but shares a connection with Loki star Tom Hiddleston in that they both appeared on the BBC One hospital drama Casualty - albeit two years apart.
Loki is scheduled to debut in 2021 on Disney+.


which
the
divine
Library
has
not
foreseen
and
which
in
one
of
its
secret
tongues
do
not
contain
a
terrible
meaning
No
one
can
articulate
a
syllable
which
is
not
filled
with
tenderness
and
fear,
which
is
not
in
one
of
these
languages
the
powerful
name
of
a
god
To
speak
is
to
fall
into
tautology
This
wordy
and
useless
epistle
already
exists
in
one
of
the
thirty
volumes
of
the
five
shelves
of
one
of
the
innumerable
hexagons
and
its
refutation
as
well
An
n
number
of
possible
languages
use
the
same
vocabulary
in
some
of
them
the
symbol
library
allows
the
correct
definition
a
ubiquitous
and
lasting
system
of
hexagonal
galleries
but
library
is
bread
or
pyramid
or
anything
else
and
these
seven
words
which
define
it
have
another
value
You
who
read
me
are
You
sure
of
understanding
my
language
)


--- title: "BOTANICAL ART PORTFOLIO" date: "2000-01-01 18:08:03 -06:00" categories: - adult - eh subtitle: "" event-notes: "" layout: "events" event-image: "botanical-art-portfolio.jpg" event-dates: "THURSDAY, FRIDAY & SATURDAY AUGUST 3-5" event-location: "Red Butte Garden Classroom" button-type: "register" tickets-link: "https://55218.blackbaudhosting.com/55218/Botanical-Art-Portfolio" tickets-button: "" registration-info: "N/A" instructor-info: "Janet Faught" member-cost: "$150" public-cost: "$187" published: false ---
THURSDAY & FRIDAY, AUGUST 3 & 4 @ 6-9PM
& SATURDAY AUGUST 5 @ 9AM-4PM
REGISTRATION REQUIRED
In this hands-on class, students will design and build a portfolio to hold 11 x 14 inch artwork or any papers of that size. The portfolio will protect these items from loss or damage. Students will learn bookbinding skills and techniques necessary to construct the portfolio.
BS Biology/Botany with Teaching Credential, Cal Poly Pomona
BFA Painting and Drawing, University of Utah
Instructor of Calligraphy, Freelance Calligrapher
Resource: Dick Blick Store 1025 East 2100 South Salt Lake City, Utah
Wed. 6 -9
1. Cut boards to square.
2. Cut and glue liner paper to cloth, Stack to dry.
3. Mark measurements on boards
4. Cut liner papers
Thurs. 6 – 9
1. Cut and glue spine pieces.
2. Make corner gage template
3. Cut decorative paper.
Saturday 9 - 4
1. Glue decorative paper to boards.
2. Cut and insert ribbon
3. Score and glue in flaps
4. Line Portfolio


WITNESS LIST Defense Affairs & State-Federal Relations Committee March 31, 2005-8:00A HB 865 On: Stanford, Col John (Texas National Guard) Registering, but not testifying: On: Deviney, Lee (Texas Lottery Commission) HB 1009 On: Brown, Judy (Tx DPS) Davis, Tommy (Texas Dept of Public Safety) Spinks, Margaret (Texas DPS/Driver License Division) HB 1391 For: Middleton, Glen (Self and Texas Paralyzed Veterans Association) Palmquist, Michael (American Legion Department of Texas) On: Moore, Paul (Texas Veterans Land Board) Registering, but not testifying: For: McCarthy, Amber (National Multiple Sclerosis Society) HB 2336 On: Giesbers, Lydia (Texas Military Facilities Commission) HB 2337 For: Neumann, Mike (AXALTO Inc.) Against: Henson, Scott (ACLU of TX) On: Brown, Judy (Texas Department of Public Safety) Davis, Tommy (Texas Dept of Public Safety) Registering, but not testifying: For: Craig, Michael (Houston Police Dept.) Macha, Barry (Self) Smith, Mike (Texas Department of Public Safety Officers Assn) On: Smith, Kim (Tx Dept of Public Safety) Spinks, Margaret (Texas Department of Public Safety/Driver License Division) HB 2340 For: Green, Connie (Self and City of Killeen) Jouett, Maureen (Self and Citizens of the City of Killeen) Smith, Michael (Texas Military Preparedness Commission - Office of the Governor) Registering, but not testifying: For: Oliver, Harold (Kelly USA) HB 2604 For: Palmquist, Michael (American Legion Department of Texas) On: Macias, Luis (Texas Workforce Commission) Registering, but not testifying: On: McKinny, John (Self) HB 3224 On: Deviney, Lee (Texas Lottery Commission) Dike, Jerry (TxDOT) Reimer, Bill (Texas Army National Guard) Stanford, Col John (Texas National Guard)


Your System
You did not enter a photo!
In this table you can see the scheme and all the components added in the previous step.
Components
{{component.name}}
Id
Component name
Type
Description
{{component.id}}
{{component.name}}
{{component.type}}
{{component.description}}
Threat Selection
Below there is a list of threats chosen according to the type of the component that you entered.
For each components select the appropriate threats.
Select/Deselect All
{{component.name}} ({{component.type}})
Threat name
Threat Description
Reason
{{threat.name}}
({{threat.source}})
{{threat.descr}}
{{threat.answer}}
Save
Next
{{user_name}} {{user_surname}} {{user_id}}


{% extends "registration/base.html" %} {% load bootstrap4 %} {% block title %}Request Unmetered Access{% endblock %} {% block meta_description %}Request unmetered access to the cases made available by the Caselaw Access Project{% endblock %} {% block main_content %}
If you are a research scholar and your work requires access to the full text of more than 500 cases per day, you may apply for unmetered access to the full text of all cases made available by the Caselaw Access Project.
To be eligible, you must demonstrate that you are a research scholar and you must enter into a special bulk access agreement with LexisNexis, which prohibits you from (1) using the cases for non-research or commercial purposes and (2) sharing bulk caselaw with others.
We offer several ways to obtain unmetered access:
If you are a member of the Harvard community with a Harvard email address, you can sign the Harvard bulk access agreement and you will immediately have full access from Harvard IP addresses.
If you are officially affiliated with an educational or non-profit research institution, sign this application to request access and your application will be reviewed shortly.
If you do not otherwise qualify for unmetered access, fill out this form to explain your standing as an independent research scholar and we will do our best to work with you or refer you to an appropriate organization.
Please contact us with any questions.
{% endblock %}


Returns an integer indicating the backends loaded successfully. More...
Functions | |
| AFAPI af_err | af_get_available_backends (int *backends) |
| Returns a flag of all available backends. | |
| AFAPI int | getAvailableBackends () |
| Returns a flag of all available backends. | |
Returns an integer indicating the backends loaded successfully.
The number returned denotes the backends available according to the table:
| Return Value | Backends Available |
|---|---|
| 0 | None |
| 1 | CPU |
| 2 | CUDA |
| 3 | CPU and CUDA |
| 4 | OpenCL |
| 5 | CPU and OpenCL |
| 6 | CUDA and OpenCL |
| 7 | CPU, CUDA and OpenCL |
To convert the integer back into bools for each device, use the following code
Returns a flag of all available backends.
| [out] | backends | A flag of all available backends. Use the &(and) operator to check if a particular backend is available |
| AFAPI int getAvailableBackends | ( | ) |
Returns a flag of all available backends.


Marks & Spencer hires ex-Tesco exec to fix struggling clothing division
by Joe CurtisMarks & Spencer has named a new clothing boss to replace its ousted former head of the struggling division.
Tesco’s former F&F clothing chief Richard Price will join as M&S’s new managing director of clothing home after Jill McDonald left the role in July.
Read more: Poor clothing sales knock M&S’s half-year profit lower
Marks & Spencer chief executive Steve Rowe criticised the unit for availability problems at the time.
Rowe said today: “Richard’s career spans some of the UK’s top clothing brands and he has a proven track record of delivering growth through stylish, great value product. We are building a team of world class talent in clothing and home and, with Richard coming on board, I am confident that the speed and scale of the transformation of the business will accelerate.”
The CEO took control of the embattled unit after McDonald’s departure to focus on turning it around.
However, poor clothing sales still knocked Marks & Spencer’s profit down 17 per cent in its latest half-year results earlier this month.
Price previously worked at M&S for seven years until he left in 2012 to become the managing director of failed department store chain BHS.
During his previous stint at the company he oversaw a partnership with Savile Row tailor Richard James and was promoted to lead its menswear unit in 2008.
“Marks & Spencer Clothing & Home is a great business which still has strong brand affection and huge potential,” Price said today.
Read more: M&S’s ex-clothing boss has a new job where she’s CEO
“I left the business because I felt it was drifting in the wrong direction but now feel we have a real chance to make it special again. The new team has already started to improve product and value and I am looking forward to working with them.”
Price will not start until next year, with a start date yet to be set.
Marks & Spencer’s share price lifted 1.5 per cent to 189.7p following the announcement.


These examples are based on CSS: text shadows by Bert Bos. See the CSS2 text-shadow specification for syntax. Please note that offsets can only be defined in pixels and that blur is not supported at all.
Additional limitations since the release of Internet Explorer 8: One element may only have two shadows, and they may not have varying levels of opacity.


Go to the source code of this file.
Macros | |
| #define | LE_KILL_CLIENT(formatString, ...) |
Typedefs | |
| typedef struct le_msg_Protocol * | le_msg_ProtocolRef_t |
| typedef struct le_msg_Interface * | le_msg_InterfaceRef_t |
| typedef struct le_msg_Service * | le_msg_ServiceRef_t |
| typedef struct le_msg_ClientInterface * | le_msg_ClientInterfaceRef_t |
| typedef struct le_msg_Session * | le_msg_SessionRef_t |
| typedef struct le_msg_Message * | le_msg_MessageRef_t |
| typedef struct le_msg_SessionEventHandler * | le_msg_SessionEventHandlerRef_t |
| typedef void(* | le_msg_SessionEventHandler_t) (le_msg_SessionRef_t sessionRef, void *contextPtr) |
| typedef void(* | le_msg_ReceiveHandler_t) (le_msg_MessageRef_t msgRef, void *contextPtr) |
| typedef void(* | le_msg_ResponseCallback_t) (le_msg_MessageRef_t msgRef, void *contextPtr) |
Legato Low-Level Messaging API include file.
Copyright (C) Sierra Wireless Inc. Use of this work is subject to license.
| #define LE_KILL_CLIENT | ( | formatString, | |
| ... | |||
| ) |
Logs an error message (at EMERGENCY level) and:
| typedef struct le_msg_ClientInterface* le_msg_ClientInterfaceRef_t |
Reference to a client's service instance.
| typedef struct le_msg_Interface* le_msg_InterfaceRef_t |
Reference to an interface's service instance.
| typedef struct le_msg_Message* le_msg_MessageRef_t |
Reference to a message.
| typedef struct le_msg_Protocol* le_msg_ProtocolRef_t |
Reference to a protocol.
| typedef void(* le_msg_ReceiveHandler_t) (le_msg_MessageRef_t msgRef, void *contextPtr) |
Receive handler function prototype.
See le_msg_SetSessionRecvHandler() and le_msg_SetServiceRecvHandler().
| msgRef | [in] Reference to the received message. Don't forget to release this using le_msg_ReleaseMsg() when you are finished with it. |
| contextPtr | [in] Opaque contextPtr value provided when the handler was registered. |
| typedef void(* le_msg_ResponseCallback_t) (le_msg_MessageRef_t msgRef, void *contextPtr) |
Asynchronous response callback function prototype.
| msgRef | [in] Reference to the received response message, or NULL if the transaction failed and no response was received. If not NULL, don't forget to release it by calling le_msg_ReleaseMsg() when you are finished with it. |
| contextPtr | [in] Opaque contextPtr value passed to le_msg_RequestResponse(). |
| typedef struct le_msg_Service* le_msg_ServiceRef_t |
Reference to a server's service instance.
| typedef void(* le_msg_SessionEventHandler_t) (le_msg_SessionRef_t sessionRef, void *contextPtr) |
Handler function prototype for handlers that take session references as their arguments.
See le_msg_SetSessionCloseHandler(), le_msg_AddServiceOpenHandler(), and le_msg_AddServiceCloseHandler().
| sessionRef | [in] Reference to the session that experienced the event. |
| contextPtr | [in] Opaque contextPtr value provided when the handler was registered. |
| typedef struct le_msg_SessionEventHandler* le_msg_SessionEventHandlerRef_t |
Reference to a handler (call-back) function for events that can occur on a service (such as opening and closing of sessions and receipt of messages).
| typedef struct le_msg_Session* le_msg_SessionRef_t |
Reference to a client-server session.
| void le_msg_AddRef | ( | le_msg_MessageRef_t | msgRef | ) |
Adds to the reference count on a message object.
| [in] | msgRef | Reference to the message. |
| le_msg_SessionEventHandlerRef_t le_msg_AddServiceCloseHandler | ( | le_msg_ServiceRef_t | serviceRef, |
| le_msg_SessionEventHandler_t | handlerFunc, | ||
| void * | contextPtr | ||
| ) |
Registers a function to be called whenever one of this service's sessions is closed by the client.
| [in] | serviceRef | Reference to the service. |
| [in] | handlerFunc | Handler function. |
| [in] | contextPtr | Opaque pointer value to pass to handler. |
| le_msg_SessionEventHandlerRef_t le_msg_AddServiceOpenHandler | ( | le_msg_ServiceRef_t | serviceRef, |
| le_msg_SessionEventHandler_t | handlerFunc, | ||
| void * | contextPtr | ||
| ) |
Registers a function to be called when clients open sessions with this service.
| [in] | serviceRef | Reference to the service. |
| [in] | handlerFunc | Handler function. |
| [in] | contextPtr | Opaque pointer value to pass to handler. |
| void le_msg_AdvertiseService | ( | le_msg_ServiceRef_t | serviceRef | ) |
Makes a given service available for clients to find.
| [in] | serviceRef | Reference to the service. |
| void le_msg_CloseSession | ( | le_msg_SessionRef_t | sessionRef | ) |
Terminates a session.
| [in] | sessionRef | Reference to the session. |
| le_msg_MessageRef_t le_msg_CreateMsg | ( | le_msg_SessionRef_t | sessionRef | ) |
Creates a message to be sent over a given session.
| [in] | sessionRef | Reference to the session. |
| le_msg_ServiceRef_t le_msg_CreateService | ( | le_msg_ProtocolRef_t | protocolRef, |
| const char * | interfaceName | ||
| ) |
Creates a service that is accessible using a protocol.
| [in] | protocolRef | Reference to the protocol to be used. |
| [in] | interfaceName | Server-side interface name. |
| le_msg_SessionRef_t le_msg_CreateSession | ( | le_msg_ProtocolRef_t | protocolRef, |
| const char * | interfaceName | ||
| ) |
Creates a session that will make use of a protocol to talk to a service on a given client interface.
| [in] | protocolRef | Reference to the protocol to be used. |
| [in] | interfaceName | Name of the client-side interface. |
| void le_msg_DeleteService | ( | le_msg_ServiceRef_t | serviceRef | ) |
Deletes a service. Any open sessions will be terminated.
| [in] | serviceRef | Reference to the service. |
| void le_msg_DeleteSession | ( | le_msg_SessionRef_t | sessionRef | ) |
Deletes a session. This will end the session and free up any resources associated with it. Any pending request-response transactions in this session will be terminated. If the far end has registered a session close handler callback, it will be called.
| [in] | sessionRef | Reference to the session. |
| le_result_t le_msg_GetClientProcessId | ( | le_msg_SessionRef_t | sessionRef, |
| pid_t * | processIdPtr | ||
| ) |
Fetches the user PID of the client at the far end of a given IPC session.
| [in] | sessionRef | Reference to the session. |
| [out] | processIdPtr | Ptr to where the result is to be stored on success. |
| le_result_t le_msg_GetClientUserCreds | ( | le_msg_SessionRef_t | sessionRef, |
| uid_t * | userIdPtr, | ||
| pid_t * | processIdPtr | ||
| ) |
Fetches the user credentials of the client at the far end of a given IPC session.
| [in] | sessionRef | Reference to the session. |
| [out] | userIdPtr | Ptr to where the uid is to be stored on success. |
| [out] | processIdPtr | Ptr to where the pid is to be stored on success. |
| le_result_t le_msg_GetClientUserId | ( | le_msg_SessionRef_t | sessionRef, |
| uid_t * | userIdPtr | ||
| ) |
Fetches the user ID of the client at the far end of a given IPC session.
| [in] | sessionRef | Reference to the session. |
| [out] | userIdPtr | Ptr to where the result is to be stored on success. |
| int le_msg_GetFd | ( | le_msg_MessageRef_t | msgRef | ) |
Fetches a received file descriptor from the message.
| [in] | msgRef | Reference to the message. |
| const char* le_msg_GetInterfaceName | ( | le_msg_InterfaceRef_t | interfaceRef | ) |
Fetches a pointer to the name of an interface.
| [in] | interfaceRef | Reference to the interface. |
| le_msg_ProtocolRef_t le_msg_GetInterfaceProtocol | ( | le_msg_InterfaceRef_t | interfaceRef | ) |
Fetches a reference to the protocol supported by a specified interface.
| [in] | interfaceRef | Reference to the interface. |
| size_t le_msg_GetMaxPayloadSize | ( | le_msg_MessageRef_t | msgRef | ) |
Gets the size, in bytes, of the message payload memory buffer.
| [in] | msgRef | Reference to the message. |
| void* le_msg_GetPayloadPtr | ( | le_msg_MessageRef_t | msgRef | ) |
Gets a pointer to the message payload memory buffer.
| [in] | msgRef | Reference to the message. |
| const char* le_msg_GetProtocolIdStr | ( | le_msg_ProtocolRef_t | protocolRef | ) |
Gets the unique identifier string of the protocol.
| [in] | protocolRef | Reference to the protocol. |
| size_t le_msg_GetProtocolMaxMsgSize | ( | le_msg_ProtocolRef_t | protocolRef | ) |
Gets the protocol's maximum message size.
| [in] | protocolRef | Reference to the protocol. |
| le_msg_ProtocolRef_t le_msg_GetProtocolRef | ( | const char * | protocolId, |
| size_t | largestMsgSize | ||
| ) |
Gets a reference to refer to a particular version of a particular protocol.
| [in] | protocolId | String uniquely identifying the the protocol and version. |
| [in] | largestMsgSize | Size (in bytes) of the largest message in the protocol. |
| void* le_msg_GetServiceContextPtr | ( | le_msg_ServiceRef_t | serviceRef | ) |
Fetches the opaque context value (void pointer) associated with a specified service using le_msg_SetServiceContextPtr().
| [in] | serviceRef | Reference to the service. |
| le_msg_MessageRef_t le_msg_GetServiceRxMsg | ( | void | ) |
Check if the calling thread is currently running a Service's message receive handler; if so, return a reference to the message object being handled.
| le_msg_SessionRef_t le_msg_GetSession | ( | le_msg_MessageRef_t | msgRef | ) |
Gets a reference to the session to which a given message belongs.
| [in] | msgRef | Reference to the message. |
| void* le_msg_GetSessionContextPtr | ( | le_msg_SessionRef_t | sessionRef | ) |
Fetches the opaque context value (void pointer) that was set earlier using le_msg_SetSessionContextPtr().
| [in] | sessionRef | Reference to the session. |
| le_msg_InterfaceRef_t le_msg_GetSessionInterface | ( | le_msg_SessionRef_t | sessionRef | ) |
Fetches a reference to the interface that is associated with a given session.
| [in] | sessionRef | Reference to the session. |
| le_msg_ProtocolRef_t le_msg_GetSessionProtocol | ( | le_msg_SessionRef_t | sessionRef | ) |
Fetches a reference to the protocol that is being used for a given session.
| [in] | sessionRef | Reference to the session. |
| void le_msg_HideService | ( | le_msg_ServiceRef_t | serviceRef | ) |
Makes a specified service unavailable for clients to find without terminating any ongoing sessions.
| [in] | serviceRef | Reference to the service. |
| bool le_msg_NeedsResponse | ( | le_msg_MessageRef_t | msgRef | ) |
Checks whether a message requires a response or not.
| [in] | msgRef | Reference to the message. |
| void le_msg_OpenSession | ( | le_msg_SessionRef_t | sessionRef, |
| le_msg_SessionEventHandler_t | callbackFunc, | ||
| void * | contextPtr | ||
| ) |
Opens a session with a service, providing a function to be called-back when the session is open.
| [in] | sessionRef | Reference to the session. |
| [in] | callbackFunc | Function to be called when open. NULL if no notification is needed. |
| [in] | contextPtr | Opaque value to pass to the callback. |
| void le_msg_OpenSessionSync | ( | le_msg_SessionRef_t | sessionRef | ) |
Synchronously open a session with a service. Blocks until the session is open.
This function logs a fatal error and terminates the calling process if unsuccessful.
| [in] | sessionRef | Reference to the session. |
| void le_msg_ReleaseMsg | ( | le_msg_MessageRef_t | msgRef | ) |
Releases a message object, decrementing its reference count. If the reference count has reached zero, the message object is deleted.
| [in] | msgRef | Reference to the message. |
| void le_msg_RemoveServiceHandler | ( | le_msg_SessionEventHandlerRef_t | handlerRef | ) |
Remove a function previously registered by le_msg_AddServiceOpenHandler or le_msg_AddServiceCloseHandler.
| [in] | handlerRef | Reference to a previously call of le_msg_AddServiceCloseHandler() |
| void le_msg_RequestResponse | ( | le_msg_MessageRef_t | msgRef, |
| le_msg_ResponseCallback_t | handlerFunc, | ||
| void * | contextPtr | ||
| ) |
Requests a response from a server by sending it a request. Doesn't block. Instead, provides a callback function to be called when the response arrives or the transaction terminates without a response (due to the session terminating or the server deleting the request without responding).
| [in] | msgRef | Reference to the request message. |
| [in] | handlerFunc | Function to be called when transaction done. |
| [in] | contextPtr | Opaque value to be passed to handler function. |
| le_msg_MessageRef_t le_msg_RequestSyncResponse | ( | le_msg_MessageRef_t | msgRef | ) |
Requests a response from a server by sending it a request. Blocks until the response arrives or until the transaction terminates without a response (i.e., if the session terminates or the server deletes the request without responding).
| [in] | msgRef | Reference to the request message. |
| void le_msg_Respond | ( | le_msg_MessageRef_t | msgRef | ) |
Sends a response back to the client that send the request message.
Takes a reference to the request message. Copy the response payload (if any) into the same payload buffer that held the request payload, then call le_msg_Respond().
The messaging system will delete the message automatically when it's finished sending the response.
| [in] | msgRef | Reference to the request message. |
| void le_msg_Send | ( | le_msg_MessageRef_t | msgRef | ) |
Sends a message. No response expected.
| [in] | msgRef | Reference to the message. |
| void le_msg_SetFd | ( | le_msg_MessageRef_t | msgRef, |
| int | fd | ||
| ) |
Sets the file descriptor to be sent with this message.
This file descriptor will be closed when the message is sent (or when it is deleted without being sent).
At most one file descriptor is allowed to be sent per message.
| [in] | msgRef | Reference to the message. |
| [in] | fd | File descriptor. |
| void le_msg_SetServiceContextPtr | ( | le_msg_ServiceRef_t | serviceRef, |
| void * | contextPtr | ||
| ) |
Associates an opaque context value (void pointer) with a given service that can be retrieved later using le_msg_GetServiceContextPtr().
| [in] | serviceRef | Reference to the service. |
| [in] | contextPtr | Opaque value to be returned by le_msg_GetServiceContextPtr(). |
| void le_msg_SetServiceRecvHandler | ( | le_msg_ServiceRef_t | serviceRef, |
| le_msg_ReceiveHandler_t | handlerFunc, | ||
| void * | contextPtr | ||
| ) |
Registers a function to be called when messages are received from clients via sessions that they have open with this service.
| [in] | serviceRef | Reference to the service. |
| [in] | handlerFunc | Handler function. |
| [in] | contextPtr | Opaque pointer value to pass to the handler. |
| void le_msg_SetSessionCloseHandler | ( | le_msg_SessionRef_t | sessionRef, |
| le_msg_SessionEventHandler_t | handlerFunc, | ||
| void * | contextPtr | ||
| ) |
Sets the handler callback function to be called when the session is closed from the other end. A local termination of the session will not trigger this callback.
The handler function will be called by the Legato event loop of the thread that created the session.
| [in] | sessionRef | Reference to the session. |
| [in] | handlerFunc | Handler function. |
| [in] | contextPtr | Opaque pointer value to pass to handler. |
| void le_msg_SetSessionContextPtr | ( | le_msg_SessionRef_t | sessionRef, |
| void * | contextPtr | ||
| ) |
Sets an opaque context value (void pointer) that can be retrieved from that session later using le_msg_GetSessionContextPtr().
| [in] | sessionRef | Reference to the session. |
| [in] | contextPtr | Opaque value to be returned by le_msg_GetSessionContextPtr(). |
| void le_msg_SetSessionRecvHandler | ( | le_msg_SessionRef_t | sessionRef, |
| le_msg_ReceiveHandler_t | handlerFunc, | ||
| void * | contextPtr | ||
| ) |
Sets the receive handler callback function to be called when a non-response message arrives on this session.
The handler function will be called by the Legato event loop of the thread that created the session.
| [in] | sessionRef | Reference to the session. |
| [in] | handlerFunc | Handler function. |
| [in] | contextPtr | Opaque pointer value to pass to the handler. |
| le_result_t le_msg_TryOpenSessionSync | ( | le_msg_SessionRef_t | sessionRef | ) |
Synchronously open a session with a service. Does not wait for the session to become available if not available..
le_msg_TryOpenSessionSync() differs from le_msg_OpenSessionSync() in that le_msg_TryOpenSessionSync() will not wait for a server session to become available if it is not already available at the time of the call. That is, if the client's interface is not bound to any service, or if the service that it is bound to is not currently advertised by the server, then le_msg_TryOpenSessionSync() will return an error code, while le_msg_OpenSessionSync() will wait until the binding is created or the server advertises the service (or both).
| [in] | sessionRef | Reference to the session. |


Apache vs nginx web server comparison
04 Apr 2014Using php-fpm seems to be a good idea so I wanted to check how thing stand regarding web server performance. Apache is standard and I’ve being using it for lots of years, but read that nignx should be faster and more stable. Version of apache is 2.4.7 and nignx’s is 1.4.7.
if you want to use apache 2.4 with the standard, let’s say old mod_php, you’d need to switch to mod_mpm_prefork (as well install the modules/libphp5.so and include the php5_module.conf file), whereas using it with php-fpm is allowed with the new mod_mpm_event which stands for multi processing module. Installing the php-fpm and making it work with the web server should give “FPM/FastCGI” under Server API in php info.
Nginx is event driven and apache is process driven, the first doesn’t create new process for every request, apache does. Nginx also should be consuming less memory and should be faster serving static pages.
Environment is set using Arch Linux as application server and CentOS with database server with oracle12c. Arch is the host and CentOS is the VM.
So, I’ve tested both of them using the php-fpm module and SugarCRM and this is what I got:
ab -n 100 -c 10 http://<IP_ADDRESS>/mkt/index.php?module=Accounts&action=DetailView&record=7c8b058e-edb7-afa2-e61e-533d6dc29960
Lowers means better or less time for processing per request. The results show that using apache is better then using ngnix with php-fpm for SugarCRM. Also, here’s how it is with apache only using different mode, once with standard mod_php and with php-fpm.
It seems like php-fpm is a lot faster and mod_php is catching up only for bigger values of ‘c’ and only if all request tested are sent in parallel.


exploratory-modelling.Rmd
library(brolgar)
It can be useful to fit a model to explore your data. One technique is to fit a linear model for each group in a dataset. For example, you could fit a linear model for each key in the data.
brolgar
provides a helper function to help with this, called key_slope()
.
key_slope()
returns the intercept and slope estimate for each key, given a linear model formula. We can get the number of observations, and slope information for each individual to identify those that are decreasing over time.
key_slope(wages,ln_wages ~ xp)
#> # A tibble: 888 x 3
#> id .intercept .slope_xp
#> <int> <dbl> <dbl>
#> 1 31 1.41 0.101
#> 2 36 2.04 0.0588
#> 3 53 2.29 -0.358
#> 4 122 1.93 0.0374
#> 5 134 2.03 0.0831
#> 6 145 1.59 0.0469
#> 7 155 1.66 0.0867
#> 8 173 1.61 0.100
#> 9 206 1.73 0.180
#> 10 207 1.62 0.0884
#> # … with 878 more rows
We can then join these summaries back to the data:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
wages_slope <- key_slope(wages,ln_wages ~ xp) %>%
left_join(wages, by = "id")
wages_slope
#> # A tibble: 6,402 x 11
#> id .intercept .slope_xp ln_wages xp ged xp_since_ged black
#> <int> <dbl> <dbl> <dbl> <dbl> <int> <dbl> <int>
#> 1 31 1.41 0.101 1.49 0.015 1 0.015 0
#> 2 31 1.41 0.101 1.43 0.715 1 0.715 0
#> 3 31 1.41 0.101 1.47 1.73 1 1.73 0
#> 4 31 1.41 0.101 1.75 2.77 1 2.77 0
#> 5 31 1.41 0.101 1.93 3.93 1 3.93 0
#> 6 31 1.41 0.101 1.71 4.95 1 4.95 0
#> 7 31 1.41 0.101 2.09 5.96 1 5.96 0
#> 8 31 1.41 0.101 2.13 6.98 1 6.98 0
#> 9 36 2.04 0.0588 1.98 0.315 1 0.315 0
#> 10 36 2.04 0.0588 1.80 0.983 1 0.983 0
#> # … with 6,392 more rows, and 3 more variables: hispanic <int>,
#> # high_grade <int>, unemploy_rate <dbl>
And highlight those individuals with a negative slope using gghighlight
:
library(gghighlight)
#> Loading required package: ggplot2
wages_slope %>%
as_tibble() %>% # workaround for gghighlight + tsibble
ggplot(aes(x = xp,
y = ln_wages,
group = id)) +
geom_line() +
gghighlight(.slope_xp < 0)
keys_near()
We might want to further summarise our exploratory modelling by finding those slopes that are near a five number summary values:
summary(wages_slope$.slope_xp)
#> Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
#> -4.57692 -0.00189 0.04519 0.04490 0.08458 13.21569 38
Finding those groups that are near these values can be surprisingly challenging!
brolgar
makes it easier by providing the keys_near()
function. You tell it what the key is, what variable you want to summarise by, and then by default it returns those keys near the five number summary. Let’s return the keys near the .slope_xp
:
wages_slope %>%
keys_near(key = id,
var = .slope_xp)
#> Warning: Outer names are only allowed for unnamed scalar atomic inputs
#> # A tibble: 31 x 5
#> id .slope_xp stat stat_value stat_diff
#> <int> <dbl> <fct> <dbl> <dbl>
#> 1 7918 -4.58 min -4.58 0
#> 2 7918 -4.58 min -4.58 0
#> 3 7918 -4.58 min -4.58 0
#> 4 2092 -0.00189 q_25 -0.00189 0
#> 5 2092 -0.00189 q_25 -0.00189 0
#> 6 2092 -0.00189 q_25 -0.00189 0
#> 7 2092 -0.00189 q_25 -0.00189 0
#> 8 2092 -0.00189 q_25 -0.00189 0
#> 9 2092 -0.00189 q_25 -0.00189 0
#> 10 6863 0.0452 med 0.0452 0
#> # … with 21 more rows
Here it returns the id
, the .slope_xp
, and the statistic that it was closest to, and what the difference between the slope_xp and the statistic.
You can visualise these summary keys by joining them back to the data:
wages_slope %>%
keys_near(key = id,
var = .slope_xp) %>%
left_join(wages, by = "id") %>%
ggplot(aes(x = xp,
y = ln_wages,
group = id,
colour = stat)) +
geom_line()
#> Warning: Outer names are only allowed for unnamed scalar atomic inputs
You can read more about keys_near()
in the Identifying interesting observations vignette.


users
and posts
.
name
is
uppercased before the request reaches the POST
or
PUT
route handler.
x Fork and Clone this repository. x CD into the folder where you cloned the repository. x Do your magic!
The /data/helpers
folder includes helper files that you can
use to manage the persistence of users and posts data.
These files are userDb.js
and postDb.js
. Both
files publish the following api:
get()
: calling find returns a promise that resolves to an
array of all the resources contained in the database. If you pass an
id
to this method it will return the resource with that id
if found.
insert()
: calling insert passing it a resource object will
add it to the database and return an object with the id of the inserted
resource. The object looks like this: { id: 123 }
.
update()
: accepts two arguments, the first is the
id
of the resource to update and the second is an object
with the changes
to apply. It returns the count of updated
records. If the count is 1 it means the record was updated correctly.
remove()
: the remove method accepts an id
as
it’s first parameter and, upon successfully deleting the resource from
the database, returns the number of records deleted.
The userDb.js
helper includes an extra method called
getUserPosts()
that when passed a user id as it’s only
argument, returns a list of all the posts for the user.
All helper methods return a promise.
The schemas (properties and data type of each property) used to
store and retrieve the resources inside the included database
(lambda.sqlite3
) is described below.
We have provided test data for the resources.
Now that we have a way to add, update, remove and retrieve data from the provided database, it is time to work on the API.
package.json
to keep a
record of our dependencies.
create-react-app
to create an application inside the
root folder, name it client
.
/api/users
endpoint in the API and show the list of users.
/users/:id
route to show the user details.


--- products: new: limit: {{theme_settings.homepage_new_products_count}} featured: limit: {{theme_settings.homepage_featured_products_count}} top_sellers: limit: {{theme_settings.homepage_top_products_count}} carousel: {{theme_settings.homepage_show_carousel}} blog: recent_posts: limit: {{theme_settings.homepage_blog_posts_count}} --- {{#partial "hero"}} {{#if carousel}} {{> components/carousel}} {{/if}} {{{snippet 'home_content'}}} {{/partial}} {{#partial "full"}} {{#each shipping_messages}} {{> components/common/alert-info message}} {{/each}}


--- title: DwarfMaster website ---
Welcome to my blog!
See the about for more details. Here are the last 5 posts :
The complete list is here.


Hotel in Manhattan, New York 1.5 km from center Located 984 feet from Times Square in New York, LUMA Hotel - Times Square features a restaurant and free WiFi throughout the property. Guests can enjoy the on-site bar.
Our Luma branch is open from 11am to 10:30pm, every day
Call us to make a table reservation , for directions to the restaurant , or to have us deliver food direct to your door.
Reservations/Directions/Delivery
Phone (1) 6549-3242, (1) 43534-4532, +1-9252829206


{% extends "base.html" %} {% load i18n %} {% block title %}{% trans "Logged out" %}{% endblock %} {% block content %}
{% blocktrans %}Thanks for stopping by; when you come back, don't forget to log in again.{% endblocktrans %}


Copyright © 1996-2017 Arch D. Robison
Last Revision: Mar. 6, 2017
The Mac OS X version of Seismic Duck 2.1 should run on any Mac with OS X 10.7 or later that supports up to 1920 x 1080 resolution. Higher resolutions are not yet supported on Mac OS X. Seismic Duck 2.1 has been tested on:
The Mac OS X version should not be confused with the earlier "Seismic Duck 1.6" for MacOS 7.1 and 8.0 that exists in repositories of old Mac software.
| Seismic Duck | the application |
| LICENSE.rtf | the license |
| README.html | this duckumentation |
| images | folder of images used by README.html |
The application is unsigned ("unidentified developer"), so you may need to use "control click" to run it the first time.
Read the rest of the documentation to understand what is happening.
An upward curve like this is called an anticline. A downward curve is called a syncline.
Hydrocarbons (gas, oil, asphalt, coal) come from natural chemical transformation of old dead plants buried in rock. Over a long time, gas and oil migrate upwards through porous rock until they reach a layer of non-porous cap rock. They collect at a high point. Below is a diagram showing gas, oil, and water trapped under a cap rock. Gas is at the top because it least dense. Water is at the bottom because it is most dense. The program uses similar color coding.
Another common structural trap for gas and oil is where the porous rock is terminated by a fault. Traps in the current version of Seismic Duck are always anticlines.
It should be understood that despite the fact that oil reservoirs are also called pools, the reservoir is not like a pool of water, but mostly rock. You should think of it as a dirty hard sponge. Applying great pressure to the sponge causes some of the gas and oil to flow out. The weight of the overlying rock provides most of the pressure necessary to extract oil. Sometimes the pressure is so great that the oil flow out by itself. In extreme cases its blows out of the well. Though wells always have spectacular blowouts in the movies, modern drilling goes to great pains to avoid blowouts.
Asphalt and coal do not flow. You must dig for those.
More precisely, reflection occurs when the acoustical impedance changes. The acoustical impedance of a rock is the density of the rock multiplied by the velocity of sound in the rock. For example, cap rock and porous rock have difference acoustical impedances. The boundary between the cap rock and porous rock partially reflects incident sound waves. Thus the depth of an underground structure can be found by creating a sound at the surface, and timing how long it takes to receive a reflection. The time it takes for the sound to reach the boundary and come back is called the (two-way) travel time. The depth of a boundary can be estimated from the travel time and velocity of sound in the rock. For instance, if the speed of sound is 3 km/sec in the rock and takes 4 seconds to make it from the surface to the boundary and back, then the boundary must be 6 km deep.
In reality there are multiple reflection paths and varying rock velocities to consider. In modern oil exploration, high-performance computers compute the subsurface structure from the reflected waves. But in the old days, there were no computers and geologists examined raw seismic data. Seismic Duck brings back these old days, and makes you an old-fashioned prospector for oil.
If all this sounds too difficult, do not despair. Though careful quantitative calculations are necessary in practice, you will not need them in Seismic Duck. The key in Seismic Duck will be interpreting patterns in seismograms (recordings of waves). Even a bright preschooler can learn to play it with some coaching on what patterns are important.
The screen has three major portions:
Auto Gain, Subsurface view, and Pause: These keys toggle features shown in the table below. The view toggles are inactive in game mode.
| Key | Toggles |
|---|---|
| a | Auto gain on seismogram |
| g | Geology view |
| r | Reservoir view |
| s | Seismic view |
| p | Pause |
Duck Control: These keys cause the duck to act.
| Key | Duck Action |
|---|---|
| Z | Move left |
| X | Move right |
| space | Clap feet |
Geology: Shows the underground layers of rock, and (if present) ocean above the rock.
Reservoir: Shows the contents of the reservoir. The color code is red/green/blue for gas/oil/water as in the earlier picture, and black for empty. The colors get dimmer as you drain the reservoir.
Seismic: Shows seismic pressure waves. These are the waves created when the duck creates a shot by shooting its air gun. The pressure shown is relative to the static pressure within the rock.
Color: Brings up sliders that control how data is displayed.
Speed: Brings up sliders that control speeds. The Frame Rate Limit slider sets a limit on frames per second. The default limit is the frame rate of your monitor. The limit can be lowered to 0.5, which causes the program to update the frame every two monitor frames, or raised to unlimited. Your computer may not actually reach the limit. The Wave Speed slider controls how far waves move per frame.
Note for Hardware Owls: Press F to toggle display of performance information, which looks like:
The number of hardware threads is typically 1 or 2, depending on your processor speed and display size, unless the Frame Rate Limit slider is set to ∞, in which case the value will rise to your hardware's maximum capability. The load is a time-varying value between 0 and 1 that estimates what fraction of time Seismic Duck is computing versus idling.
Auto Gain Control: When automatic gain control is disabled, the seismogram gain is fixed at 1 and the signal is recorded as received. When enabled, the seismogram gain is amplified (or attenuated) to make the recorded root-mean-squawk constant. The gain is limited to 16x. The advantage of automatic gain control is that it lets you see weak reflections. The disadvantage is that it introduces artifacts. Most noticeably, automatic gain control causes the initial signal from a shot to not look triangular, because the gain is rapidly changing. Therefore, I recommend that you keep it off until you have mastered the basics.
Geology: The geology sliders let you change various parameters of the geological model. The water popup lets you do offshore exploration. Adding water makes it much more challenging, because there is a strong reflection off the water bottom. Notice that waves travel much more slowly in the water than in the cap rock. The dip popup selects how steep the anticlines are. The folding popup selects the complexity of the anticlines. Simple folding creates a single anticline. Moderate folding creates up to three anticlines. Complex folding creates up to five anticlines. No folding results in no anticlines, and hence nowhere for hydrocarbons to collect!
Shot: The shot sliders let you change the characteristics of the "shot" that creates the waves. The duck generates shots by clapping is feet, and is not only talented, but a bit musical minded.
P waves vs. S waves: There are really two major kinds of seismic waves: pressure waves (P) and shear waves (S). Pressure waves are also called acoustic waves. Oddly enough, the P and S symbols do not stand for Pressure and Shear, but Primary (P) and Secondary (S), but because pressure waves are inherently faster than shear waves and arrive at the receiver first. Shear waves never travel through liquid because liquids do not shear. (But there is an aquatic bird called a Shearwater. Go figure!) That's how physicists know that parts of the inner earth are liquid -- P waves go through and S waves do not. There are also other kinds of waves peculiar to the surface or boundaries. For instance, the damaging waves from an earthquake are a special form of wave (called ground roll) that travels only the surface of the earth. Because they are limited to the surface, their intensity falls of much more slowly than P or S waves do. Seismic Duck does not model shear waves and ground roll for sake of simplicity and speed. The other kinds of waves travel at different speeds, and if simulated, would greatly slow down the animation and make the seismograms much harder to interpret.
Phase of Reflection: A reflection can have the same or opposite phase as the incident wave. The phase of a reflection depends upon whether the acoustical impedance goes up or down when a boundary is crossed. Taking note of the reflection phase can yield a valuable hint about whether a reflection is from the top or the bottom of the sandstone. The reflection from the top of the sandstone has the opposite phase; the reflection from the bottom of the sandstone has same phase. To see this:
Free Surface Boundary Condition: The top boundary is treated as a ``free surface boundary condition'', which means that there is no resistance to motion at the boundary. No resistance means no pressure, and this requires it reflect a wave with opposite phase so that the reflection cancel the incident wave. Use the mouse to shoot the air gun about an inch below the surface. Examine the reflection and you will see that it indeed has opposite phase.
Slope of Seismogram: The initial seismogram for a shot looks like a cone. The slope of the sides relates to the wave velocity. The slower the medium, the steeper the sides of the cone, as shown below:
Both images were taken after same time interval after a shot.
First Break: The fastest path between two points is not always a straight line. Sometimes it is faster to take a detour to get on an expressway. Below is a diagram showing how this can happen for sound waves coming from shot point S.
Both paths take the same time. The detour goes further in that time because sound travels must faster in the shale than water.
This phenomenon is called the first break on a seismogram, where the slope of the outer “cone” becomes less steep. To see the first break effect, set the water depth to shallow and folding to none. Set the air gun frequency to low and shoot the air gun. Watch as the part of the wave in the rock overtakes that in the water. When that overtaking part of the wave reaches the surface, the first break shows up on the seismogram as a change in the slope of the outer edge of the seismogram. On real seismograms, there can be second breaks, third breaks, etc. The position of breaks is one way to determine the depth of a boundary. Below is a snapshot with the leading edge of the seismogram and first break marked.
Head Wave: Corresponding to the first break in the example above is another kind of wave water with a strange property -- it moves through the slower medium (water) at the velocity of the faster medium! This kind of wave occurs at a boundary, and is called a head wave. In the Seismic Duck water and rock model, head waves are fairly weak. To see them, it may help to set the color mapping to Arcsinh or Sign only.
Waveguide: A slow layer of rock between two fast layers of rock can trap waves and guide them along the layer. This is the same sort of waveguide effect that guides light through fiber optics. To see the effect, turn off the Reservoir view and turn on the Geology and Seismic Views. Use the mouse to shoot the air gun inside the sandstone, near the left edge. If you shoot too close to the left edge, the damping will quash the shot, so be sure to shoot at least a centimeter in from the left edge. Immediately after the shot, much of the wave will escape the guide, because it struck the boundaries at too steep an angle to be reflected back into the waveguide. These escaped waves will race ahead. However, after a while you will see some ``blips'' that travel trapped inside the sandstone layer. These blips are waves being guided by the sandstone layer. If the layer makes a sharp turn, you will see some of the wave escape the waveguide.
Shot Signature: The signature of a shot is the shape of its pulse in time. One of the shot sliders lets you choose one of four signatures shown below.
| Name | Equation | Graph | ||
|---|---|---|---|---|
| Rectangular |
| |||
| Gaussian | e-t2 | |||
| te-t2 | ||||
| Ricker | (1-t2)e-t2 |
You will see that the waves caused by the Gaussian signature looks more like the Ricker wavelet. This is because after being pushed by the shot, the rock snaps back the other way. This is called ringing. Similarly, the waves caused by the Ricker and Zero Phase signatures all have extra bumps from ringing. The Rectangular signature is not normally used, because it is not bandlimited and severe aliasing occurs. Aliasing also occurs with the other signatures if the frequency is set too high. Aliasing is explained in the next section (Exaggerations, Approximations, and Artifacts).
Band Limited: You may be wondering about the choice of signatures. Why these signatures? The reason is that except for the rectangular pulse, these signatures are almost finite in time but exponentially bandlimited, meaning their frequency content falls off exponentially with increasing frequency. That is, if played on an audio system most of the sound would come from the woofers, not the tweeters. Signatures such as the rectangular pulse, which is not bandlimited, cause problems. Try the rectangular pulse and see what happens. Ducks band-limited too — one to each foot.
Hyperbolic Moveout: The reflection from a flat horizontal reflector shows up on the seismogram as a hyperbola. The reason is that as the receiver point moves out away from the shot point, the waves have to travel a longer path. The deeper the reflector, the more the hyperbola is flattened out. Thus one way to estimate the depth of a reflector is to observe the flatness of its recorded hyperbola. To see this effect, use the Geology sliders to set the water depth to shallow and the folding to none. Then shoot the air gun at the surface and examine the resulting hyperbolas on the seismogram. The hyperbola for the reflection from the water will have sharper curvature than the hyperbolas for reflections from the deeper boundaries.
Cable Feathering: In real oil exploration over water, a boat pulls a long cable behind it. Along the cable are receivers that pick up the seismic signal. Ideally, the cable becomes straight as it is pulled and the receivers line up. However, water currents can push the receivers out of alignment. This is called cable feathering. Ducks are experts on cable feathering.
Coning: As oil is extracted, the gas above and water below may form cones that intrude into the layer of oil. This is a nuisance in real oil wells too.
Edwin Drake: First person to drill for oil (1861). He did not use any seismic methods. Ducks are proud of famous Drakes.
Ultrasound: A common method of imaging fetuses in the womb is ultrasound. The physics of ultrasound are essentially the same as for seismic imaging. The difference is one of scale: kilometers vs. centimeters. The resolution of the reconstructed image is limited by the wavelength, which is inverse to frequency. Thus ultrasound uses much higher frequencies than seismic imaging.
The goal is to get through as many levels as possible. You start each level with 100 units of cash. Time costs money. You must double your cash to reach the next level. The game ends when you run out of cash.
You may survey and drill more than one area per level. However, you score cash only for oil and gas being pumped from the current area. Doubling your money on a level causes the subsurface to be revealed. Click on to start the next level. The Enter key can be used as a shortcut for clicking.
Your current level and cash are shown on gauges that look like the gauges on an old-fashioned gasoline pump.
Gas vs. Oil: In the game, the total dollar value of all gas and oil is the same in all geological models, and oil is worth four times as much as gas. In real life, gas is not worth drilling for unless there is also oil. Even the industry's standard symbols for wells shown below imply this fact -- the symbol for a gas well looks almost like the symbol for a dry well!
Costs: Shots are free. Drilling through rock costs money. This is a slight exaggeration, but emphasizes the point that seismic data is relatively cheap compared to drilling. Your initial bankroll is enough to drill all the way to the bottom of the screen twice.
Where to drill: Since gas usually collects at the center of an anticline structure and is worth less than the surrounding oil, it usually pays to aim for oil by drilling off to the side of the structure. Practice interpreting the seismogram with the reservoir view turned on before tackling the game. Study how the top of the seismogram hyperbolas and bright spots correlate to underground structure.
Stratigraphic Information: Drilling a dry well is not a complete loss, because you can see the layers drilled into.
Culture: Some levels have a Thin Glass Inc. factory. It sits on a red line. The duck cannot take shots on the red line, for fear of breaking glass.
Aliasing and Numerical Anisotropy: Seismic Duck solves the wave equations using a finite grid to approximate a continuous medium. If the wavelengths are too short relative to the grid spacing, the simulation becomes inaccurate. Furthermore, the grid is rectangular, which breaks circular isotropy. To see both artifacts, use the Shot sliders to select a high frequency Gaussian pulse. Use the mouse to shoot in the middle of the shale. See how the wave degenerates into a bunch of blinking dots (which is the aliasing problem), and how some of the wavefronts that should be circular look like overstuffed square pillows instead (the anisotropy problem).
Anticline: The anticline structures in Seismic Duck have grossly exaggerated vertical scale in order to make their affect on reflections visually obvious. They are also greatly simplified by having a single porous layer. Real structures are flatter and usually contain many alternating layers of porous and non-porous rock, which makes for many reflections in real life. Oil companies use high-speed computers to convert all those reflections into pictures of the layers.
Auto Gain Control: An artifact of automatic gain control is that the initial seismogram does not have a simple triangular form, but rather looks like it is wearing an arrowhead as a hat. The reason is that the initial portion of the air gun pulse is a weak signal, which causes the gain to be raised to its upper limit. When the air gun pulse reaches maximum strength, the gain becomes quite low. This rapid change in gain is why the initial seismogram does not look triangular. You can see this rapid change by watching the gain meter during a shot.
Damping: Real waves propagate over the entire earth. Seismic Duck models a finite area, so approximations must be used at the boundaries to fake a larger world beyond. The approximation used is a Uniaxial Perfectly Matched Layer (UPML). Though UPML is very good as suppressing reflections from the boundaries, a little bit of artificial reflection does occur, notably from corners. If you look closely with automatic gain control turned on, you can sometimes detect the corner reflections.
Ducks: Real collection of seismic data over water involves boats, not ducks. Receivers (geophones) record the seismic data and are attached to long cables that the boats pull behind them.
Full Traps: At best, seismic data reveals structures, but not oil. In Seismic Duck, the structures always have oil. In real life, you have to drill to find out if there is gas, oil, or water only. Read Yergin's The Prize for an account of Mukluk, a place in the Artic Ocean where $2 billion was spent drilling into a structure that turned out to have only salt water.
Interpolation: Seismic Duck solves the wave equation on a grid with two-pixel spacing between grid points, both horizontally and vertically. There are 4x as many pixels as grid points, thus most of the pixels are interpolated from neighboring grid points. The artifact of this approximation is that some zero-crossing boundaries of waves take on a stair-step appearance.
Poisson Solver: The reservoir model uses a crude Poisson solver that presumes that water and oil are compressible gases. This approximation seems to be good enough and fast enough for game purposes. IMplicit Pressure Explicit Saturation (IMPES) models are typically used in production reservoir models. I have not investigated yet whether doing IMPES at video frame rates is practical on current personal computers.
Spreading: In the real three dimensional world, wave energy falls off inverse-square with distance traveled from a point source. This is because energy emitted by a point source in three dimensions becomes an expanding spherical shell. The Seismic Duck world is two dimensional, so wave energy falls off inversely to distance traveled.
Hypersonic Duck: The duck can waddle or swim faster than the waves. Considering that sound travels about 6 times faster in rock than air, this means the duck exceeds Mach 6!
Velocity and Density: For ocean water and shale, Seismic Duck uses approximately correct values for the velocity of sound and density. Seismic Duck uses fictitious values for sandstone so that reflections will be visually obvious. The table below shows the values for Seismic Duck and the real world.
| Seismic Duck | Real World | |||
|---|---|---|---|---|
| velocity (km/s) | density (g/cm3) | velocity (km/s) | density (g/cm3) |
|
| water | 1.5 | 1.0 | 1.4-1.5 | 1.025-1.028 |
| sandstone | 2.1 | 1.4 | 2.3-2.7 | 2.0-2.6 |
| shale | 3.0 | 2.0 | 1.8-4.8 | 2.0-2.7 |
Code: The code is C++ with some SSE intrinsics. It harnesses multi-core processors via Intel* Threading Building Blocks (Intel* TBB), using classic space-time trapezoidal iteration spaces that are tiled to minimize memory bandwidth. The source code, available at Github, is open-source and includes a Cilk Plus variant. Please contact me if you are interested in porting it to another platform. Disclosure: I was the architect for Intel* TBB. This game is my own hobby and is not connected to my employer.
Known Idiosyncrasies on Windows:
Thanks to the following organizations or individuals for providing no-cost software used in the development of Seismic Duck over the years:
Disclaimer: No warrantee expressed or implied. Use this software at your own risk.
All versions of Seismic Duck use finite-difference equations that do not duplicate the real world, but merely approximate it with arbitrarily large error, including but not limited to aliasing, numerical anisotropy, and numerical dispersion. Seismic Duck does not model shear waves, 3D, or non-linear effects. Seismic Duck is not suitable for serious oil exploration.


Licence Copyright (c) 2019 MVExtensions Group
MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
All other trademarks and service marks are property of their respective holders.
This document describes how to install and use the MultiValue Basic Visual Studio Code extension in a MultiValue Development Environment. For purposes of this guide:
VSCode is a free, open source, feature rich, IDE that allows programmers to develop and debug code in various languages. There is also a community of developers that have developed extensions that provide functionality for VSCode that isn't built into the main program.
The MVBasic extension provides developers to gain the features of VSCode with MV BASIC programs. This extension provides connectivity to your MultiValue database, reading and writing code and is currently available for jBASE, OpenQM, MVON#, D3, Universe and Unidata. If the source code files are stored in O/S directories that are accessible by the user's system, then it can access other variants of MultiValue database.
Details on how to connect to the different databases are explained in later chapters.
This extension includes the following features:
VSCode is available on Windows, Linux and Mac OSX.
The following environment is required in order to use the extension.
VSCode can be downloaded from the following link: https://code.visualstudio.com/download
Select the version for your operating system. If you are running Windows, run either the 32 bit or the 64 bit installer. To check if you are 32 or 64-bit go to control panel/system or in Windows 10 search settings for 32.
Before we can start using the MV features for VSCode, we need to install the MVBasic extension. VSCode has an automated download and installation process for extensions.
Start VSCode and select the Extensions Button. In the search box, type "mvbasic".
Select the MV Developer Extension by clicking on the item in the list then choose install. Once the extension is installed we are ready to start using VSCode on your MV source code.
The extension allows us to connect to MV servers and edit, compile and catalog BASIC programs.
In order for VSCode to communicate to your MV server install the MVGateway provided with the extension. The MVGateway runs as a Windows service and is installed using the Windows setup program provided. This setup program is included in %userprofile%\.vscode\extension
. There will be a directory specific to the MVBasic extension. The name of this directory will change slightly with each new release of the extension because it contains the version number of the extension. In that directory is a MVGateway directory with the Windows MSI executable (setup program). Double-click on the MSI file and install the MVGateway service. The gateway does not need any special configuration or setup. The gateway can be installed on any Windows system in your network that has access to your computer and your MV server. Many users install it on their local system if they are running a Windows system.
Once you have installed the MVGateway the next step is to configure a VSCode Workspace. The Workspace will contain all the parameters required to connect and login to the remote MV Server. It is recommended that you use a directory on your system where you will save the Workspace definitions. If you have multiple servers and/or multiple accounts on each server, you will create a Workspace that points to a each particular server and account. In order to do that we first need to configure a VSCode Workspace.
To connect to an MV Server, the following information is required:
To create a new Workspace:
Select "Save Workspace As" from File Menu. In this example, a folder called VSCode is used to store the Workspace definitions. As shown in the above screenshot, a blank Workspace called Demo is created that can now be configured to point to your MV server.
To configure the connection parameters open the Workspace settings. One way to do that is to use the menu and select File, Preference, Setting.
This will bring up the Settings pane in VSCode. Once this is open you MUST select the Workspace Tab. This is one area that VSCode has changed so your screen may appear a little different than these screenshots. For many users it is easier to edit the JSON version of the configuration rather than searching for each individual parameter. This is done by clicking on the Open Settings (JSON) button near the top right corner of your VSCode. You can then paste in the appropriate settings for the platform from section 7.
After adding all the parameters to the workspace, your settings should be like this:
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account - DEMO",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.GatewayType": "Universe",
"mvbasic.UseGateway": true,
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": "myUserName",
"mvbasic.Password": "mvPassword",
"mvbasic.Account": "DEMO",
"files.associations": {
"*.md": "markdown",
"*.js": "javascript",
"\*" : "mvbasic"
}
}
}
These are the base settings required to connect to an Universe MV Server. Press Ctl-S to save your settings.
We can test to if the connection to MV server works by Pressing F1 or Cmd/Ctrl-Shift-P. VSCode will prompt you for the command to run. Type Connect to display all commands with Connect in it and choose "Connect to Multivalue REST FS".
The extension will connect to the server and retrieve a list of Directory files from the server. If the connection is successful, the following messages will appear at the bottom left of the screen.
See section 7 for sample configuration files for each MV platform.
To turn on logging in the MV Gateway, add the following to the settings section of the config file and the MVGateway service should log to c:\temp.
"MVBasic.gatewayDebug": true,
"MVBasic.trace.server": "verbose"
To test the RestFS connection manually, install a REST client and review some request/response pairs to make sure the MVGateway service is connecting.
Sample REST requests, these will obviously have to be changed with specific values:
POST http://localhost:9005/login
Content-Type: application/json
{
"ServerType": "Unidata",
"UserId": "dsiroot",
"Password": "password",
"AccountName": "DEMO",
"AccountPath": "/unidata/ud61/demo"
}
GET http://localhost:9005/dir/DEMO
Content-Type: application/json
The following is a list of features that the extensions offer MV Developers when using VSCode.
Code is highlighted based on the current theme selected for VSCode.
As you type your program, you will be prompted with available statements and functions including the syntax and description.
You can find all references to a word in your program by right clicking on a word and selecting Find All References from the menu.
The display consists of 2 panels, the right containing the line that the word is in and the actual code block is in the left. Clicking on a line in the right panel will take you to the code block.
If you right click on a internal or external subroutine name and select Peek Definition , a window appears showing the internal or external subroutine.
If you select Goto Definition , the cursor is moved to start of the subroutine.
Pressing "Ctl-space" after the word GOTO, GOSUB or GO TO, will allow you to select from defined internal subroutines in your program.
Right Clicking inside the code window allows you to select 3 options:
After the option is selected, the results will be displayed in message box at the bottom of the screen. If an error is detected, the editor will place the cursor on the line where error occurs.
Right Clicking and selecting Format Document , will format your BASIC program. The formatting is based on the 2 settings, mvbasic.indent and mvbasic.margin that have default values of 3 and 5.
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account - Universe",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.UseGateway": true,
"mvbasic.GatewayType": "Universe",
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": " myUserName",
"mvbasic.Password": "myPassword",
"mvbasic.Account": "DEMO",
"files.associations": {
"\*":"mvbasic"
}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://localhost:9005/ | Path to REST Gateway |
| mvbasic.UseGateway | true | Indicate that the gateway must be used. |
| mvbasic.RemoteHost | <IP_ADDRESS> | The servers IP/Host name that is running the Universe Database. |
| mvbasic.GatewayType | Universe | Connecting to a Universe server |
| mvbasic.UserName | myUserName | The Windows/UNIX user id to log into the server. |
| mvbasic.Password | myPassword | The password for the user above. |
| mvbasic.Account | DEMO | The account name on Universe to connect to. This must be defined in the UV.ACCOUNT file in the UV account. |
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account – Unidata",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.UseGateway": true,
"mvbasic.GatewayType": "Unidata",
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": "myUserName",
"mvbasic.Password": "MyPassword",
"mvbasic.Account": "DEMO",
"mvbasic.AccountPath": "/usr/data/DEMO",
"files.associations": {"\*":"mvbasic"}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://localhost:9005 | Path to REST Gateway |
| mvbasic.UseGateway | true | Indicate that the gateway must be used. |
| mvbasic.RemoteHost | <IP_ADDRESS> | The servers IP/Host name that is running the Unidata Database. |
| mvbasic.GatewayType | Unidata | Connecting to a Unidata server |
| mvbasic.UserName | MyUserName | The Windows/UNIX user id to log into the server. |
| mvbasic.Password | MyPassword | The password for the user above. |
| mvbasic.Account | DEMO | A name for this account. |
| mvbasic.AccountPath | /usr/data/DEMO | The path on the Unidata machine to the Unidata account. |
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account - QM",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.UseGateway": true,
"mvbasic.GatewayType": "QM",
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": "MyUserName",
"mvbasic.Password": "MyPassword",
"mvbasic.Account": "DEMO",
"files.associations": {"\*":"mvbasic"}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://localhost:9005/ | Path to REST Gateway |
| mvbasic.UseGateway | true | Indicate that the gateway must be used. |
| mvbasic.remoteHost | <IP_ADDRESS> | The servers IP/Host name that is running the OpenQM Database. |
| mvbasic.gatewayType | QM | Connecting to a OpenQM server |
| mvbasic.UserName | MyUserName | The Windows/UNIX user id to log into the server. |
| mvbasic.Password | MyPassword | The password for the user above. |
| mvbasic.Account | DEMO | The account name on the QM server to connect to. This must be defined in the ACCOUNTS file in the QMSYS account. |
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account - jBASE",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.UseGateway": true,
"mvbasic.GatewayType": "jBASE",
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": "MyUserName",
"mvbasic.Password": "MyPassword",
"mvbasic.Account": "",
"files.associations": {"\*":"mvbasic"}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://localhost:9005/ | Path to REST Gateway |
| mvbasic.UseGateway | true | Indicates that the gateway must be used. |
| mvbasic.RemoteHost | <IP_ADDRESS> | The servers IP name that is running the jBASE Database. |
| mvbasic.GatewayType | jBASE | Connecting to a jBASE server |
| mvbasic.UserName | MyUserName | The Windows/UNIX user id to log into the server. |
| mvbasic.Password | MyPassword | The password for the user above. |
| mvbasic.Account | This is blank, jBASE uses the default path of the user for the account. |
A record in the MD called MVONFILES can used as a list of available files, alternatively all files are displayed.
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account – D3",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.UseGateway": true,
"mvbasic.GatewayType": "D3",
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": "dm",
"mvbasic.AccountPassword": "",
"mvbasic.Account": "dm",
"files.associations": {"\*":"mvbasic"}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://localhost:9005/ | Path to the REST Gateway |
| mvbasic.UseGateway | true | Indicates that the gateway must be used. |
| mvbasic.RemoteHost | <IP_ADDRESS> | The servers IP name that is running the D3 Database. |
| mvbasic.GatewayType | D3 | Connecting to a D3 server |
| mvbasic.UserName | dm | The D3 User name to log in with |
| mvbasic.AccountPassword | Specify the account password if a password is set on the account. | |
| Mvon.Account | dm | The D3 account to connect to. |
MSVP must be configured for the above account and the user must have MSVP access. A record in the MD called VSCodeFILES can be used as a list of available files, alternatively all files are displayed.
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account – mvBase",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost:9005/",
"mvbasic.UseGateway": true,
"mvbasic.GatewayType": "mvBase",
"mvbasic.RemoteHost": "<IP_ADDRESS>",
"mvbasic.UserName": "MyUserName ",
"mvbasic.AccountPassword": "MyPassword",
"files.associations": {"\*":"mvbasic"}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://localhost:9005/ | Path to the REST Gateway |
| mvbasic.UseGateway | true | Indicates that the gateway must be used. |
| mvbasic.RemoteHost | <IP_ADDRESS> | The servers IP name that is running mvBase. |
| mvbasic.GatewayType | mvBase | Connecting to a mvBase server |
| mvbasic.UserName | MyUserName | The User name to log in with |
| Mvon.AccountPassword | MyPassword | Specify the account password if a password is set on the account. |
MSVP must be configured for the above account and the user must have MSVP access. A record in the MD called VSCodeFILES can be used as a list of available files, alternatively all files are displayed.
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account – MVON#",
}
],
"settings": {
"mvbasic.RestPath": "http://<IP_ADDRESS>/mvonrest",
"mvbasic.UseGateway": false,
"mvbasic.UserName": "MyUserName ",
"mvbasic.Password": "MyPassword",
"mvbasic.Account: "Netbasic",
"mvbasic.RemoteDebug": true,
"files.associations": {"\*":"mvbasic"}
}
}
| Setting | Description | |
|---|---|---|
| mvbasic.RestPath | http://<IP_ADDRESS>/mvonrest | URL of the MVON# REST service |
| mvbasic.UseGateway | false | Indicates that the gateway is not required and may be omitted from the configuration. |
| mvbasic.UserName | MyUserName | The User name to log in with |
| mvbasic.Password | MyPassword | Specify the account password if a password is set on the account. |
| mvbasic.Account | Netbasic | Name of the MVON# account you are connecting to. |
| mvbasic.RemoteDebug | True | This enables the MVON# remote debugging feature allowing a rich debugging environment in VSCode |
MVON# connects differently from other MV servers. It does not require the MVGateway service, providing a direct connection through the MVON# REST server. You must have this server configured before connecting.
Most programming languages have an extension that says what language it is. Python is .py, C# is .cs etc. MV Basic typically does not follow this concept.
In order to tell VSCode that we are editing a MV BASIC program in order to enable Syntax highlighting. Intellisense, Linting and other features, we need to tell VSCode that files in the Workspace are linked to this MV BASIC extension. This is achieved by adding the following setting to your Workspace settings (see red highlight below).
{
"folders":[
{
"uri": "RestFS:/",
"name": "Account - DEMO",
}
],
"settings": {
"mvbasic.RestPath": "http://localhost/mvonrest",
"files.associations": {"\*":"mvbasic"}
}
}
The following settings are available to customize your VSCode MVBasic Developer experience.
| Setting | Description |
|---|---|
| mvbasic.margin | The number of characters to use as a margin when formatting. |
| mvbasic.indent | The number of characters to use when indenting code blocks. |
| mvbasic.useCamelCase | Use CamelCase for Intellisense keywords. |
| mvbasic.ignoreGotoScope | The linter will not highlight goto that jump into the middle of loops. |
| mvbasic.formattingEnabled | Set to false to disable code formatting. |


DEFEAT YOUR RAID BOSSES
Raid boss helps you chose the right counters. Giving you all the stats you need, you'll be able to capture the Pokemon more easily!
An Optimized Counter List
See all the best recomended counters in order to defeat the raid bosses!
Offline
You don't even need to be connected to the internet to access all the infos! No internet connection? No problem!
Quick Access
Type the raid boss name in the search bar and see the Pokemon instantaniously.
Give it a try!
Possible CP after capture, moves, types and much more.
FAQ
APPS SCREENSHOT
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiis unde, ut sapiente et voluptatum facilis consectetur incidunt provident asperiores at necessitatibus nulla sequi voluptas libero quasi explicabo veritatis minima porro.
GET THE APP
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiis unde, ut sapiente et voluptatum facilis consectetur incidunt provident asperiores at necessitatibus nulla sequi voluptas libero quasi explicabo veritatis minima porro.
GET IN TOUCH
If you spot an error in the app or you think something is missing, don't hesitate to comment on the play store's app page!