Niklaus Fankhauser Letter to a Friend in Switzerland 1858
The following is a translation of a letter written by Niklaus Fankhauser, early immigrant and settler in Monroe County, Ohio. This letter was provided by his great great grandson, Ralph Fankhauser.
The
following is an excerpt from a letter written by Niklaus Fankhauser March 19,
1852 to be sent to his friends in Switzerland. The letter gives good insight
into the lives of the Fankhausers. The letter may also be valuable to
researchers because it gives times, dates, places, and names. The letter was
donated to the Monroe County Historical Society by Mr. Ernest Thode who
translated it from the German language into the English language.
.................We
are also especially happy that you asked about the whole F(r)ankhauser family,
namely who was still around. There is nobody left but me. They have all went
over to join their forefathers as good, believing Swiss. Johannes (John) died
on 1 May 1847 of pneumonia; he was not sick for more than ten days. My daughter
was at his place for a visit; he sat in front of his house short of breath,
came into the parlor, gave her, as well as his children, his hand, and lay down
on his bed with closed hands and died without their noticing immediately.
Daniel died on 30 March 1850; he was sick with consumption for 11 months. His
survivors had a beautiful gravestone made for him. The funeral party was so
large that there was not room for everybody in the church. Samuel died of
pulmonary edema in August 1851 after being sick for 3 months. He lived in Weinsberg
(Winesburg), (Ohio), 109 miles from here. (It appears that this brother was not
included in the history, The Fankhausers of Monroe County because he had
settled in another county) We hadn't seen one another for 32 years, and since
he perceived that his end was coming, he let me know with the desire that I
visit him yet. Consequently, I paid him a visit and we discussed the one
necessary thing, namely the work of salvation of Jesus Christ and the
afterlife. The comforting statements that I was able to give him by the help of
God moved him to think so much of me that I had to say to him: "Dear
brother, your brother Claus (Niklaus) is also a poor old sinner, but thank God,
a sinner who must dip and absorb grace upon grace from the same well that he is
showing to you." We broke out in many tears. Five minutes before his
demise he still sang, "Jesus accepts the sinner." Like my other
brother, he recommended his wife and children to me with regard to religion,
for here one must know what he believes; otherwise one is susceptible to
fanaticism, and there are diverse kinds of that here..................
As for
churches and schools, we are quite properly set up here. So far we have had the
good fortune that our children have been quite well schooled. They learn German
and English but are instructed and confirmed in the German language. We used to
have clergy that preached nice enough, but could not tell anybody how to be
saved, so that they were unable to counsel the sick, the downtrodden, and the
depressed, and so it frequently happened that I was called to them, which I was
sincerely glad to do at any time, as far as time and circumstances allowed. Now
it is different. The dear Lord was gracious to us and sent Jakob Baumberger
(Note: of Koppigen, Canton Aargau, Switzerland) formerly an evangelist for the
Evangelical Society in Bern. When I heard him for the first time and heard from
him, "How do you get right with God?," and then heard the explanation
of how to be justified, I had to break out in tears. Now the worship service is
so well attended that we must build a new church. The people come from eight or
nine miles away to attend services. The new church is to be built of bricks,
which have been fired. This summer it should be opened and dedicated, if God
wills it. ................
As for
the F(r)ankhauser family here, there are so many of us that people say there
must an Abraham among us. I am the father of 21 children and 43 grandchildren;
Daniel, of 14 children and 18 grandchildren; Johannes (John), of 14 children
and 15 grandchildren. The children and grandchildren of us three brothers who
are still alive come to 113 souls, and, thank God, are all healthy and well.
There is nobody sickly among them or with physical handicaps. All grew up well
and there are many tall men and women among us. It is a pleasure for me and my
wife, when we visit our children and grandchildren, how friendly we are
accepted, then surrounded by 6 or 8 grandchildren who know how to tell us a lot
of news in order to receive the nice gift.
My
property consists of 80 acres of land. But the acre (ca. 4,049 square meters)
amounts to somewhat more than your Juchart (ca. 3,597 square meters). Of these
80 acres, 60 are arable, on which there is also an orchard laid out containing 100
fruit trees, which as a rule are very fruitful, and annually yield their
various fruits. Since I have lived here, I know of only one time when the fruit
failed. My cattle consist of 14 beef cattle, 2 horses, and 15 sheep. Last
winter was a very cold one, such that the oldest settlers couldn't remember any
like it. On the other hand, last summer was exceptionally dry, but there was a
want of nothing except water. One can say there is no deficiency here;
everything can be sold at a good price, and so I live here happily. My two
young boys help me do the field work. Mother occupies herself with spinning and
other household chores, and the daughters do what is in their line. When my
day's work is ended and I get ready to go to bed, I first take up the Bible,
which simultaneously reminds me both of a poor sinner and of Him who does not
want man to be lost.
28
years ago, when I was still new in the country, I made a trip in the state of
Ohio, where I made a walking tour of over 400 miles. I made this journey without
cash. In this region there lived a man who was a turner and made me some small
wooden pipes. I took these in my
rucksack and started my journey on these uncleared paths. So I came from place
to place and was able to pay my lodging with tobacco pipes, especially in those
days when women smoked tobacco and pipes were accepted as money. Because I was
Swiss, I was welcome in many places and met people who were able to tell me
many good new things about Switzerland. The places in those days had a good and
fine name, but were quite small; the largest that I found were hardly as large
as Aarberg (Canton Bern, Switzerland) and Nidau (Canton Bern, Switzerland). In
most of the places there was a smithy, a general store , and an inn, and
between the places were woods, so that I often had to travel three or four
miles before coming to another cabin. They told me about the city of Berlin
(Ohio); now I thought, there must be something good there, and when I thought I
was getting close to it according to the reports, I met somebody and asked him
how far it was to Berlin. To my astonishment he said that I had passed it two
miles back.
When I
visited my brother last summer, I came back through many of the same places
where I had been on the first trip. But how different it looks now! Forests
have been transformed into fields; the small places are metamorphosed into
large cities; the log cabins are mostly razed and in their places two to three
story houses made of brick. In many of the cities there are three or four and
more streets that are paved with stone. If someone approaches one of these
cities, he can already see the activity in various trades from afar through the
pillars of coal smoke climbing skyward; there are all kinds of ironworks,
glassworks, stone mills, stone sawmills, spinning machines, and all sorts of
factories to make clothing goods, and in many of these cities there are three
or four churches already, and although of different denominations, for the most
part they honor Him who purchased us with His blood and reconciled us with God.
My dear
friend! My dear friend! I have terrible pain for my dear old fatherland, since
I see in my old days how deeply it has sunk.
I left my dear home town (Bern) in '19 on Easter Monday (12 April 1819)
with many handshakes and wishes of God's blessing from my old lords and the
fathers of the land. I went past the Schuetzenmatte (shooting meadow in Bern)
to Bueren (probably Bueren and der Aare, Canton Bern, where the TISHER migration party could take a flatboat,
rather than Bueren zum Hof, Canton, Bern, Jacob TISHER (Tuescher)'s previous
residence). I had eight small children and the great ocean before me. It was as
if somebody was hunting me; my fear was so great that I didn't want to eat or
drink. In those days all was peace and celebration. Everybody lived in his
cabin. ............
 May God grant you all much happiness and blessing temporally here and eternally there. We
commend you all to the care of God. God be with you all!
Your
old, gray, loyal servant
N(iklaus)
F(ankhauser)
From
Gutachten ueber die schweizerische Auswanderung an die Schweizerische
gemeinnuetzige gesellschaft (Reports to the Swiss Mutual Aid Society concerning
Swiss Emigration) by Johann Ludwig Spyry, published at Zurich in 1865,
reprinted in Alles ist ganz anders hier (Everythilng is Quite Different Here)
by Leo Schelbert and Hedwig Rappolt, published in Olten, Switzerland, in 1977,
ISBN 3-530-73030-0. Translated by Ernest THODE.
Provided by Ralph Fankhauser e-mail: Ralph
Fankhauser


1 Introduction
Complex heatmaps are efficient to visualize associations between different sources of data sets and reveal potential patterns. Here the ComplexHeatmap package provides a highly flexible way to arrange multiple heatmaps and supports self-defined annotation graphics.
1.1 General design
A single heatmap is composed by the heatmap body and the heatmap components. The heatmap body can be split by rows and columns. The heatmap components are titles, dendrograms, row/column names/labels and heatmap annotations, which are put on the four sides of the heamap body. The heatmap components are reordered or split according to the heatmap body.
A heatmap list is concatenation of a list of heatmaps and heatmap annotations. Surrounding the heatmap list, there are global-level titles and legends.
One important thing for the heatmap list is that rows for all heatmaps and annotations are all adjusted so that the same row in all heatmaps and annotations corresponds to a same feature.
The heatmaps and annotations (now it is column annotation) can also be arranged vertically.
And the heatmap list can also be split by rows and by columns.
The ComplexHeatmap package is implemented in an object-oriented way. To describe a heatmap list, there are following classes:
-
Heatmap
class: a single heatmap containing heatmap body, row/column names, titles, dendrograms and row/column annotations. -
HeatmapList
class: a list of heatmaps and heatmap annotations. -
HeatmapAnnotation
class: defines a list of row annotations and column annotations. The heatmap annotations can be components of heatmap, also they can be independent as heatmaps.
There are also several internal classes:
-
SingleAnnotation
class: defines a single row annotation or column annotation. TheHeatmapAnnotation
object contains a list ofSingleAnnotation
objects. -
ColorMapping
class: mapping from values to colors. The color mappings of the main matrix and the annotations are controlled byColorMapping
class. -
AnnotationFunction
class: constructs user-defined annotations. This is the base of creating user-defined annotation graphics.
ComplexHeatmap is implemented under grid system, so users need to know basic grid functionality to get full use of the package.
1.2 A brief description of following chapters
This chapter describes the configurations of a single heatmap.
This chapter describes the concept of the heatmap annotation and demonstrates how to make simple annotations as well as complex annotations. Also, the chapter explains the difference between column annotations and row annotations.
This chapter describes how to concatenate a list of heatmaps and annotations and how adjustment is applied to keep the correspondence of the heatmaps.
This chapter describes how to configurate the heatmap legends and annotation legends, also how to create self-defined legends.
This chapter describes methods to add more self-defined graphics to the heatmaps after the heatmaps are generated.
This chapter describes how to make oncoPrints and how to integrate other functionalities from ComplexHeatmap to oncoPrints.
This chapter describes how to make enhanced UpSet plots.
This chapter describes functions implemented in ComplexHeatmap for specific use, e.g. visualizing distributions.
This chapter describes how other packages are integrated with ComplexHeatmap. Currently, we demonstrate the two packages of gridtext and pheatmap.
This chapter describes how to make heatmaps interactive.
More simulated and real-world examples are demonstrated in this chapter.


Contents
As of Ganeti 2.6, instance creations acquire all node locks when an instance allocator (henceforth “iallocator”) is used. In situations where many instance should be created in a short timeframe, there is a lot of congestion on node locks. Effectively all instance creations are serialized, even on big clusters with multiple groups.
The situation gets worse when disk wiping is enabled (see gnt-cluster(8)) as that can take, depending on disk size and hardware performance, from minutes to hours. Not waiting for DRBD disks to synchronize (wait_for_sync=false) makes instance creations slightly faster, but there’s a risk of impacting I/O of other instances.
The target is to speed up instance creations in combination with an iallocator even when the cluster’s balance is sacrificed in the process. The cluster can later be re-balanced using hbal. The main objective is to reduce the number of node locks acquired for creation and to release un-used locks as fast as possible (the latter is already being done). To do this safely, several changes are necessary.
Instead of forcibly acquiring all node locks for creating an instance using an iallocator, only those currently available will be acquired.
To this end, the locking library must be extended to implement opportunistic locking. Lock sets must be able to only acquire all locks available at the time, ignoring and not waiting for those held by another thread.
Locks (SharedLock) already support a timeout of zero. The latter is different from a blocking acquisition, in which case the timeout would be None.
Lock sets can essentially be acquired in two different modes. One is to acquire the whole set, which in turn will also block adding new locks from other threads, and the other is to acquire specific locks by name. The function to acquire locks in a set accepts a timeout which, if not None for blocking acquisitions, counts for the whole duration of acquiring, if necessary, the lock set’s internal lock, as well as the member locks. For opportunistic acquisitions the timeout is only meaningful when acquiring the whole set, in which case it is only used for acquiring the set’s internal lock (used to block lock additions). For acquiring member locks the timeout is effectively zero to make them opportunistic.
A new and optional boolean parameter named opportunistic is added to LockSet.acquire and re-exported through GanetiLockManager.acquire for use by mcpu. Internally, lock sets do the lock acquisition using a helper function, __acquire_inner. It will be extended to support opportunistic acquisitions. The algorithm is very similar to acquiring the whole set with the difference that acquisitions timing out will be ignored (the timeout in this case is zero).
With opportunistic locking used for instance creations (controlled by a parameter), multiple such requests can start at (essentially) the same time and compete for node locks. Some logical units, such as LUClusterVerifyGroup, need to acquire all node locks. In the latter case all instance allocations would fail to get their locks. This also applies when multiple instance creations are started at roughly the same time.
To avoid situations where an opcode holding all or many node locks causes allocations to fail, a new lock level must be added to control allocations. The logical units for instance failover and migration can only safely determine whether they need all node locks after the instance lock has been acquired. Therefore the new lock level, named “node-alloc” (shorthand for “node-allocation”) will be inserted after instances (LEVEL_INSTANCE) and before node groups (LEVEL_NODEGROUP). Similar to the “big cluster lock” (“BGL”) there is only a single lock at this level whose name is “node allocation lock” (“NAL”).
As a rule-of-thumb, the node allocation lock must be acquired in the same mode as nodes and/or node resources. If all or a large number of node locks are acquired, the node allocation lock should be acquired as well. Special attention should be given to logical units started for all node groups, such as LUGroupVerifyDisks, as they also block many nodes over a short amount of time.
The iallocator interface does not need any modification. When an instance is created, the information for all nodes is passed to the iallocator plugin. Nodes for which the lock couldn’t be acquired and therefore shouldn’t be used for the instance in question, will be shown as offline.
The opcodes OpInstanceCreate and OpInstanceMultiAlloc will gain a new parameter to enable opportunistic locking. By default this mode is disabled as to not break backwards compatibility.
A new error type is added to describe a temporary lack of resources. Its name will be ECODE_TEMP_NORES. With opportunistic locks the opcodes mentioned before only have a partial view of the cluster and can no longer decide if an instance could not be allocated due to the locks it has been given or whether the whole cluster is lacking resources. Therefore it is required, upon encountering the error code for a temporary lack of resources, for the job submitter to make this decision by re-submitting the job or by re-directing it to another cluster.


Morbid Beauty: Old and Spooky Cemeteries Across the World
It is no surprise to anyone that excursion programmes in many cities of the planet include visits to the most beautiful cemeteries.
06 Nov 2019, 17:40
Tourists who appreciate architecture and unusual works of art, as well as quiet, contemplative retreats, can find a lot of interesting things for themselves at cemeteries around the world.
The quiet beauty of the famous Père Lachaise in Paris, the aristocratic La Recoleta in Buenos Aires and the mysterious Old Jewish Cemetery in Prague will be appreciated even by those who are not fans of mystical tourism. These eerie open-air museums have long turned into sights with millions of visitors a year.
Pere Lachaise Cemetery in Paris is perhaps the most famous cemetery in the world. Celebrities such as Jim Morrison, Oscar Wilde, Sarah Bernhardt and Amedeo Modigliani are buried here. © Depositphotos / Mshch1
The Merry Cemetery (Cimitirul Vesel) is a cemetery in the village of Săpânța, Maramureş county, Romania. It is famous for its colourful tombstones with naïve paintings that originally and poetically describe the people who were laid to rest here, depicting scenes from their lives. The Merry Cemetery has become an open-air museum and a national tourist attraction. CC BY 2.0 / Brandon Atkinson
La Recoleta Cemetery (Cementerio de la Recoleta) is a cemetery located in the Recoleta neighbourhood of Buenos Aires, Argentina. It contains the graves of notable people, including Eva Perón, presidents of Argentina, Nobel Prize laureates, the founder of the Argentine Navy and Napoleon's granddaughter. CC BY 2.0 / Jorge Láscar
Hanging coffins are coffins which have been placed on cliffs. They can be found in various locations, including China, Indonesia, and the Philippines. © Depositphotos / Nvkarasev
Monumental sculptures guard many of the graves, transforming Lychakiv Cemetery into an open-air fine art museum. © Sputnik / Str
Sucre’s General Cemetery, the most prestigious cemetery in Bolivia has beautiful, wide-open pathways, with trees lining each side and cool, shaded spots, and benches scattered benches along the cemetery's lawns. CC BY-SA 2.0 / Juliane Schultz
The Old Jewish Cemetery is a Jewish cemetery in Prague, the Czech Republic, which is one of the largest of its kind in Europe, and one of the most important Jewish historical monuments in Prague. It served its purpose from the first half of the 15th century until 1786. Renowned members of the local Jewish community were buried here; among them Rabbi Jehuda Liva ben Becalel – Maharal (ca. 1526–1609), businessman Mordecai Meisel (1528–1601), historian David Gans (ca. 1541–1613) and Rabbi David Oppenheim (1664–1736). Today the cemetery is administered by the Jewish Museum in Prague. © Photo: Public domain / Midnight Believer
Jewish section of historic Bonaventure Cemetery, Savannah. The gate is in accordance with Jewish tradition and the cemetery remains in use today. © Depositphotos / Jim Pintar
Highgate Cemetery is a place of burial in north London, England. There are approximately 170,000 people buried in around 53,000 graves on the grounds of the West Cemetery and East Cemetery at Highgate. The cemetery is noteworthy both for some of its residents, as well as for its de facto status as a nature reserve. The Cemetery is designated Grade I on the Register of Historic Parks and Gardens. It is one of the 'Magnificent Seven' cemeteries in London. CC BY-SA 2.0 / Dilettantiquity
The modernist cemetery at Lloret de Mar was designed at the end of the 19th century and built over the next few years up until the early 20th century. © Photo: Public domain / Caff55
The Cimitero Monumentale is one of the two largest cemeteries in Milan, Italy, the other one being the Cimitero Maggiore. It is noted for its abundance of artistic tombs and monuments. Designed by the architect Carlo Maciachini (1818–1899), it was designed to consolidate a number of smaller cemeteries that used to be scattered around the city, into a single location. CC BY 2.0 / Marco Ragaini
Soldiers graves at the Powazki Military Cemetery in Warsaw, Poland. Powazki Cemetery is one of the oldest and most famous cemeteries in Warsaw. There are a number of Polish senior officers laid to rest here, and it is the burial place of many illustrious individuals from Polish history. © Depositphotos / Fotokon


Entrepreneur Essien advises followers on the steps to follow to make dreams come true
- Nigerian entrepreneur Mark Essien has advised people on how to make their dreams come true
- The entrepreneur shared six steps to take for people to achieve their dreams
- Essien said his advice is for people who don't believe they can achieve their wildest dream
A Nigerian entrepreneur Mark Essien has advised people on what to do to achieve their wildest dreams. The entrepreneur shared a series of posts on the popular micro-blogging platform, Twitter, teaching people on the steps to take.
Essien shared six tips for people to make their dreams come true. He noted that his post is for people who set their sight on low goals because they don't believe they can achieve their wildest dream.
The entrepreneur explained that the first step is setting the right goal without being afraid of the risk. He then shared the story of a man who bo houses for his children and one benefit more than the other because he was not afraid.
PAY ATTENTION: Read best news on Nigeria's #1 news app
According to him, the second step is to move with people that would help you move forward. He explained that people need to connect with those that are higher than their level so they can achieve the highest level.
The third step by Essien was skill-building. The man advised people to learn several skills and make it their own.
PAY ATTENTION: Do you have news to share? Contact Legit.ng instantly
Essien also advised that the fourth step is to leave no room for discouragement. He said people need to keep moving forward no matter what happens.
He said once the goal is achieved the fifth step is to start working hard to get to the next level by challenging yourself. Finally, he advised people to speak up and never be afraid of getting into trouble.
With prayers, God will turn things around for Nigeria, says Gov Okowa
READ ALSO: NAIJ.com upgrades to Legit.ng: a letter from our Editor-in-Chief Bayo Olupohunda
Meanwhile, Legit.ng had earlier reported that a writer identified as Praise George took to his Twitter account to advise women about marriage and career chasing. The man urged women to get married rather than chase a career.
NAIJ.com (naija.ng) -> Legit.ng We have upgraded to serve you better
Is it really difficult to get a job in Nigeria? - on Legit TV


Get one of the fastest, easiest ways to turn your cryptocurrency into dollars for Visa® shopping.
Load dollars in the BitPay app, or from any compatible crypto wallet.
Use your BitPay Card with any retailer that accepts Visa®.
Get detailed information for all transaction activity and reload dollars from the app.


{% extends "layout_unbranded.html" %} {% block page_title %} GOV.UK prototype kit {% endblock %} {% block content %} Back Check the marital status for QQ123456C What is their marital status? Married or in a civil partnership Divorced or widowed {% endblock %}


Click the button below to run the System Check.
Warning: Please correct any errors below before continuing.


inVerse Plugin Changelog
4.0.2 Release 2 -- (tbd)
- [OF-1517] - Don't require i18n source files for all plugins to be encoded.
- Minimum Java requirement: 1.8
4.0.2 Release 1 -- October 4th, 2018
4.0.1 Release 1 -- September 20th, 2018
4.0.0 Release 1 -- September 8th, 2018
- OF-1597: upgrade to converse.js 4.0.0, which includes these changes:
New Features
- #161 XEP-0363: HTTP File Upload
- #194 Include entity capabilities in outgoing presence stanzas
- #337 API call to update a VCard
- #421 XEP-0308: Last Message Correction
- #497 XEP-0384: OMEMO encrypted messaging
- #968 Use nickname from VCard when joining a room
- #986 Affiliation changes aren't displayed in the chat
- #1081 Allow for shift-enter to insert newlines
- #1091 There's now only one CSS file for all view modes.
- #1094 Show room members who aren't currently online
- #1106 Support for Roster Versioning
- #1137 Autocompletion and support for XEP-0372 References, specifically section "3.2 Mentions".
- It's now also possible to edit your VCard via the UI
- Automatically grow/shrink input as text is entered/removed
- MP4 and MP3 files when sent as XEP-0066 Out of Band Data, are now playable directly in chat
- Support for rendering URLs sent according to XEP-0066 Out of Band Data.
- Geo-URIs (e.g. from Conversations) are now replaced by links to openstreetmap (works in reverse also)
- Add a checkbox to indicate whether a trusted device is being used or not.
- If the device is not trusted, sessionStorage is used and all user data is deleted from the browser cache upon logout.
- If the device is trusted, localStorage is used and user data is cached indefinitely.
- Initial support for XEP-0357 Push Notifications, specifically registering an "App Server".
- Add support for logging in via OAuth (see the oauth_providers setting)
Bugfixes
- Spoiler messages didn't include the message author's name.
- #1017 Documentation includes utf-8 charset to make minfied versions compatible across platforms.
- #1026 Typing in MUC shows "Typing from another device"
- #1039 Multi-option data form elements not shown and saved correctly
- #1143 Able to send blank message
API changes
- _converse.api.vcard.get now also accepts a Backbone.Model instance and has an additional force parameter to force fetching the vcard even if it has already been fetched.
- New API method _converse.api.vcard.update.
- The contactStatusChanged event has been renamed to contactPresenceChanged and a event presenceChanged is now also triggered on the contact.
- _converse.api.chats.open and _converse.api.rooms.open now returns a Presence which resolves with the Backbone.Model representing the chat object.
UI changes
- #956 Conversation pane should show my own identity in pane header
- The UI is now based on Bootstrap4 and Flexbox is used extensively.
- Fontawesome 5 is used for icons.
- User Avatars are now shown in chat messages.
Configuration changes
- Removed the storage configuration setting, use trusted instead.
- Removed the use_vcards configuration setting, instead VCards are always used.
- Removed the xhr_custom_status and xhr_custom_status_url configuration settings. If you relied on these settings, you can instead listen for the statusMessageChanged event and make the XMLHttpRequest yourself.
- Removed xhr_user_search in favor of only accepting xhr_user_search_url as configuration option.
- xhr_user_search_url has to include the ? character now in favor of more flexibility. See example in the documentation.
- The data returned from the xhr_user_search_url must now include the user's jid instead of just an id.
- New configuration settings nickname and auto_join_private_chats.
Architectural changes
- Extracted the views from converse-muc.js into converse-muc-views.js and where appropriate moved methods from the views into the models/collections. This makes MUC possible in headless mode.
- Created a new core plugin converse-roster.js which contains the models for roster-related data. Previously this code was in converse-core.js.
- VCards are now stored separately from chats and roster contacts.
Other
- Support for OTR (off-the-record) encryption has been dropped.
3.3.4 Release 1 -- March 15th, 2018
3.3.2 Release 1 -- February 5th, 2018
3.2.1 Release 1 -- September 4th, 2017
3.1.0 Release 1 -- July 10th, 2017
3.0.3 Alpha 1 -- June 19th, 2017
- Initial release.
- Based on commit 068be7b
of Converse, which is a commit newer than the 3.0.2 release, which was the latest official release at the time.


Grime4Corbyn artists reluctant to back new campaign as general election nears
"It’s a bit late to go to the grime community now after ignoring us”
The #Grime4Corbyn movement is unlikely to return once more for the upcoming general election, after several key figures reportedly grew disillusioned with Jeremy Corbyn.
The movement, which was part of an effort to encourage young people to vote during the 2017 general election, is now considered to be a missed opportunity by several acts who backed the campaign.
- Read more: Inside the #Grime4Corbyn movement
According to The Guardian, acts view the campaign as being a “one-off” despite grime stars such as Krucial previously stressing that it should not be a “viral trend” that ends after election season.
One grime manager told the publication: “The general consensus is that they were used. They didn’t follow up. They weren’t expecting a general election so soon, and it’s a bit late to go to the grime community now after ignoring us.”
JME and Jeremy Corbyn
Other acts such as AJ Tracey have confirmed that they will not be voting for Labour in December, while JME – who interviewed Mr Corbyn – did not respond to request for comment.
Skepta previously criticised the campaign in December 2017, and said that politicians “used people” during the election.

In July, MC Lethal Bizzle also called on Corbyn to stand down as Labour leader.


18.3.1. Creating a baseline shifting window
18.3.2. Baseline shifting a log
18.3.3. Saving the baseline shift
<IP_ADDRESS>. Save a baseline-shifted curve
<IP_ADDRESS>. Save baseline-shifted configuration
18.3.4. Applying a baseline shifting
<IP_ADDRESS>. From Baseline Shift window
<IP_ADDRESS>. From the Project Browser
18.4.1. Creating a split curve window
18.4.3. Saving the Split curve
<IP_ADDRESS>. Save a split-curve configuration
18.4.4. Applying a Split curve configuration
<IP_ADDRESS>. From Split curve window
<IP_ADDRESS>. From the Project Browser
18.6.1. Creating a depth shifting window
18.6.3. Saving the depth shift
<IP_ADDRESS>. Save a shifted curve
<IP_ADDRESS>. Save depth-shifted configuration
18.6.4. Applying a depth shifting
<IP_ADDRESS>. From Depth Shift window
<IP_ADDRESS>. From the Project Browser
18.10.1. Functional Transformation
18.11.4. Savisky-Golay Smoothing
18.12.1. Configure TVD Computation Task
18.12.2. Display TVD/TVDSS on the log-plot
<IP_ADDRESS>. Display TVD/TVDSS as log-plot reference
<IP_ADDRESS>. Display TVD/TVDSS in Depth track
The New Curve tool allows user to add new curve to a
dataset of a well.
To
add new curve: From Menu Bar, click on Data Processing tab
and choose New Curve, the New
Curve dialog pops up.
Figure 18‑1 Add new curve from Menu Bar
You can also add new curve directly from Project Browser by right-clicking on a Dataset and choosing New Curve option from its context menu.
Figure 18‑2 Add new curve from Project Browser
Curve Information:
·
Well: choose well to
create new curve.
·
Dataset: choose location
to save the New Curve.
·
Curve
Name: type the curve name by manual.
·
Curve
Type: define type of new curve as Numerical or Textual
·
Family: the family of new
curve.
·
Unit: choose the curve
unit.
·
Initial
Value: the starting value of new curve.
A
tool for displaying digital or statistical data. It allows you to edit the data
value and shows the statistics of each log and filters the desired zones. The Data Editor () locates at the Data processing tab.
There
are two ways to open the Data Editor
tool.
q Way 1:
Step 1.
From Menu Bar, choose Data Processing
tab > click on the Data Editor (). The Data Editor
window pops up
Step 2.
Drag and drop curves from the Data-Tree into
the Data editor window
Figure 18‑3 drag and drop curves into Data editor window
q Way 2:
Step 1.
Choose curve(s) on the Data tree.
Step 2.
Right-click on the selected curve(s) > choose the
Data Editor, the Data Editor window will appear.
Figure 18‑4 Open Data editor from data tree
Tips: You can select
multiple log curves by holding Shift/Ctrl while selecting.
·
Display log curve values at each depth point
·
The user can highlight data by zone on data board
·
Data can be edited manually by selecting a cell and
typing in a new value in or by pasting a table from Excel or other file types.
·
Data can be copied from the board directly to excel
sheet
·
Edited log curve can be saved by Right-click on it
and select Save as new
·
To overwrite an existing one, click Save Curve(s)
button
Figure 18‑5 Visualization – Data mode
Tips: users can modify the displayed number precision
according to the value format (it modifies the number of decimals)
·
The user can create new curves here by selecting Add
Curve ( ) button, the Add New Curve dialog pops
up > input the curve information and select OK. New curve will be
created and listed in the Data Editor window
Figure 18‑6 New curve dialog
Tips: Users can go to a particular line by pressing
Ctrl+G shortcut key. A pop-up window opens according to the Depth (D) or
Index (I) setting.
Display
curve information (number of unique values, standard deviation, mean value...)
Figure 18‑7 Visualization – Statistic mode
Display curve frequency information such as Count, Lower Bound, Upper Bound
Figure 18‑8 Visualization – Frequency mode
The data board only displays dataset lines in Limitation. The default was initially displayed whole well.
Data will be filtered by the
selected zone(s)
Figure 18‑9 Limit data by zone in a data editor
Select the range of
Index of data to be displayed
(Example: top 0 – bottom 20)
Figure 18‑10 Limit data by index in a data editor
Filter Data by the top and bottom depth values
(example: Top 2990.2- Bottom 2992.4)
Figure 18‑11 Limit data by depth in a data editor
Learning objectives
The baseline shift tool measures significant changes
to a system against previous references.
The equation used to shift the variable curve
according to the graphically defined points is: LOG_RESULT
= LOG + (BASELINE_ORIGIN – BASELINE)
After completing this module, you will know how to:
·
Manually
create a baseline-shifting window
·
Baseline-shift
a variable and a dataset
·
Save
and Load a baseline-shifted curve/dataset
·
Save
and Load a baseline-shift setting parameter table
This procedure shows you how to create a baseline-shifting
window
Step 1. Choose a Curve from data tree.
Step 2. Drag-and-drop the curve in an empty log track.
Step 3. Select the to-be-shifted curve > right-click on it and select Baseline Shift. The Baseline Shift window opens next to the current log-plot
Figure 18‑12 Creating a baseline
shift window
Baseline
shift window has 2 tracks:
· The first track (Origin) displays the original
log. In this track, the log cannot be modified.
· The second track (shifted curve) displays the baseline-shifted
log. It is only in this track that the curve can be baseline-shifted
After
you create the Baseline-shifting
window, you will be able to manually drop a curve for reference.
§ To pick the first shift point, Ctrl + Left-click on the log at the Origin track. A red shift point on a blue baseline will be created along the Origin track. Users can also shape the baseline by clicking on the Origin track to add more shift points.
§ Move the baseline left or right to shift the curve. The baseline curve (*_BLS) will be changed and updated automatically
§ At the right side, the baseline shift table gives information about depth position of every single point. It includes value and depth position of shifted point. You can manually enter a depth value, the shift point on log-plot will be updated automatically
Figure 18‑13 baseline shifting a log
Note (No*): If distant between two points is smaller than the step of the input dataset. The point will be removed.
Tips:
§
There are
two ways to remove a shift point. Click on it from baseline shift table, the
selected shift point will be highlighted in the shift points table. Choose the delete icon (). The 2nd
way, from log-plot you click on shift point, right - click and choose Delete.
§
Ctrl +
scroll mouse to change interval scale. It helps you focus on a small interval
in detail.
§
Because of
working in the cloud, so it is possible to zoom in or zoom out chrome at any
time during the operation.
After you are satisfied with a baseline-shift,
you can save the curve and save the applied base-shifted configuration.
Step 1.
Right-Click
on the shifted curve > choose Save
Curve (1)
Step 2.
Choose
the dataset to save the curve to in the Open Dataset pop-ups or create a
new dataset to put the curve in > OK
(2)
Step 3.
Choose
the name for the saving curve, by default the log curve will automatically take
the name of the curve with the suffix _BLS. Choose OK (3) to save the log and return to the current window
Figure 18‑14 Save baseline-shifted
curve
Step 1. Click the Save Icon () at the top right corner. A pop-up window will appear for you to choose the config name to be saved. By default, the config name will be automatically created
Figure 18‑15 Save baseline-shifted
configuration
Step 2.
Choose
OK to save the configuration and
return to the current window
Note:
all of the Baseline Shift configuration will be stored at Asset
Manager
This function allows you to load and
apply a saved base-shift configuration to a variable or a dataset.
Step 1.
In
the Project Browser, choose the curve
to shift and drag & drop it to the log-plot window
Step 2.
Right-click
on the log, choose Baseline Shift.
The Baseline Shift window will
appear
Step 3.
Choose
the load icon (). The open
parameter set pop-up window will appear.
Step 4.
Select
the configuration and choose OK
Figure 18‑16 Apply a saved
baseline-shifted configuration to a curve from baseline shift window
Step 1.
In
the Project Browser, right-click on a
dataset to shift. Choose Apply Baseline
Shift table
Step 2.
Select
the saved configuration to load in the saved Config Pop-up.
Step 3.
The
Baseline Shift Config will appear in the pop-up Baseline Shift Config window. You can reselect the interpolation
method, save mode and output suffix if needed. Confirm by choosing OK.
Step 4.
Select
the name for the dataset to be saved to (for curves)/ the newly created dataset
Figure 18‑17 Apply a saved
baseline-shifted configuration to a dataset from Project Browser
This procedure shows you how to create a baseline-shifting
window
Step 1. Choose a Curve from data tree.
Step 2. Drag-and-drop the curve in an empty log track.
Step 3. Select the to-be-split curve > right-click on it and select Split Curve. The Split Curve window opens next to the current log-plot
Figure 18‑18 Creating a Split curve
window
The
number of tracks in Split curve window may vary depending on the split points at
that moment
· The first track (Origin) displays the original log. In this track, the log cannot be
modified.
· The other track displays the split-log.
After
you create the Split curve window,
you will be able to manually drop a curve for reference.
§ To pick the first split point, Ctrl + left-click on the log at the Origin track. A red line will be created on the Origin track. The first split-curve result will be displayed next to Origin track
§ At the right side, the Split points table gives information about depth position of every single point. It includes the buffer and depth position of split point. You can manually enter a depth value, the split point on log-plot will be updated automatically
Figure 18‑19 Split a log
Tips:
§
There are
two ways to remove a shift point. Click on it from Split curve table, the
selected shift point will be highlighted in the shift points table. Choose the delete icon (). The 2nd
way, from log-plot you click on shift point, right - click and choose Delete.
§
Ctrl +
scroll mouse to change interval scale. It helps you focus on a small interval
in detail.
§
Because of
working in the cloud, so it is possible to zoom in or zoom out chrome at any
time during the operation.
After you are satisfied with a result, you
can save the curve and save the applied split-curve configuration.
Step 1. Right-Click on the split-curve result > choose Save Curve (1)
Step 2. Choose the dataset to save the curve to in the Open Dataset pop-ups or create a new dataset to put the curve in > OK (2)
Step 3. Choose the name for the saving curve, by default the log curve will automatically take the name of the curve with the suffix _SPLIT_@id. Choose OK (3) to save the log and return to the current window
Figure 18‑20 Save split-curve result
Step 1. Click the Save Icon () at the top right corner. A pop-up window will appear for you to choose the config name to be saved. By default, the config name will be automatically created
Figure 18‑21 Save baseline-shifted
configuration
Step 2.
Choose
OK to save the configuration and
return to the current window
Note:
all of the split-curve configuration will be stored at Asset
Manager
This function allows you to load and
apply a saved split-curve configuration to a variable or a dataset.
Step 1.
In
the Project Browser, choose the curve
to split and drag & drop it to the log-plot window
Step 2.
Right-click
on the log, choose Split Curve. The Split Curve window will appear
Step 3.
Choose
the load icon () at the top right corner. The Open
Parameter Set pop-up window will appear.
Step 4.
Select
the configuration and choose OK
Figure 18‑22 Apply a saved
split-curve configuration to a curve from Split curve window
Step 1. In the Project Browser, right-click on a dataset to shift. Choose Apply Baseline Shift table
Step 2. Select the saved configuration to load in the saved Config Pop-up.
Step 3. The Baseline Shift Config will appear in the pop-up Baseline Shift Config window. You can reselect the interpolation method, save mode and output suffix if needed. Confirm by choosing OK.
Step 4. Select the name for the dataset to be saved to (for curves)/ the newly created dataset
Figure 18‑23 Apply a saved split-curve
configuration to a dataset from Project Browser
Curve
Comparison tool allows user compares between pairs of curves. You can compare
curves from different datasets.
Step 1. From Menu Bar, choose Data Processing tab > click on Curve Comparison. The Curve Comparison window pops up
Figure 18‑24 Open Curve Comparison
tool from Menu Bar
Step 2. Curve 1 and Curve 2 which are the 2 curves need comparison. User just needs to drag and drop curves from the Data-Tree into these boxes
Step 3. Click Compare button to see the result. The Mean Squared Error and the Correlation Coefficient between the two curves will be represented by numbers and are automatically calculated by i2G.
Figure 18‑25 Curve Comparison task
Learning objectives
The
depth-shifting tool allows you
to depth-match a log according to reference logs.
After completing
this module, you will know how to:
·
Manually
create a depth-shifting window
·
Depth-shift
a variable and a dataset
·
Save
and Load a depth-shifted curve/dataset
·
Save
and Load a depth-shift setting parameter table
This procedure shows you how to create a
depth-shifting window
Step 1. Choose a log to shift from the data tree (1).
Step 2. Drag-and-drop the curve in an empty log track (2).
Step 3. Select the to-be-shifted curve > to right-click on it and select Depth shift (3). The Depth Shift window opens next to the current log-plot
Figure 18‑26 Creating a depth shift window
Depth
shift window has 2 tracks:
· The first track (Origin) displays the original
log. In this track, the log cannot be modified.
· The second track (shifted curve) displays the
depth-shifted log. It is only in this track that the curve can be depth-shifted
After
you create the Depth-shifting
window, you will be able to manually drop a curve for reference.
Figure 18‑27 Depth shift window
§ To pick the first shift point, Ctrl + Left-click on the log at the Origin track. A red line will be created on both the Origin and the Shifted with a connecting line between these two log tracks. On these tracks, the line represents a shift point.
§ On the right side, the depth shift table gives information about the depth position of every single point. It includes a depth position of origin and shifted. You can manually enter a depth value, the shift point on log-plot will be updated automatically
Figure 18‑28 Depth shifting a log
There are 3 methods of Depth-shifting:
Table 18‑13 methods of depth shifting
|
Method |
Fixed
first point |
Fixed
last point |
Add
point when stretching |
Remove
points when collapsing |
|
Interpolate |
Yes |
Yes |
Yes |
Yes |
|
Normal |
Yes |
Yes |
No |
No* |
|
Core |
No |
No |
No |
No* |
Note (No*): If distant between two points is smaller than the step of the input dataset. The point will be removed
Figure 18‑29 Fixed first point and last point
You
should bear in mind several important points when depth-shifting a log:
§ When only one shift point is present at core mode, the depth-shifting is equivalent to a block shift, as the curve is displaced in one block.
§ When two or more shift points are present, the depth-shifting is equivalent to stretching or squeeze when you move a shift point, as one of the bars locks the curve.
§ There are two ways to remove a shift point. Click on it from the depth shift table, the selected shift point will be highlighted in the shift points table. Choose the delete icon (). The 2nd way, from log-plot you click on shift point, right-click and choose Delete.
§ Ctrl + scroll mouse to change interval scale. It helps you focus on a small interval in detail.
§ Because of working in the cloud, so it is possible to zoom in or zoom out chrome at any time during the operation.
After you are satisfied with a
depth-shift, you can save the curve and save the applied depth-shifted
configuration.
Step 1.
Right-Click
on the shifted curve > choose Save
Curve
Step 2.
Choose
the dataset to save the curve to in the Open Dataset pop-ups or create a
new dataset to put the curve in > OK
Step 3.
Choose
the name for the saving curve, by default the log curve will automatically take
the name of the curve with the suffix _ds. Choose OK to save the log and return to the current UI
Figure 18‑30 Save the shifted curve
Step 1. Click the Save Icon () at the top right corner. A pop-up window will appear for you to choose the config name to be saved. By default, the config name will be automatically created
Figure 18‑31 Save depth-shifted configuration
Step 2.
Choose
OK to save the configuration and
return to the current UI
Note:
all of the Depth Shift configurations will be stored at Asset
Manager
This function allows you to load and
apply a saved depth-shift configuration to a variable or a dataset.
Step 1.
In
the Project data tree, choose the curve(s) to shift and drag & drop
it to the log-plot window
Step 2.
Right-click
on the log, Choose Depth Shift. The Depth
Shift Window will appear
Step 3.
Choose
the Load icon () (1).
The open parameter set pop-up window will appear.
Step 4.
Select
the configuration (2) and choose OK
Figure 18‑32 Apply a saved depth- shift configuration to
a curve from depth shift window
Step 1.
In
the Project Browser, right-click on a
dataset to shift. Choose Apply Depth
Shift table (1)
Step 2.
Select
the saved configuration to load in the saved Config Pop-up (2).
Step 3.
The
Depth Shift Config will appear in the pop-up Depth Shift Config window. You can reselect the interpolation
method, save mode and output suffix if needed. Confirm by choosing OK.
Step 4.
Select
the name for the dataset to be saved to (for curves)/ the newly created dataset.
All
tasks in Scalar Operation section
follow a Task frame including General, Input Configuration, Output Configuration, Input Selection
tab.
The basic arithmetic operations are addition (+), subtraction (-),
multiplication (*), and division (/).
From Menu
Bar, click on Data Processing tab > Scalar
Operation > Basic
Operation
Figure 18‑33 Open Basic Operation task from Menu Bar
Parameter
Table 18‑2 Parameters of Basic Operation task
|
Name |
Description |
Default value |
|
Method |
+; -; *; / |
+ |
|
Constant |
|
3.1416 |
From Menu
Bar, click on Data Processing tab > Scalar
Operation > Power
Figure 18‑34 Open Power task from Menu Bar
Parameter
Table 18‑3 Parameters of Power task
|
Name |
Default value |
|
Exponent |
3.1416 |
From Menu
Bar, click on Data Processing tab > Scalar
Operation > Round
Figure 18‑35 Open Round task from Menu Bar
Parameter
Table 18‑4 Parameters of Round task
|
Name |
Default value |
|
Precision |
2 |
From Menu
Bar, click on Data Processing tab > Scalar
Operation > Limit
Figure 18‑36 Open Limit task from Menu Bar
Parameter
Table 18‑5 Parameters of Limit task
|
Name |
Default value |
|
Min |
0 |
|
Max |
1 |
All
tasks in Curve Combination section
follow a Task frame including General, Input Configuration, Output Configuration, Input Selection
tab.
The basic combination is addition (+), subtraction (-),
multiplication (*), division (/), min, max, average and median.
From Menu
Bar, click on Data Processing tab > Curve
Combination > Basic
Combination
Figure 18‑37 Open Basic Combination task from Menu Bar
Parameter
Table 18‑5 Parameters of Basic Combination task
|
Name |
Description |
Default value |
|
Method |
+; -; *; /, min, max, average,
median |
+ |
From Menu
Bar, click on Data Processing tab > Curve
Combination > Linear
Combination
Figure 18‑38 Open Linear Combination task from Menu Bar
Parameter
Table 18‑6 Parameters of Linear Combination task
|
Name |
Default value |
|
Coefficient 1 |
1 |
|
Coefficient 2 |
1 |
From Menu
Bar, click on Data Processing tab > Curve
Combination > Merge
Curve
Figure 18‑39 Open Merge Curve task from Menu Bar
Parameter
Table 18‑7 Parameters of Merge Curve task
|
Name |
Description |
Default value |
|
Overlap |
2 merge types: Position or Mean |
Position |
All
tasks in Curve Interpolation section
follow a Task frame including General, Input Configuration, Output Configuration, Input Selection
tab.
Curve Filling tool allows user to fill the missing data of
a log (of plug type).
From Menu Bar, click on Data Processing tab
> Curve
Interpolation > Curve Filling
Figure 18‑40 Open Curve Filling task from Menu Bar
Parameter
Table 18‑8 Parameters of Curve Filling task
|
Name |
Description |
Default value |
|
Gaps Maximum Width |
The maximum distance in the
region lack of data that software can fill |
13 |
|
Width type |
The region that is lack of
data by In Sample or In Reference |
In Samples |
|
Mode |
Fill modes: Top value, Bottom value, Linear
Interpolation and Constant |
|
|
Constant |
|
100 |
Curve Resampling tool modifies the
sampling rate of a given curve and defines the interval in which resampling is
used
From Menu Bar, click on Data Processing tab
> Curve
Interpolation > Curve Resampling
Figure 18‑41 Open Curve Resampling task from Menu Bar
Parameter
Table 18‑9 Parameters of Curve Resampling task
|
Name |
Description |
Default value |
|
Mode |
Fill modes: Linear Interpolation, Depthshift (core) and Block (core) |
|
|
Window Size |
|
0 |
All
tasks in Curve Transformation section
follow a Task frame including General, Input Configuration, Output Configuration, Input Selection
tab.
From Menu Bar, click on Data Processing tab
> Curve
Transformation > Functional Transformation
Figure 18‑42 Open Functional Transformation task from Menu Bar
Parameter
Table 18‑10 Parameters of Functional Transformation task
|
Name |
Description |
Default value |
|
Method |
Pow10, sqrt, loge, log10, abs,
inv, acos, asin, atan, cos, sin, tan, exp and Exp10 |
Pow10 |
Curve Derivative feature to create the 1st
and 2nd derivative curves from an input curve
From Menu Bar, click on Data Processing tab
> Curve
Transformation > Curve Derivation
Figure 18‑43 Open Curve Derivation task from Menu Bar
The Curve Rescaling
tool allows user to rescale the wrong-scaled digitized log curve.
From Menu Bar, click on Data Processing tab
> Curve
Transformation > Curve Rescaling
Figure 18‑44 Open Curve Rescaling task from Menu Bar
Parameter
Table 18‑11 Parameters of Curve Rescaling task
|
Name |
Default value |
|
Input left scale |
0 |
|
Input right scale |
1 |
|
Output left scale |
0 |
|
Output right scale |
1 |
All
tasks in Curve Smoothing section
follow a Task frame including General, Input Configuration, Output Configuration, Input Selection
tab.
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > Median Smoothing
Figure 18‑45 Open Median Smoothing task from Menu Bar
Parameter
Table 18‑12 Parameters of Median Smoothing task
|
Name |
Default value |
|
Number of Levels |
5 |
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > Square Smoothing
Figure 18‑46 Open Square Smoothing task from Menu Bar
Parameter
Table 18‑13 Parameters of Square Smoothing task
|
Name |
Default value |
|
Number of Levels |
5 |
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > Bell Smoothing
Figure 18‑47 Open Bell Smoothing task from Menu Bar
Parameter
Table 18‑14 Parameters of Bell Smoothing task
|
Name |
Default value |
|
Number of Levels |
5 |
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > Savisky-Golay Smoothing
Figure 18‑48 Open Savisky-Golay Smoothing task from Menu Bar
Parameter
Table 18‑15 Parameters of Savisky-Golay Smoothing task
|
Name |
Default value |
|
Derivative Order |
0 |
|
Polynomial Order |
2 |
|
Number of Points |
5 |
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > FFT Smoothing
Figure 18‑49 Open FFT Smoothing task from Menu Bar
Parameter
Table 18‑16 Parameters of FFT Smoothing task
|
Name |
Default value |
|
Number of Cutoff |
100 |
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > Curve Convolution
Figure 18‑50 Open Curve Convolution task from Menu Bar
Parameter
Table 18‑17 Parameters of Curve Convolution task
|
Name |
Default value |
|
Coefficient 1 |
0.33 |
|
Coefficient 2 |
0.33 |
|
Coefficient 3 |
0.33 |
From Menu Bar, click on Data Processing tab
> Curve
Smoothing > Curve Deconvolution
Figure 18‑51 Open Curve Deconvolution task from Menu Bar
Parameter
Table 18‑18 Parameters of Curve Deconvolution task
|
Name |
Default value |
|
Coefficient 1 |
1 |
|
Coefficient 2 |
0 |
|
Coefficient 3 |
1 |
The TVD computation
tool generates a TVD from the
measured depth, the azimuth and the inclination of a deviated well
·
MD: Measured Depth
·
TVD: True Vertical Depth
·
TVDSS: True Vertical Depth Subsea
·
Elevator/KB/DF: Kelly Bushing/Drilling Rig Floor
·
X
Reference: Offset in the X
direction from the well position, measured from sea level
·
Y
Reference: Offset in the Y
direction from the well position, measured from sea level
Figure 18‑52 Reference depths
Step 1. From the Data Processing tab, select TVD Computation.
Figure 18‑53 Open TVD computation window
Step 2. In the Input Configuration selection window, choose these families: Hole Deviation and Hole Azimuth
Figure 18‑54 Input configuration for TVD computation task
Step 3. In the Input Selection window, drag wells into the Input area > select the proper input variables
Step 4. On the Parameter tab, select the Minimum Curvature equation to be used.
Tip: User can choose different formulas
including Average Angle, Balanced Tangential, Radius Curvature, Minimum Curvature
Step 5.
Set
the TVD Mode, Elevator, X reference, and Y
reference parameters. Then Click Run
Figure 18‑55 Define parameters for TVD computation task
Step 1.
Focus
on the log-plot area. Log-plot’s properties will be shown in the Properties Editor window
Step 2.
In
the Depth Reference list box, select
TVD/TVDSS. The whole log-plot will
be reloaded with the TVD/TVDSS as
reference
Figure 18‑56 Display TVD/TVDSS as log-plot reference
Step 1.
Focus
on Depth Track. Depth
track’s properties will be shown in the Properties
Editor window
Step 2.
In
the Depth Reference list box, select
TVD/TVDSS
Figure 18‑57 Display TVD/TVDSS in depth track


The modern software engineer faces a set of problems that did not exist 15 years ago. Looking at the advancement of processing power in recent years signals the end of Moore’s Law. The clock speeds of modern processors seem to be plateauing and the only way to make things go faster is to add more processing cores. With the ever-increasing need to process more and more data, our software architectures need to adapt in order unlock the full potential of the hardware.
Almost all computer programs have to store some kind of state in order to be useful. However, state is the enemy of concurrent processing. There has been a resurgence in the popularity of functional programming in recent years. This trend is largely driven by the need to take advantage of multi-core processors. In a functional paradigm the result of a unit of work is only dependent on its input and not dependent on any external state. Let’s look at the classic example of calculating the nth Fibonacci number in Java:
1
2
3
4
5
6
7
8
9
public int fibonacci(int n) {
if(n == 1) {
return 0;
} else if(n == 2) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
The return value of this function is not dependent on any state that is external to the function. In fact, this function does not store any state whatsoever (note how there are no assignment statements). In order to achieve a completely stateless function, this implementation uses recursion, meaning that the function calls itself within the function body.
Recursion is a technique that is used frequently in the functional paradigm. Some functional languages like Haskell do not even have looping constructs and rely wholly on recursion to implement loops. The main advantage of recursion is that it eliminates the need for maintaining state during loops but as a downside it has a negative effect on the amount of RAM required. Thankfully, RAM is extremely cheap in this day and age.
A slightly more stateful implementation of the Fibonacci function is as follows:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public int fibonacci(int n) {
if (n == 1){
return 0;
} else if (n == 2){
return 1;
}
int n_minus2 = 0;
int n_minus1 = 1;
int n;
for (int i = 3; i <= n; i++){
n = n_minus2 + n_minus1;
n_minus2 = n_minus1;
n_minus1 = n;
}
return n;
}
In this implementation the state of variables n_minus2
, n_minus1
and n
is kept and therefore recursion is not necessary. From a system-boundary perspective this implementation still meets some of the requirements of a functional paradigm such as the fact that the return value is only dependent on the input and not on any external state.
By eliminating dependence on external state, many of these fibonacci calculations can be done in parallel across multiple different processors and still produce the correct results. This allows us to use these types of functions with event-driven architectures to aid in parallelization.
I frequently use an event-driven framework called vert.x in my own developments. This framework supports both the classic publish-subscribe pattern and also a point-to-point messaging pattern where an event is only consumed by a single handler.
Stay tuned for a blog post explaining the basics of event processing in vert.x.
UPDATE:
After publishing this post a friend of mine, Rijnard van Tonder, made some good comments about whether or not my code examples are truly stateless.
The point is that even though there are no assignment statements in the function body itself, this does not mean that there is no state being kept. The function is given a function argument (an initial state) and a value is returned (another state). His conclusion is that the function is in fact stateful but that the state is implicit.
These are his exact words:
Some thoughts on this. Your pure recursive version of fibonacci isn’t “completely stateless”–it very much keeps state of what’s going on. On an abstract level, recursive calls can be realized with a stack data structure representing each “iteration” state. Most of the time, this stack can be omitted in the case of tail-recursion. In your case, there are no explicit local variables (well, there’s n), but that does not mean that there’s no state: for instance, you supply your function with an initial state (n) and receive your fibonacci number back (another state). So perhaps the correct wording here is to say that the state is implicit.
Functional programming styles tend to favor making state implicit “until you need something explicitly”. If this idea interests you, I recommend you read up on continuation-passing style for fun (just as a taster). CPS breaks away from traditional imperative programming by removing the need for “return” statements.


In a computer game there are many levels.
The first levels are easy. Then they get harder.
To beat the game you must keep playing.
Life
is like a game.
Prepare yourself of the next level.
Pictured left: Tony Fleming, Director and Founder of the Eastmont Computing Center, and John (JT) Thompson, Inventor of the Lingo Programming Language and Teacher.
Announcing the Lingo Club at the Eastmont
Computing Center in East Oakland.
John Thompson
has created the Lingo Club, an ongoing class for teen aged youth in Game Design
and Computer Programming. The Lingo Club aims to empower youth by teaching them
how to make their own computer games using the Lingo Programming Language. Lingo
is used in Macromedia Director
software to create games at popular sites like www.shockwave.com.
Classes meet at the Eastmont Computing Center in East Oakland, Monday and Thursday, from 4pm to 6pm, begining September 18. Contact: Tony Fleming Phone:<PHONE_NUMBER><EMAIL_ADDRESS>www.eastmont.net, www.lingoclub.com.
The new Macintosh Lab at the Eastmont Computing Center will be the home of the nations first Lingo Club.
The Eastmont Computing Center provides free computer access and classes for all ages. Located in East Oakland the center has been in operation for 3 years.


Specifications
Why do you include specifications that are not part of HTML5?
HTML5 means different things to different people. You could argue that HTML5 only includes features that are
defined in the W3C HTML5 specification. Or you could argue that it includes every specification, draft or
experimental feature that is added to browsers in the last couple of years. We decided to take the middle
ground and split the test into three parts: the official HTML5 specification, specifications that are related
to HTML5 and some experimental new features that are extensions of HTML5.
Many of the related specifications were at one time part of HTML5. During the development of the specification
they were moved to separate specifications.
But WebGL isn't even a W3C specification!
The W3C isn't the only organization that creates open specifications for the web. The WebGL specification is
published by Kronos, the same group that is also responsible for OpenGL. WebGL is related to HTML5 though and
listed as one of the HTML5 technologies on the W3C HTML5 logo page. The W3C HTML5 specification allows the
canvas element to be extended by new drawing methods and WebGL is one of them.
Why do you test for Web SQL?
The Web SQL specification has been deprecated and replaced by the IndexedDB specification. It is however
still commonly used on mobile phones and at least three vendors have shipped desktop browsers supporting Web SQL. We've decided to include
this specification, but make it a special case. Web SQL is worth 5 points, but only if IndexedDB is not supported.
IndexedDB is worth 10 points. If a browser supports both, only 10 points are awarded. This way browsers
that only included IndexedDB are not penalized, but browsers that only support Web SQL do get some points.
Scoring
What is the maximum number of points you can score?
If a browser passes all tests it would receive the maximum score of 555. Previous
versions of the HTML5test had less tests and therefore also a lower maximum score, such as 160, 300, 450, 475 and 500 points.
Previous versions of this test also awarded bonus points for some features, but as of version 5, we
no longer do.
The scoring seems arbitrary, who decides how many points are awarded?
We decided to award points for each feature depending on how important that feature is for web developers
and how difficult it is to implement that feature. A small and simple feature would be worth less points than a
large and complicated feature. We think this is the most honest way to grade browsers, because otherwise a browser
that only supports the small and simple features would score as high or higher than a browser that went the
extra mile and decided to tackle the big features. But in the end it is based on personal preference,
but I doubt there is a truly objective alternative.
Reporting
Can my browser be included on the 'other browser' and 'compare' pages?
We would love to add new browsers, but not all browsers are eligible. First of all we only accept browsers that
are publicly available, either in beta form or a final release. We do not accept scores for internal development builds.
Secondly we only accept browsers that are available in English. We want to check browsers before including them and
unfortunately we do not speak Chinese, Japanese, Korean or Russian. And finally we only accept browsers which have a
unique score. There are many browsers that are forks or modified versions of Chromium or Firefox. Similarly there
are many browser that embed Internet Explorer or Webkit as provided by the operating system. These browser
do not qualify. For comparisons, simply choose the original browser on which the browser was based instead.
We retain the right to make exceptions to any of the rules above and to remove or refuse any browser we deem
necessary.
What happens when a browser cheats?
We cannot distinguish between a browser that supports a particular feature and a browser that lies about supporting
that feature. The only way to deal with these situations it to manually confirm the test results. And if a browser
is found to be overly confident about claiming support for certain features we can put that browser on a blacklist.
That means that that even though the browser claims to support a particular feature, we ignore what the browser says and do
not give any points. This is usually just a temporary problem and once the browser has been fixed we will remove
the new version from the blacklist.
Claiming to support a feature which isn't working is not just causing problems for the reliability of the
test results, but there are other real-world problems. For example if you claim to support WebGL, a website may decide
to serve WebGL content. If your browser does not support WebGL, the website may fail in an uncontrollable way. If you
correctly denied support for WebGL, the website may have served alternative content that would work in your browser.
If you claim to support features that you don't, you are breaking the web.
If we find that a browser is structurally lying about which features they support - deliberately or not - we will
usually give a warning to the developers of the browser and if the problem hasn't been fixed in the next version
we will remove the browser from the 'other browser' and 'compare' pages and/or give other penalties. In extreme
cases we may block the browser from showing test results and show a warning instead.
Methods
Why are you using browser sniffing?
Unfortunately, in two very specific cases we are forced to use browser sniffing. The first case is contentEditable
which was not supported on many older mobile devices. Yet almost all mobile browsers claim to support contentEditable
.
Fortunately modern mobile devices are starting to support contentEditable
, but this left us with a problem. We
cannot reliably detect if a browser has proper support. The only way around this is to use a whitelist of
mobile browsers that do support this feature, otherwise you risk awarding points to mobile browsers that they
do not deserve. The second case is drag and drop, which is also not supported on mobile phones and tablets.
Please open a new issue on Github when you believe a
browser should be included on the whitelist.
Privacy
What kind of data is collected from visitors?
Each time you visit this website your score and test results are logged on our servers.
We also store the user agent of your browser which contains information about the browser,
operating system and device you are using. The collected information is solely used to
generated anonymized reports about HTML5 support in browsers and improve the quality of
our software.
We do not store cookies in your browser, but we do use several external components that do,
including: Google Analytics, BuySellAds, Facebook, Twitter and Google+.


All My Favorite Things
Click on the buttons below to display my favorite things
Books
Sleep
Pasta
Candy
Add more of my favorite things


Standard output
07:12:36.487 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-2.zip
07:12:36.490 [Test worker] INFO o.m.release.comparison.ZipCompare - 4 entries matched
07:12:36.492 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-2.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip
07:12:36.545 [Test worker] INFO o.m.release.comparison.ZipCompare - 4 entries matched
07:12:36.549 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-7.zip
07:12:36.551 [Test worker] INFO o.m.release.comparison.ZipCompare - 0 entries matched
07:12:36.554 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-7.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip
07:12:36.555 [Test worker] INFO o.m.release.comparison.ZipCompare - 0 entries matched
07:12:36.559 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-3.zip
07:12:36.565 [Test worker] INFO o.m.release.comparison.ZipCompare - x/y/4.txt does not match
07:12:36.567 [Test worker] INFO o.m.release.comparison.ZipCompare - 3 entries matched
07:12:36.568 [Test worker] INFO o.m.release.comparison.ZipCompare - 1 entries did not match
07:12:36.569 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-4.zip
07:12:36.571 [Test worker] INFO o.m.release.comparison.ZipCompare - x/y/4.txt not found in /tmp/junit3946602394650918670/junit3797238190565299914/zip-4.zip
07:12:36.572 [Test worker] INFO o.m.release.comparison.ZipCompare - 3 entries matched
07:12:36.573 [Test worker] INFO o.m.release.comparison.ZipCompare - 1 entries did not match
07:12:36.575 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-5.zip
07:12:36.576 [Test worker] INFO o.m.release.comparison.ZipCompare - x.txt not found in /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip
07:12:36.578 [Test worker] INFO o.m.release.comparison.ZipCompare - 4 entries matched
07:12:36.589 [Test worker] INFO o.m.release.comparison.ZipCompare - 1 entries did not match
07:12:36.593 [Test worker] INFO o.m.release.comparison.ZipCompare - Comparing /tmp/junit3946602394650918670/junit3797238190565299914/zip-1.zip with /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip
07:12:36.594 [Test worker] INFO o.m.release.comparison.ZipCompare - 1.txt not found in /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip
07:12:36.595 [Test worker] INFO o.m.release.comparison.ZipCompare - x/2.txt not found in /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip
07:12:36.596 [Test worker] INFO o.m.release.comparison.ZipCompare - x/y/3.txt not found in /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip
07:12:36.597 [Test worker] INFO o.m.release.comparison.ZipCompare - x/y/4.txt not found in /tmp/junit3946602394650918670/junit3797238190565299914/zip-6.zip
07:12:36.597 [Test worker] INFO o.m.release.comparison.ZipCompare - 0 entries matched
07:12:36.601 [Test worker] INFO o.m.release.comparison.ZipCompare - 4 entries did not match


WebGL 2 Example: Depth of Field
Features: Vertex Arrays, Uniform Buffers, Immutable Textures, Depth Textures, texelFetch, Hardware Instancing
Source code