TABLE OF CONTENT
In this post, I’m going to configure the continuous delivery process for Azure WebApp (Azure Function in this case, but that’s pretty much the same) with Octopus Deploy. To make it a little bit interesting I’m going to use Configuration-as-Code approach with a brand new Octopus provider for Terraform.
Buckle up and let’s get started…
Tools #
Terraform #
I’m going to need terraform
on my machine:
Octopus Deploy #
For this post, I’ve signed up for a free tier of Octopus Deploy SaaS offering. Of course, the self-hosted version will work as well.
When signed up and configured my account I can generate a new API key that I’m going to use with Terraform
All configuration is going to be made against the default Space (Spaces-1
), however, that’s configurable too.
Azure #
To connect Octopus Deploy with Azure I’m going to need a Service Principal.
# (!) make sure to follow the principle of least privilege here
# and define the role and scope
az ad sp create-for-rbac --name sp-octopus-deploy
Grap the tenant Id, application Id, password, and subscription Id values. We’ll heed them later.
Azure Function #
For the demo, I’m going to use this super simple Azure Function that replies to your GET request with a list of headers supplied.
The complete source code is published here.
the .csx
gist is the following
Azure DevOps #
I’m running the CI part in Azure DevOps.
Project configuration is pretty simple and it’s terraform set up can be found here.
the pipeline itself it here.
Nothing complicated:
- Build Azure Function
- Pack Azure DevOps artifact (zip)
- Upload it to Octopus Deploy’s built-in feed
- Create new Octopus Deploy release
- Trigger the deployment
Init #
Terraform provider is no different from other providers and can be found on Terraform Registry
and terraform init
will download missing files
Configuration #
For the demo, I’m going to have this terraform.tfvars
file to provide configuration values to Terraform.
Configure Environment #
Now we’re ready to start. At first, I’m going to configure a new Environment.
Environments are how you organize your deployment targets (whether on-premises servers or cloud services) into groups that represent the different stages of your deployment pipeline, for instance, development, test, and production.
You’d probably have more than one, but that’ll do for now.
Deployment Target #
The next crucial part is Deployment Target
With Octopus Deploy, you can deploy software to Windows servers, Linux servers, Microsoft Azure, AWS, Kubernetes clusters, cloud regions, or an offline package drop. Regardless of where you’re deploying your software, these machines and services are known as your deployment targets.
I’m using octopusdeploy_azure_web_app_deployment_target
, It’s quite specific. I could have used a more generic octopusdeploy_deployment_target
instead.
This is where I link Azure (my Service Principal) with Octopus.
Now we have a nice and clean infrastructure defined in Octopus.
Project #
The next step is to configure our Project.
Projects let you create and manage your deployment processes, releases, and runbooks from the Octopus REST API and Octopus Web Portal.
I’m setting up an Echo Api
project here, placing it into Default Project Group
with the default lifecycle.
Deployment process #
And now the juicy part.
My deployment is not complicated actually, just one step that is picking up the package from a built-in feed and pushing it to my only environment.
I wish all deployments were that simple…
Release #
Release creation process is driven by Azure DevOps pipeline. The process is split into two stages. Release Creation
and Deployment
.
Create Release stage #
This stage uploads the build artifact to the built-in package feed, submits metadata and creates a new release.
Deploy release stage #
OctopusDeployRelease
task will trigger a new deployment process
Voilà, it’s up and running.
Import #
The neat part about Octopus Deploy is its resource ID’s system. It’s always easy to find the id of the object which makes it super easy to import existing resources into your terraform state.
Let’s assume that I already have an environment configured and I want to adopt it so that I can manage it with Terraform.
https://cloud-eng.octopus.app/app#/Spaces-1/infrastructure/machines?environmentIds=Environments-7
The URL looks this way. Environments-7
is the id of my environment.
All it takes to import the environment is to declare the resource and type one command:
this is such a breath of fresh air comparing to long and not so easy way to get Ids in Azure :)
Happy provisioning!


| Project Documentation |
|
||||||||||||||||
|
Online documentation is available discussing the approaches taken for the various conversion steps. Instructions on how to use the software are in the User Guide. The project roadmap is here There is a discussion on the practicalities of converting VB code to Python on the Wiki.
The project is developed using Leo, a literate outlining editor. · Form rendering in Python is using the PythonCard system. · For parsing VB we use the simpleparse package.
And, of course, the project would not be possible (or of any use!) without Python.
A full list of credits is available here.
|
||||||||||||||||


A great way to get introduced to AngularJS is to work through this tutorial, which walks you through the construction of an AngularJS web app. The app you will build is a catalog that displays a list of Android devices, lets you filter the list to see only devices that interest you, and then view details for any device.
Work through the tutorial to see how Angular makes browsers smarter — without the use of extensions or plug-ins. As you work through the tutorial, you will:
And all of this works in any browser without modification to the browser!
When you finish the tutorial you will be able to:
The tutorial guides you through the entire process of building a simple application, including writing and running unit and end-to-end tests. Experiments at the end of each step provide suggestions for you to learn more about AngularJS and the application you are building.
You can go through the whole tutorial in a couple of hours or you may want to spend a pleasant day really digging into it. If you're looking for a shorter introduction to AngularJS, check out the Getting Started document.
You can follow this tutorial and hack on the code in either the Mac/Linux or the Windows environment. The tutorial relies on the use of Git versioning system for source code management. You don't need to know anything about Git to follow the tutorial. Select one of the tabs below and follow the instructions for setting up your computer.
You'll need Git, which you can get from the Git site.
Clone the angular-phonecat repository located at Github by running the following command:
git clone https://github.com/angular/angular-phonecat.git
This command creates the angular-phonecat
directory in your current
directory.
Change your current directory to angular-phonecat
:
cd angular-phonecat
The tutorial instructions, from now on, assume you are running all commands from the angular-phonecat
directory.
You will also need Node.js and Karma to run unit tests, so please verify that you have
Node.js v0.10 or better installed
and that the node
executable is on your PATH
by running the following
command in a terminal window:
node --version
Additionally install Karma and its plugins if you don't have it already:
npm install
You will need an http server running on your system. Mac and Linux machines typically
have Apache pre-installed, but If you don't already have one installed, you can use node
to run scripts/web-server.js
, a simple bundled http server.
You will need Node.js and Karma to run unit tests, so please verify that you have
Node.js v0.10 or better installed
and that the node
executable is on your PATH
by running the following
command in a terminal window:
node --version
Additionally install Karma if you don't have it already:
npm install -g karma
You'll also need Git, which you can get from the Git site.
Clone the angular-phonecat repository located at Github by running the following command:
git clone https://github.com/angular/angular-phonecat.git
This command creates the angular-phonecat
directory in your current directory.
Change your current directory to angular-phonecat
:
cd angular-phonecat
The tutorial instructions assume you are running all commands from the angular-phonecat
directory.
You should run all git
commands from Git bash.
Other commands like test.bat
or e2e-test.bat
should be
executed from the Windows command line.
You need an http server running on your system, but if you don't already have one
already installed, you can use node
to run scripts\web-server.js
, a simple
bundled http server.
The last thing to do is to make sure your computer has a web browser and a good text editor installed. Now, let's get some cool stuff done!


Realtime Clock (RTC) Words¶
zeptoforth has support for reading and setting the realtime clock (RTC) on the Raspberry Pi Pico, both for keeping track of the date and time and for triggering an alarm.
Note that the Raspberry Pi Pico’s RTC’s value is not preserved across resets, even if power is applied, so each time it is reset the RTC’s value must be provided a value before it can be useful. It is initialized on bootup to Thursday, 1 January 1970 00:00:00, and is enabled on boot.
The alarm functionality allows triggering an alarm interrupt at a given combination of second, minute, hour, day of the week, day, month, and/or year values. Note that the alarm interrupt must either reset the alarm date/time to a new one or clear the alarm or otherwise it will be repeatedly triggered, which in most use cases is undesirable.
Date time values are validated when provided, except that year values of -1 and values for other fields of $FF are ignored during validation, as they are explicit non-values used for setting a subset of RTC fields or matching against a subset of RTC fields.
Also provided is code for formatting date/times as strings and printing them to the console, for convenience’s sake.
Note that a subset of these words are provided for platforms other than the Raspberry Pi Pico, specifically all of these words aside from enable-rtc
, disable-rtc
, date-time!
, simple-date-time!
, set-rtc-alarm
, and clear-rtc-alarm
.
rtc
¶
The following words are in the rtc
module:
date-time-size
¶
( – bytes )
This returns the size of a date/time structure in bytes.
date-time-year
¶
( date-time – addr )
This returns the address of a cell in a date/time containing a year, from 0 to 4095, or when not setting a year or not matching against a year, -1
date-time-month
¶
( date-time – c-addr )
This returns the address of a byte in a date/time containing a month, from 1 to 12, or when not setting a month or not matching against a month, 255
date-time-day
¶
( date-time – c-addr )
This returns the address of a byte in a date/time containing a day, from 1 to any of 28, 29, 30, or 31 depending on the month and year, or when not setting a day or not matching against a day, 255
date-time-dotw
¶
( date-time – c-addr )
This returns the address of a byte in a date/time containing a day of the week, from 0 representing Sunday to 6 representing Saturday, or when not setting a day of the week or not matching against a day of the week, 255.
date-time-hour
¶
( date-time – c-addr )
This returns the address of a byte in a date/time containing an hour, from 0 to 23, or when not setting an hour or not matching against an hour, 255.
date-time-minute
¶
( date-time – c-addr )
This returns the address of a byte in a date/time containing a minute, from 0 to 59, or when not setting a minute or not matching against a minute, 255.
date-time-second
¶
( date-time – c-addr )
This returns the address of a byte in a date/time containing a second, from 0 to 59, or when not setting a second or not matching against a second, 255.
enable-rtc
¶
( – )
Enable the realtime clock. (Note that it is enabled by default.)
disable-rtc
¶
( – )
Disable the realtime clock.
date-time@
¶
( date-time – )
Get the current date/time.
date-time!
¶
( date-time – )
Set the current date/time.
simple-date-time!
¶
( year month day hour minute second – )
A convenience word to the current date/time at once, automatically calculating the day of the week. The arguments have the same meanings, respectively, as the date-time-year
, date-time-month
, date-time-day
, date-time-hour
, date-time-minute
, and date-time-second
of a date/time structure except that for all of these, not just the year, may have values of -1 to indicate unchanged values. Also, note that if year is -1, month is -1 or 255, or day is -1 or 255, the day of the week is not changed.
set-rtc-alarm
¶
( date-time xt – )
Set xt to execute as an RTC alarm interrupt handler at date-time, ignoring a year field of -1 and any of the other fields of 255. Note that when xt is executed it must reset the RTC alarm to a new date/time or clear the RTC alarm or else it will be triggered repeatedly.
clear-rtc-alarm
¶
( – )
Clear the RTC alarm.
dotw-name
¶
( dotw – c-addr u )
Get the name of a day of the week.
month-name
¶
( month – c-addr u )
Get the name of a month.
max-date-time-format-size
¶
( – bytes )
Get the maximum size in bytes of a date formated with format-date-time
.
format-date-time
¶
( c-addr date-time – c-addr u )
Format date-time as a string starting at c-addr, and return the resulting string as the pair c-addr u.
date-time.
¶
( date-time – )
Print a date/time as formatted with format-date-time
.
get-dotw
¶
( date-time – dotw )
Calculate the day of the week for a date/time, ignoring its day of the week field; 0 is Sunday and 6 is Saturday. Note that if the date-time-year
field of date-time is -1, the date-time-month
field of date-time is 255, or the date-time-day
field of date-time is 255, 255 will be returned for the day of the week.
update-dotw
¶
( date-time )
Update the day of the week for a date/time, ignoring its preexisting day of the week field. Note that if the date-time-year
field of date-time is -1, the date-time-month
field of date-time is 255, or the date-time-day
field of date-time is 255, 255 will be set for the day of the week.


The Dot Com Bubble set off with the emergence of Amazon and eBay in the second half of the 1990s. Amazon, with being noticed at Wall Street, worked towards customer satisfaction. On the other hand, eBay had to hire a business analyst to understand the stocks only to come up with the per share price going up to $50 a share from $18 a share.
Amazon started off with selling books and the strategy of Get Big Fast. This meant that Jeff Bezos was working on bringing in more traffic to his website rather than focusing on profits. After hiring a BA and the per share price, eBay undoubtedly did not go unnoticed on Wall Street.
After the Dot Com Bubble had gained some momentum, every developer out there started migrating to the Silicon Valley.
It was not much later that Intel set foot in the Bubble with the high speed fibre optic cables to provide a worldwide connection across trillions of computers and provide a helping hand to considerably increase bandwidth.
A tech-trio in Europe came up with the ideology of public key cryptography to ensure safe online payment transactions and more scope in the technology market.
Programmers of any age group started creating online commerce platforms. The Bubble was growing in size. This brought a recession for the traditional analysts and they started losing their jobs.
Nasdaq and day traders were minting profits as were all the hungry investors and venture capitalists by investing huge sums of money to gain a position in the new business.
As they say, everything that comes up also has to go down. The Dot Com Bubble had started popping. Amazon’s book publishers, for instance, were getting immense hatred because random people were posting negative reviews on the website. Jeff Bezos came up saying, “Selling books is your business, customer satisfaction - is mine.”
Nasdaq crashed down by 335 points with creating humongous monetary losses and a day termed to be The Black Friday. Later came the 9/11 which almost burst the Bubble, crashed the stock market, recession was at its peak, all the e-commerce platforms without a plan hit the rock bottom with full speed.
Wonder how Amazon and eBay survived? Well, they had a plan and perfect crisis management skills. Later in the 2000s, YouTube and Facebook walked on the same footsteps and created a standing in the market. Hence, the Dot Com Bubble turned out to be a boon in creating a new economy globally.


Philippines’ Duterte to VP Robredo: keep state secrets or lose your ‘drugs tsar’ post
ALBA, Italy: Rising global temperatures are worrying truffle hunters around the Italian town of Alba, where the most prized specimens can fetch twice the price of gold.
This particularly warm October, eight out of 10 white truffles unearthed by Carlo Olivero with his trusty 3-year-old dog Steel were dark, withered and dried out.
To stave off the longer-term climate change impact on the production of the highly prized white truffle, experts have launched initiatives to better preserve the territory where they grow.
Alba has earned the moniker “white truffle capital of the world” for its particularly fragrant variety, its truffle fair each fall and annual charity auction. A truffle weighing 1,005 grams (2 pounds, 3.4 ounces) fetched 120,000 euros ($133,000) at the recent auction.


I've learned a bit more about html/css standards, responsive design, and UX since the first version of my site. Here, I'll be redesigning my site using what I've since learned.
My website should be very simple. There are only two important things to present: myself, and my work. As such, I've divided my site into two parts: an about section, and a projects section.
At the very top is my name. In the about section, I'll have an image of myself, and a brief bio. In the projects section, I'll have all my projects housed in little containers. Each project container will have the title, a link to the website, and a link to the source code on github.
The only UX changes I think I need to make are making the line-height of the bio section larger, so that's it's easier to read.
Since my site is so simple, it will be very easy to make it responsive. I'll set a max-width on the body and leave the width of most of my elements unformatted, so that everything sort of wraps around neatly when the screen is made smaller.
More detail: in the about section, I'll have the image float left, with a margin on the right, so that the text wraps around the image when the screen is smaller.
In the Projects section, I'll have the project containers and their content float left, so that everything adapts fluidly when the screen size changes.


Bedroom
Go To Hallway
you found the murderer
Play Again?


06st Nov 2018:
Controversial Theme in Peruvian Andes Brokeback Mountain
What happens when a father-figure image is destroyed? This is the focus of Peruvian director Álvaro Delgado-Aparicio L. in his debut film Retablo, screened in our main feature film program. A visually lavish film set in the magnificent mountain landscapes could be called a Peruvian Andes Brokeback Mountain.
Breathtaking nature, however, hides the cruelty of an intolerant community. This is what 14-year-old Segundo learns, whose his father is a respectable craftsman in a remote village, skilful in making altar paintings for churches and households, known as retablo. He passes on his skill to his son who realises that keeping the family tradition will fall on his back and he will remain in the mountains forever. Things get complicated when Segundo accidentally finds out about his father’s sexual preferences, which will force him to face the deeply religious and conservative community. Trapped in a chauvinist environment, Segundo will try to cope with what is troubling him in silence.
However, Retablo is much more than a father-son relationship story; it explores human survival in an eternal struggle between modern lifestyle and the conventional and traditional. Director Delgado-Aparicio L., a trained psychologist, masterfully examines the burden of heritage, boundaries of love and family expectations, as well as the complexity of accepting our parents the way they are. Finally, the question is raised of how to regain tolerance and acceptance.
The film won a Special Mention in Generation 14plus section and the best debut award (L’Oréal Paris Teddy Award) at this year’s Berlinale. It premiered in 2017 at the Lima International Film Festival, winning the best Peruvian film category. After excellent reviews and awards for debut film at several other festivals, Álvaro Delgado-Aparicio L. is often mentioned as the name to watch. We will have a chance to meet him in person in Zagreb, and the audience will be able to ask all the delicate questions pertaining to the film after the screening in a Q&A.


Remove the www/index.html file and add there the content of the www folder of your Ionic application.
www/index.html
www


The program that we've written so far has a design shortcoming: It throws away each homework grade as soon as it has read it. Doing so is fine for computing averages, but what if we wanted to use the median homework grade instead of the average?
The most straightforward way to find the median of a collection of values is to sort the values into increasing (or decreasing) order and pick the middle one—or, if the number of values is even, take the average of the two values nearest the middle.
A bit of thinking should convince us that to compute medians, we must change our program fundamentally. In order to find the median of an unknown number of values, we must store every value until we have read them all. To find the average, we were able to store only the count and running total of the items we'd read. The average was just the total divided by the count.
To compute the median, we must read and store all the homework grades, then sort them, and finally pick the middle one (or two). To do this computation conveniently and efficiently, we need a way to
The standard library provides a type, named vector, that we can use to solve all these
problems easily. A vector
holds a sequence of values of a given type, grows as needed
to accommodate additional values, and lets us get at each individual value efficiently.
Let's start rewriting our grading program by making it put the grades into a vector
,
instead of computing the sum and throwing the grades away. The original version of that code looked like
// original program (excerpt): int count = 0; double sum = 0; double x; // invariant: // we have read count grades so far, and // sum is the sum of the first count grades while (cin >> x) { ++count; sum += x; }
This loop kept track of how many grades it read, and kept a running total of their value.
The need to keep both these variables in step with the values as we read them made the
loop invariant relatively complicated. In contrast, using a vector
to store values as we
read them is much simpler:
// revised version of the excerpt: double x; vector<double> homework; // invariant: homework contains all the homework grades read so far while (cin >> x) homework.push_back(x);
We haven't changed the basic structure of our code: It still reads values one at a time into
x
until it encounters end-of-file or invalid input. What's different is what we do with
those values.
Let's start with homework
, which we define as having type vector<double>
. A
vector
is a container that holds a collection of values. All of the values in an individual
vector
are the same type, but different vector
s can hold objects of different types.
Whenever we define a vector
, we must specify the type of the values that the vector
will hold. Our definition of homework
says that it is a vector
, which will hold values of
type double
.
The vector
type is defined using a language feature called template classes. We'll see
how to define a template class in Chapter 11. For now, what's important is to realize that
we can separate what it means to be a vector
from the particular type of the objects that
the vector
holds. We specify the type of the objects inside angle brackets. For example,
objects of type vector<double>
are vector
s that hold objects of type double
, objects
of type vector<string>
hold string
s, and so on.
The while
loop operates by reading values from the standard input and storing them
in the vector
. As before, we read into x
until we hit end-of-file or encounter input that
is not a double
. What is new is
homework.push_back(x);
As with greeting.size()
in §1.2/14, we can see that push_back
is a member function,
which is defined as part of the vector
type, and that we are asking that function to
act on behalf of the object named homework
. We call that function, passing it x
. What
push_back
does is append a new element to the end of the vector
. It gives that new
element the value that we passed as the argument to push_back
. Thus, push_back
pushes its argument onto the back of a vector
. As a side effect, it increases the size of the
vector
by one.
Because the push_back
function is such a good match for what we're trying to do, it
is trivial to see that calling it will maintain our loop invariant. Therefore, it is clear that
when we drop out of the while
, we will have read all the homework grades and stored
them in homework
, which is what we wanted.
Next, we have to think about the output.
In the original version of the program from §3.1/35, we calculated the student's grade within the output expression itself:
streamsize prec = cout.precision(); cout << "Your final grade is " << setprecision(3) << 0.2 * midterm + 0.4 * final + 0.4 * sum / count << setprecision(prec) << endl;
where final
and midterm
held the exam grades, and sum
and count
contained the sum
of all the homework grades and the count of how many grades were entered.
As we remarked in §3.2.1/41, the easiest way to calculate the median is to sort our data and then find the middle value, or the average of the two middle values if we have an even number of elements. We can make the computation easier to understand if we separate the computation of the median from the code that writes the output.
In order to find the median, we begin by noting that we are going to need to know the
size of the homework
vector at least twice: once to check whether the size is zero, and
again to compute the location of the middle element(s). To avoid having to ask for the
size twice, we will store the size in a local variable:
typedef vector<double>::size_type vec_sz; vec_sz size = homework.size();
The vector
type defines a type named vector<double>::size_type
, and a function
named size
. These members operate analogously to the ones in string:
The type
defined by size_type
is an unsigned
type guaranteed sufficient to hold the size of the
largest possible vector
, and size()
returns a size_type
value that represents the
number of elements in the vector
.
Because we need to know the size in two places, we will remember the value in a local
variable. Different implementations use different types to represent sizes, so we cannot
write the appropriate type directly and remain implementation-independent. For that
reason, it is good programming practice to use the size_type
that the library defines to
represent container sizes, which we do in naming the type of size
.
In this example, that type is unwieldy to write—and to read. To simplify our program,
we have used a language facility that we haven't encountered before, called a typedef.
When we include the word typedef
as part of a definition, we are saying that we want
the name that we define to be a synonym for the given type, rather than a variable of that
type. Thus, because our definition includes typedef
, it defines the name vec_sz
as a
synonym for vector<double>::size_type
. Names defined via typedef
have the
same scope as any other names. That is, we can use the name vec_sz
as a synonym for
the size_type
until the end of the current scope.
Once we know how to name the type of the value that homework.size()
returns, we
can store that value in a local variable, named size
, of the same type. It is worth noting
that even though we are using the name size
for two different purposes, there is no conflict
or ambiguity. The only way to ask for the size of a vector
is by putting a call to the
size
function on the right-hand side of a dot, with a vector
on the left-hand side. In
other words, the size
that is defined as a local variable is in a different scope than the
one that is an operation on vector
s. Because these names are in different scopes, the
compiler (and the programmer) can know which size
is intended.
Because it is meaningless to find the median of an empty dataset, our next job is to verify that we have some data:
if (size == 0) { cout << endl << "You must enter your grades. " "Please try again." << endl; return 1; }
We can detect this state of affairs by checking whether size
is zero. If it is, the most sensible
action is to complain and stop the program. We do so by returning 1 to indicate failure.
As discussed in Chapter 0, the system presumes that if main
returns 0, the program
succeeded. Returning anything else has an implementation-defined meaning, but most
implementations treat any nonzero value as failure.
Now that we have verified that we have data, we can begin computing the median. The first part of doing so is to sort the data, which we do by calling a library function:
sort(homework.begin(), homework.end());
The sort
function, defined in the <algorithm>
header, rearranges the values in a container
so that they are in nondecreasing order. We say nondecreasing instead of increasing
because some elements might be equal to one another.
The arguments to sort
specify the range of elements to be sorted. The vector
class
provides two member functions, begin
and end
, for this kind of usage. We'll have much
more to say about begin
and end
in §5.2.2/81, but what is important for now is to know
that homework.begin()
denotes the first element in the vector
named homework
,
whereas homework.end()
denotes (one past) the last element in homework
.
The sort
function does its work in place: It moves the values of the container's elements
around rather than creating a new container to hold the results.
Once we have sorted homework, we need to find the middle element or elements:
vec_sz mid = size/2; double median; median = size % 2 == 0 ? (homework[mid] + homework[mid-1]) / 2 : homework[mid];
We begin by dividing size
by 2 in order to locate the middle of the vector
. If the number
of elements is even, this division is exact. If the number is odd, then the result is the
next lower integer.
Exactly how we compute the median depends on whether the number of elements is even or odd. If it is even, the median is the average of the two elements closest to the middle. Otherwise, there is an element in the middle, the value of which is the median.
The expression that assigns a value to median
uses two new operators: the remainder
operator, %
, and the conditional operator, often called the ? :
operator.
The remainder operator, %
, returns the remainder that results from dividing its left
operand by its right operand. If the remainder after dividing by 2 is 0, then the program
has read an even number of elements.
The conditional operator is shorthand for a simple if-then-else expression. First, it
evaluates the expression, size % 2 == 0
, that precedes the ?
part of the operator as a condition
to obtain a bool
value. If the condition yields true
, then the result is the value of
the expression between the ?
and the :
that follows; otherwise, the result is the value of
the expression after the :
. So, if we read an even number of elements, we'll set median
to
the average of the two middle elements. If we read an odd number, then we'll set
median
to homework[mid]
. Analogous to &&
and ||
, the ? :
operator first evaluates
its leftmost operand. Based on the resulting value, it then evaluates exactly one of its
other operands.
The references to homework[mid]
and homework[mid-1]
show one way to access
an element of a vector
. Every element of every vector
has an integer, called its index,
associated with it. So, for example, homework[mid]
is the element of homework
with
index mid
. As you might suspect from §2.6/30, the first element of the vector
named
homework
is homework[0]
, and the last element is homework[size - 1]
.
Each element is itself an (unnamed) object of the type stored in the container. So,
homework[mid]
is an object of type double
, on which we can invoke any of the operations
that type double
supports. In particular, we can add two elements, and we can
divide the resulting sum by 2 to get the average value of the two objects.
Once we know how to access the elements of homework
, we can see how the median
computation works. Assume first that size
is even, so that mid
is size / 2
. Then there
must be exactly mid
elements of homework
on each side of the middle:
Because we know that each half of homework
has exactly mid
elements, it should be easy
to see that the indices of the two elements nearest the middle are mid - 1
and mid
; the
median is the average of these elements.
If the number of elements is odd, then mid
is really (size-1) / 2
, because of truncation.
In that case, we can think of our sorted homework
vector as two segments with mid
elements
each, separated by a single element in the middle. That element is the median:
In either case, our median computation relies on the ability to access a vector
element
knowing only its index.
Once we have computed the median, We need only compute and write the final grade:
streamsize prec = cout.precision(); cout << "Your final grade is " << setprecision(3) << 0.2 * midterm + 0.4 * final + 0.4 * median << setprecision(prec) << endl;
The final program isn't much more complicated than the program in §3,1/35, even though
it does much more work. In particular, even though our homework
vector will grow as
needed to accommodate grades for as many homework assignments as our students can
tolerate, our program doesn't need to worry about obtaining the memory to store all
those grades. The standard library does all that work for us.
Here is the entire program. The only parts that we have not already mentioned are the
#include
directives, the corresponding using
-declarations, and a few more comments:
#include <algorithm> #include <iomanip> #include <ios> #include <iostream> #include <string> #include <vector> using std::cin; using std::sort; using std::cout; using std::streamsize; using std::endl; using std::string; using std::setprecision; using std::vector; int main() { // ask for and read the student's name cout << "Please enter your first name: "; string name; cin >> name; cout << "Hello, " << name << "!" << endl; // ask for and read the midterm and final grades cout << "Please enter your midterm and final exam grades: "; double midterm, final; cin >> midterm >> final; // ask for and read the homework grades cout << "Enter all your homework grades, " "followed by end-of-file: "; vector<double> homework; double x; // invariant: homework contains all the homework grades read so far while (cin >> x) homework.push_back(x); // check that the student entered some homework grades typedef vector<double>::size_type vec_sz; vec_sz size = homework.size(); if (size == 0) { cout << endl << "You must enter your grades. " "Please try again." << endl; return 1; } // sort the grades sort(homework.begin(), homework.end()); // compute the median homework grade vec_sz mid = size/2; double median; median = size % 2 == 0 ? (homework[mid] + homework[mid-1]) / 2 : homework[mid]; // compute and write the final grade streamsize prec = cout.precision(); cout << "Your final grade is " << setprecision(3) << 0.2 * midterm + 0.4 * final + 0.4 * median << setprecision(prec) << endl; return 0; }
This code contains some points that deserve particular attention. First, there's a bit more
to know about why we exit the program if homework
is empty. Logically, taking the
median of an empty collection of values is undefined—we have no idea what it might
mean. Therefore, exiting does the right thing: If we don't know what to do, we might
as well quit. But it is important to know what would happen if we had continued execution.
If the input were empty, and we neglected to test that we had read at least one number,
the code to compute the median would fail. Why?
If we had read no elements, then homework.size()
, and therefore size
, would be
0. Likewise, mid
would be 0. When we executed homework[mid]
, we would be looking
at the first element (the one indexed by 0) in homework
. But there are no elements in
homework
! When we execute homework[0]
, all bets are off as to what we get. vector
s
do not check whether the index is in range. Such checking is up to the user.
The next important observation is that vector<double>::size_type
, like all
standard-library size types, is an unsigned integral type. Such types are incapable of storing
negative values at all; instead, they store values modulo 2n, where n depends on the
implementation. So, for example, there would never be any point in checking whether
homework.size() < 0
, because that comparison would always yield false
.
Moreover, whenever ordinary integers and unsigned integers combine in an expression,
the ordinary integer is converted to unsigned. In consequence, expressions such
as homework.size() - 100
yield unsigned results, which means that they, too, cannot be
less than zero—even if homework.size() < 100
.
Finally, it is also worth noting that the execution performance of our program is actually
quite good, even though the vector<double>
object grows as needed to accommodate
its input, rather than being allocated with the right size immediately.
We can be confident about the program's performance because the C++ standard imposes performance requirements on the library's implementation. Not only must the library meet the specifications for behavior, but it must also achieve well-specified performance goals. Every standard-conforming C++ implementation must
vector
so that appending a large number of elements to a vector
is no
worse than proportional to the number of elementssort
to be no slower than nlog(n), where n is the number of elements
being sortedThe whole program is therefore guaranteed to run in nlog(n) time or better on any standard-conforming implementation. In fact, the standard library was designed with a ruthless attention to performance. C++ is designed for use in performance-critical applications, and the emphasis on speed pervades the library as well.


The GrADS data descriptor file defines a grid structure into which the data will fit -- it gives "shape" to the data by identifying its spatial dimensions, the number of time steps, and the number of variables.
If the data is in binary format, its structure has already been
prescribed. If the data is in GRIB format, no consistent
relationship exists between the data and the grid structure defined in the data
descriptor file. Hence, the need for the gribmap
utility which "maps"
between the GRIB data and the GrADS data description.
As gribmap
reads each field in the GRIB data file, the
parameters for that field (e.g. variable name, vertical level, time)
are compared to the information in the data descriptor file until
a match is found. The process continues until all the GRIB elements have been
"mapped" to their location within the GrADS grid structure. Please read the documentation on Handling GRIB in GrADS for more details.
Command line |
|
-0 |
Ignores the forecast time when setting up a match, so that the base time is the valid time. |
-b |
Valid time for averages is set to be the beginning of the period rather than
the end. Default valid time is the end of the averaging period. |
-big |
(GrADS version 2.0.a8+) Required option if the GRIB1 or GRIB2 files are > 2 Gb. This option creates a bigger index file, which cannot be read by earlier versions of GrADS. |
-e |
Ignores extra bytes (that are not part of the GRIB1 msg) at end of file. Some ECMWF GRIB files require this option because
of blocking.
Using the -E option ignores extra bytes in middle and/or end of GRIB file. |
-f hr |
Matches only those grib records whose forecast time is hr hours. This is used to isolate a sequence of forecasts. For example, if you
wanted to sample all the 120-hour forecasts from the MRF ensemble runs, you
would use gribmap -f120 . |
-h num |
Skips over num bytes before starting the scan process. |
-help |
Prints out the list of options |
-i fname |
fname is the name of the data descriptor file. If
not specified, gribmap will prompt the user. |
-m |
Use base time from descriptor file instead of GRIB header. This option only works with GRIB1. |
-min0 |
Ignores the minutes code. |
-N |
Does NOT write out the index file. |
-new |
(GrADS version 2.1.a2+) Creates a new version of an existing index file |
-old |
(GrADS version 2.1.a2+) Creates an old version of an existing index file |
-q |
Quiet mode -- suppresses all messages except for errors. Default is off. |
-s num |
Skips over no more than num bytes between records. The
default is 1000. |
-t0 |
Matches only those grib records whose base time is the same as the initial time in the data descriptor file. This is used to pull out a forecast sequence (0, 12, 24, ... , 72 hours) starting a specific time. |
-u |
Updates existing index file when expanding the size of the T or E dimensions in a templated data set. Only one dimension may be expanded at a time. This option was temporarily disabled in GrADS version 2.0.*, but is back in version 2.1.a2. (See Usage Notes and Examples below.) |
-v |
Verbose mode -- detailed output makes it easier to verify what is being mapped. Default is off. |
Over the many years of GrADS development, the contents of the index file created by gribmap
have changed only a few times. Although it is not present in the user interface, there is a version number associated with the index file. When the contents of the index are different and the version has been upgraded, you will get an error message when trying to read that file with an older version of GrADS. Index files created with gribmap
version 2.1.a2+ have a new version number and therefore they can only be read by GrADS version 2.1.a2+. If you need to use an older version of GrADS to open a dataset with an index file created by gribmap
version 2.1.a2+, you must first reformat the metadata in the index file by running gribmap
again with the -old
option.
The -old
option (introduced with GrADS version 2.1.a2) allows you to downgrade the version of an index file so that it may be read by any version of GrADS. The -old
option does not re-scan the GRIB files, it merely alters the metadata in the index file's header to match the old version. There are some cases when the -old
option cannot be used: an index file that was created with the -big
option cannot be downgraded with -old
because that would require a change to the format of the data in the index file, not just the metadata in the index file's header.
The -u
option was disabled in version 2.0* because of the introduction of the E dimension, but has been restored in version 2.1.a2, so that now both the T and E dimensions can be updated. The EDEF and TDEF entries must be updated separately -- only one dimension can be expanded at a time. Reviving the update feature necessitated a change to the metadata in the index file's header, so the index version has changed with GrADS 2.1.a2.
If you have an old index file that you would like to update, first use the -new
option to rewrite the index file with the additional metadata. The -new
option does not re-scan the GRIB files, it merely upgrades the metadata in the index file's header.
Suppose you have an existing GRIB dataset (a reanalysis) that needs to have its time axis extended. To use the update feature without having to re-scan all files, follow these steps:
1. Do not alter the descriptor file (yet). Run gribmap -new
to upgrade the metadata in the index file and change the index version.
2. Edit the descriptor file to expand the TDEF size. Do not change the name of the file in the INDEX entry.
3. Run gribmap -u
with the edited descriptor file.
4. Run gribmap -old
to downgrade the metadata in the new index file.
Step #4 is optional, but it allows older versions of GrADS to read the updated data file. Without step #4, only the newest version of GrADS (2.1.a2+) will be able to open the updated descriptor file.


My Project Bank
Register
Sign in
Getting Started
Administration
Agriculture
Arts
Education
Engineering
Environmental Science
Health Science
Pharmacy
Science
Social Science
Law


CoderBox is a Progressive Web App (PWA) designed by developers for developers. It contains common dev tools needed for day to day coding environment.
CoderBox is an Open Source project. If you'd like to contribute, please visit:
CoderBox is a Progressive Web App (PWA) designed by developers for developers. It contains common dev tools needed for day to day coding environment.
CoderBox is an Open Source project. If you'd like to contribute, please visit:


Filter pane is hidden in the embedded report and recreated by developer to allow custom branding or special preconfigured filters.
Store > Name Contains Direct
Store > Name contains 'Wash' or contains 'Park'
Store > Name contains 'Wash' or contains 'Park' (Page: District Monthly Sales)


Main page
Sports
Sport Centers
Home page
Sports
Sport Centers
Sportify
Admin panel
My Cart
Logout
Login
Register


lvextend --size 120G logical_volume- Increase a volume's size by 40 GB as well as the underlying filesystem:
lvextend --size +40G -r logical_volume- Increase a volume's size to 100% of the free physical volume space:
lvextend --size 100%FREE logical_volume


Jindal Saw Consolidated September 2019 Net Sales at Rs 2,681.59 crore, down 9.41% Y-o-Y
Reported Consolidated quarterly numbers for Jindal Saw are:
Net Sales at Rs 2,681.59 crore in September 2019 down 9.41% from Rs. 2,960.12 crore in September 2018.
Quarterly Net Profit at Rs. 301.04 crore in September 2019 up 209.78% from Rs. 97.18 crore in September 2018.
EBITDA stands at Rs. 371.03 crore in September 2019 down 2.77% from Rs. 381.61 crore in September 2018.
Jindal Saw EPS has increased to Rs. 9.41 in September 2019 from Rs. 3.04 in September 2018.
Jindal Saw shares closed at 88.70 on October 31, 2019 (NSE) and has given 9.37% returns over the last 6 months and 4.17% over the last 12 months.
| Jindal Saw | |
| Consolidated Quarterly Results | in Rs. Cr. |
| Sep'19 | Jun'19 | Sep'18 | |
| Net Sales/Income from operations | 2,681.59 | 3,056.46 | 2,960.12 |
| Other Operating Income | -- | -- | -- |
| Total Income From Operations | 2,681.59 | 3,056.46 | 2,960.12 |
| EXPENDITURE | |||
| Consumption of Raw Materials | 1,609.13 | 1,766.46 | 1,915.12 |
| Purchase of Traded Goods | 48.19 | 175.08 | 50.95 |
| Increase/Decrease in Stocks | -99.33 | -50.49 | -139.27 |
| Power & Fuel | -- | -- | -- |
| Employees Cost | 241.99 | 238.87 | 234.50 |
| Depreciation | 100.73 | 100.21 | 100.49 |
| Excise Duty | -- | -- | -- |
| Admin. And Selling Expenses | -- | -- | -- |
| R & D Expenses | -- | -- | -- |
| Provisions And Contingencies | -- | -- | -- |
| Exp. Capitalised | -- | -- | -- |
| Other Expenses | 539.96 | 530.15 | 553.64 |
| P/L Before Other Inc., Int., Excpt. Items & Tax | 240.92 | 296.18 | 244.69 |
| Other Income | 29.38 | 25.18 | 36.43 |
| P/L Before Int., Excpt. Items & Tax | 270.30 | 321.36 | 281.12 |
| Interest | 155.30 | 146.07 | 170.44 |
| P/L Before Exceptional Items & Tax | 115.00 | 175.29 | 110.68 |
| Exceptional Items | -24.48 | -- | -- |
| P/L Before Tax | 90.52 | 175.29 | 110.68 |
| Tax | -167.49 | 64.33 | 36.98 |
| P/L After Tax from Ordinary Activities | 258.01 | 110.96 | 73.70 |
| Prior Year Adjustments | -- | -- | -- |
| Extra Ordinary Items | -1.24 | -1.52 | -0.78 |
| Net Profit/(Loss) For the Period | 256.77 | 109.44 | 72.92 |
| Minority Interest | 44.26 | 21.93 | 24.26 |
| Share Of P/L Of Associates | -- | -- | -- |
| Net P/L After M.I & Associates | 301.04 | 131.37 | 97.18 |
| Equity Share Capital | 63.95 | 63.95 | 63.95 |
| Reserves Excluding Revaluation Reserves | -- | -- | -- |
| Equity Dividend Rate (%) | -- | -- | -- |
| EPS Before Extra Ordinary | |||
| Basic EPS | 9.41 | 4.11 | 3.04 |
| Diluted EPS | 9.41 | 4.11 | 3.04 |
| EPS After Extra Ordinary | |||
| Basic EPS | 9.41 | 4.11 | 3.04 |
| Diluted EPS | 9.41 | 4.11 | 3.04 |
| Public Share Holding | |||
| No Of Shares (Crores) | -- | -- | -- |
| Share Holding (%) | -- | -- | -- |
| Promoters and Promoter Group Shareholding | |||
| a) Pledged/Encumbered | |||
| - Number of shares (Crores) | -- | -- | -- |
| - Per. of shares (as a % of the total sh. of prom. and promoter group) | -- | -- | -- |
| - Per. of shares (as a % of the total Share Cap. of the company) | -- | -- | -- |
| b) Non-encumbered | |||
| - Number of shares (Crores) | -- | -- | -- |
| - Per. of shares (as a % of the total sh. of prom. and promoter group) | -- | -- | -- |
| - Per. of shares (as a % of the total Share Cap. of the company) | -- | -- | -- |
| Source : Dion Global Solutions Limited |


Register
Username:
Email:
Phone:
Password:
Confirm Password:
Date Of Birth:
© Copyright 2020 TechyStuff


Inclusion of NBFIs in IBC is credit positive for lenders, says Moody’s
It expects the RBI to selectively approach the Insolvency and Bankruptcy Code to resolve NBFIs with severe liquidity or solvency issues
by Our BureauThe inclusion of Non-Banking Finance Institutions (NBFIs) in the Insolvency and Bankruptcy Code (IBC) is credit positive for India’s banks and will limit the losses for the creditors, according to Moody's Investor Service.
Underscoring that banks are NBFIs’ largest lenders, the global credit agency reasoned that the IBC rule provides for the orderly resolution of a stressed company. Until now, the only resolution framework for NBFIs was through liquidation.
“We expect an orderly resolution process via the IBC will help limit losses for creditors as compared with liquidation,” said Alka Anbarasu, VP-Sr Credit Officer, and Graeme Knowd, MD-Banking.
Moody's expects the Reserve Bank of India (RBI) to selectively approach the Insolvency and Bankruptcy Code (IBC) to resolve NBFIs with severe liquidity or solvency issues, or to resolve companies whose weak corporate governance is deterring potential buyers.
It also expect banks and the RBI to utilise other debt restructuring options before approaching the IBC.
Under the amended law, the resolution process can only be initiated by RBI. This is a departure from one of the core aspects of the IBC, wherein any creditor to a company can initiate the insolvency process as long as they can prove that there has been a default by the company, Moody's said.
The RBI is authorized to appoint an administrator as well as an advisory committee, that will oversee the resolution process.
“RBI’s close involvement in the process indicates the NBFI sector’s importance to overall financial stability, including the direct effect of any systemically important NBFI’s failure on banks and other credit providers,” the agency said in a statement.
Also read: RBI supersedes DHFL board, appoints an administrator
On 20 November, following the change in the IBC law, the RBI initiated a resolution process of Dewan Housing Finance Limited (DHFL), a stressed housing financing company. The RBI superseded DHFL‘s board because of corporate governance issues and defaults by the company to its creditors.
The RBI also appointed an administrator and an advisory committee to the administrator, who will oversee the resolution process. Moody's said that since July 2019, banks and other creditors to DHFL have been unsuccessful in trying to restructure the company’s liabilities.
- Get Free Trial
- Hurry! Prices Increase Soon
Existing users, please Sign in here
Thank you for being a loyal user of Portfolio.
Portfolio will be a paid section hereon.
Please Subscribe to get access to one of our early bird packs. Or click on Free Trial to get 14 days free trial.
What You'll Get
-
Web + Mobile
Access exclusive content of the Hindu Businessline across desktops, tablet and mobile device.
-
Exclusive Portfolio and Investment Advice, Banking, Lifestyle and Specials
Get diverse set of perspectives from our trusted experts on Portfolio, Banking, Economy, Environment and others.
-
Ad free experience
Experience cleaner site with zero ads and faster load times.
-
Personalised dashboard
Customize your preference and get a personalized recommendation of stories based on your interest.
- Get Free Trial
- Hurry! Prices Increase Soon
Existing users, please Sign in here


The Fibonnaci number sequence was introduced by an Italian mathematician. The sequece is 0, 1, 1, 2, 3, 5, 8, 13, 21 .... This sequence follows a pattern defined by the rules shown below. The Golden Ratio "ϕ" if the ratio between two adjacent values in the sequence.
The ratio of each number in the sequence of Fibonacci numbers approximates the golden ratio ϕ.
The Man
Leonardo Bonacci, later named Fibonnaci by Italian mathematician Guglielmo Libri, was the son of an Italian merchant and customs officer stationed in Northern Africa. Fibonacci traveled around the Mediterannean learning forms of arithmetic and found the Hindu-Arabic numeric system to have many advantages over other systems such as the Roman numeral system. It makes business calculations much easier. He published the book Liber Abaci ("The Book of Calculation") in 1202. He suggest the use of digits 0-9 which made modern calculations possible. This book was found to be useful for the banking industry.


Honors & Awards
College of Engineering Dean’s List, University Honors Jan. 2020
The Dean’s Honor List recognizes UM students that have 3.5 GPA or better for the term.
Tang Junyuan UM – SJTU JI Scholarship Aug. 2019
The scholarship of the highest level in UM – SJTU JI (Top 1% in UM – SJTU JI).
China National Scholarship Nov. 2018
The scholarship of the highest level in China (Top 0.2% in China).
UM – SJTU JI Academic Writing Contest, 2nd Prize Nov. 2018
The award to recognize my essay Would Zhuangzi Agree with Himself? (Top 1% in UM – SJTU JI).
A-level Excellent Undergraduate Scholarship Nov. 2018
This is to award SJTU students for excellent academic performances (Top 1% in UM – SJTU JI).
Shanghai Jiao Tong University Outstanding Student Oct. 2018
This honor recognizes students of outstanding overall performance.


nips nips2004 nips2004-8 nips2004-8-reference knowledge-graph by maker-knowledge-mining
Source: pdf
Author: Olivier Chapelle, Za\
Abstract: Choice-based conjoint analysis builds models of consumer preferences over products with answers gathered in questionnaires. Our main goal is to bring tools from the machine learning community to solve this problem more efﬁciently. Thus, we propose two algorithms to quickly and accurately estimate consumer preferences. 1
[1] B. E. Boser, I. M. Guyon, and V. N. Vapnik. A training algorithm for optimal margin classiﬁers. In Proc. 5th Annu. Workshop on Comput. Learning Theory, 1992.
[2] W. Chu and Z. Ghahramani. Gaussian processes for ordinal regression. Technical report, University College London, 2004.
[3] T. Evgeniou, C. Boussios, and G. Zacharia. Generalized robust conjoint estimation. Marketing Science, 25, 2005.
[4] Z. Harchaoui. Statistical learning approaches to conjoint estimation. Technical report, Max Planck Institute for Biological Cybernetics, to appear.
[5] R. Herbrich, T. Graepel, and K. Obermayer. Large margin rank boundaries for ordinal regression. In Advances in Large Margin Classiﬁers. MIT Press, 2000.
[6] J. Huber and K. Zwerina. The importance of utility balance in efﬁcient choice designs. Journal of Marketing Research, 33, 1996.
[7] T. S. Jaakkola and D. Haussler. Probabilistic kernel regression models. In Artiﬁcial Intelligence and Statistics, 1999.
[8] T. S. Jaakkola and M. I. Jordan. Bayesian logistic regression: a variational approach. Statistics and Computing, 10:25–37, 2000.
[9] T. Jebara. Convex invariance learning. In Artiﬁcial Intelligence and Statistics, 2003.
[10] C. A. Micchelli and M. Pontil. Kernels for multi–task learning. In Advances in Neural Information Processing Systems 17, 2005.
[11] Sawtooth Software. Research paper series. Available at www.sawtoothsoftware.com/techpap.shtml#hbrel.
[12] B. Sch¨ lkopf and A. Smola. Learning with kernels. MIT Press, 2002. o
[13] A. Schwaighofer, V. Tresp, and K. Yu. Hierarchical bayesian modelling with gaussian processes. In Advances in Neural Information Processing Systems 17, 2005.
[14] M. Tipping. Bayesian inference: Principles and practice. In Advanced Lectures on Machine Learning. Springer, 2004.
[15] S. Tong and D. Koller. Support vector machine active learning with applications to text classiﬁcation. In Journal of Machine Learning Research, volume 2, 2001.
[16] O. Toubia, J. R. Hauser, and D. I. Simester. Polyhedral methods for adaptive choicebased conjoint analysis. Journal of Marketing Research, 41(1):116–131, 2004.
[17] V. Vapnik and O. Chapelle. Bounds on error expectation for support vector machines. Neural Computation, 12(9), 2000.
[18] C. K. I. Williams and D. Barber. Bayesian classiﬁcation with gaussian processes. IEEE Trans. Pattern Anal. Mach. Intell., 20, 1998.


Address: 127.127.27.u
Reference ID: MSFa / MSF / DCF / WWVB
Driver ID: MSF_ARCRON
Serial Port: /dev/arcu; 300 baud, 8-bits, 2-stop, no parity
Features: tty_clk
This driver supports the Arcron MSF, DCF and WWVB receivers. The clock reports its ID as "MSFa'', "MSF'', "DCF'' or "WWVB'' to indicate the time source.
This documentation describes v1.3 (2003/2/21) of the source and has been tested against ntpd 4.1.0 on linux x86. Changes from v1.1 and v1.2 include patches to work with the new ntp-4 code, clock support for DCF and WWVB configurable via mode flag, an option to ignore resync request (for those of us at the fringes of the WWVB signal, for instance), averaging of the signal quality poll and several bug fixes, code cleanup and standardizations. In all other respects, the driver works as per v1.1 if a mode is not specified.
To use the alternate modes, the mode flag must be specified. If the mode flag is 0, or unspecified, the original MSF version is assumed. This should assure backwards compatibility and should not break existing setups.
The previous documentation described version V1.1 (1997/06/23) of the source and had been tested (amongst others) against ntpd3-5.90 on Solaris-1 (SunOS 4.1.3_U1 on an SS1 serving as a router and firewall) and against ntpd3-5.90 on Solaris-2.5 (on a SS1+ and TurboSPARC 170MHz). That code will claimed increased stability, reduced jitter and more efficiency (fewer context switches) with the tty_clk discipline/STREAMS module installed, but this has not been tested. For a to-do list see the comments at the start of the code.
This code has been significantly slimmed down since the V1.0 version, roughly halving the memory footprint of its code and data.
This driver is designed to allow the unit to run from batteries as designed, for something approaching the 2.5 years expected in the usual stand-alone mode, but no battery-life measurements have been taken.
Much of this code is originally from the other refclock driver files with thanks. The code was originally made to work with the clock by Derek Mulcahy, with modifications by Damon Hart-Davis. Thanks also to Lyndon David for some of the specifications of the clock. Paul Alfille added support for the WWVB clock. Christopher Price added enhanced support for the MSF, DCF and WWVB clocks.
There is support for a Tcl/Tk monitor written by Derek Mulcahy that examines the output stats; see the ARC Rugby MSF Receiver page for more details and the code. Information on the WWVB version is available from Atomic Time as their Atomic Time PC.
Look at the notes at the start of the code for further information; some of the more important details follow.
The driver interrogates the clock at each poll (ie every 64s by default) for a timestamp. The clock responds at the start of the next second (with the start bit of the first byte being on-time). In the default or original MSF mode, the time is in `local' format, including the daylight savings adjustment when it is in effect. The driver code converts the time back to UTC. In modes 1-3 the driver can be configured for UTC or local time depending on the setting of flag1.
The clock claims to be accurate to within about 20ms of the broadcast time, and given the low data transmission speed from clock to host, and the fact that the clock is not in continuous sync with MSF, it seems sensible to set the `precision' of this clock to -5 or -4, -4 being used in this code, which builds in a reported dispersion of over 63ms (ie says ``This clock is not very good.''). You can improve the reported precision to -4 (and thus reduce the base dispersion to about 31ms) by setting the fudge flag3 to 1.
Even a busy and slow IP link can yield lower dispersions than this from polls of primary time servers on the Internet, which reinforces the idea that this clock should be used as a backup in case of problems with such an IP link, or in the unfortunate event of failure of more accurate sources such as GPS.
By default this clock reports itself to be at stratum 2 rather than the usual stratum 0 for a refclock, because it is not really suited to be used as other than a backup source. The stratum reported can be changed with the stratum directive to be whatever you like. After careful monitoring of your clock, and appropriate choice of the time1 fudge factor to remove systematic errors in the clock's reported time, you might fudge the clock to stratum 1 to allow a stratum-2 secondary server to sync to it.
In default mode, the driver code arranges to resync the clock to MSF at intervals of a little less than an hour (deliberately avoiding the same time each hour to avoid any systematic problems with the signal or host). Whilst resyncing, the driver supplements the normal polls for time from the clock with polls for the reception signal quality reported by the clock. If the signal quality is too low (0--2 out of a range of 0--5), we chose not to trust the clock until the next resync (which we bring forward by about half an hour). If we don't catch the resync, and so don't know the signal quality, we do trust the clock (because this would generally be when the signal is very good and a resync happens quickly), but we still bring the next resync forward and reduce the reported precision (and thus increase reported dispersion).
If we force resyncs to MSF too often we will needlessly exhaust the batteries the unit runs from. During clock resync this driver tries to take enough time samples to avoid ntpd losing sync in case this clock is the current peer. By default the clock would only resync to MSF about once per day, which would almost certainly not be acceptable for NTP purposes.
The driver does not force an immediate resync of the clock to MSF when it starts up to avoid excessive battery drain in case ntpd is going to be repeatedly restarted for any reason, and also to allow enough samples of the clock to be taken for ntpd to sync immediately to this clock (and not remain unsynchronised or to sync briefly to another configured peer, only to hop back in a few poll times, causing unnecessary disturbance). This behaviour should not cause problems because the driver will not accept the timestamps from the clock if the status flag delivered with the time code indicates that the last resync attempt was unsuccessful, so the initial timestamps will be close to reality, even if with up to a day's clock drift in the worst case (the clock by default resyncs to MSF once per day).
When alternate modes 1-3 are selected, the driver can be configured to ignore the resync requests by setting flag2 to 1. This allows clocks at the fringe of the signal to resync at night when signals are stronger.
The clock has a peculiar RS232 arrangement where the transmit lines are powered from the receive lines, presumably to minimise battery drain. This arrangement has two consequences:
This driver, running on standard Sun and x86 hardware, seems to work fine; note the use of the send_slow() routine to queue up command characters to be sent once every two seconds.
Three commands are sent to the clock by this driver. Each command consists of a single letter (of which only the bottom four bits are significant), followed by a CR (ASCII 13). Each character sent to the clock should be followed by a delay to allow the unit to echo the character, and then by a further 10ms. Following the echo of the command string, there may be a response (ie in the case of the g and o commands below), which in the case of the o command may be delayed by up to 1 second so as the start bit of the first byte of the response can arrive on time. The commands and their responses are:
The driver only accepts time from the clock if the bottom three bits of the status byte are 011 or flag2 is set to 1 to ignore resync requests. For the MSF clock, if the UK parliament decides to move us to +0100/+0200 time as opposed to the current +0000/+0100 time, it is not clear what effect that will have on the time broadcast by MSF, and therefore on this driver's usefulness.
A typical ntp.conf configuration file for this driver might be:
# hostname(n) means we expect (n) to be the stratum at which hostname runs. #------------------------------------------------------------------------------ # SYNCHRONISATION PARTNERS # ======================== # Default configuration (Original MSF mode)s... server <IP_ADDRESS> mode 333 # ARCRON MSF radio clock # Fudge stratum and other features as required. # ADJUST time1 VALUE FOR YOUR HOST, CLOCK AND LOCATION! fudge <IP_ADDRESS> stratum 1 time1 0.016 flag3 1 # WWVB users should change that line to: server <IP_ADDRESS> mode 3 # ARCRON WWVB radio clock fudge <IP_ADDRESS> stratum 1 time1 0.030 flag1 1 flag3 1 peer <IP_ADDRESS> # tick(1--2). peer <IP_ADDRESS> # tock(3), boot/NFS server. # This shouldn't get swept away unless left untouched for a long time. driftfile /var/tmp/ntp.drift #------------------------------------------------------------------------------ # RESTRICTIONS # ============ # By default, don't trust and don't allow modifications. Ignore in fact. restrict default ignore notrust nomodify # Allow others in our subnet to check us out... restrict <IP_ADDRESS> mask <IP_ADDRESS> nomodify notrust # Trust our peers for time. Don't trust others in case they are insane. restrict <IP_ADDRESS> nomodify restrict <IP_ADDRESS> nomodify restrict <IP_ADDRESS> nomodify # Allow anything from the local host. restrict <IP_ADDRESS>There are a few #defines in the code that you might wish to play with:
Each timecode is written to the clockstats file with a signal quality value appended (`0'--`5' as reported by the clock, or `6' for unknown).
Each resync and result (plus gaining or losing MSF sync) is logged to the system log at level LOG_NOTICE; note that each resync drains the unit's batteries, so the syslog entry seems justified.
Syslog entries are of the form:
May 10 10:15:24 oolong ntpd[615]: ARCRON: unit 0: sending resync command May 10 10:17:32 oolong ntpd[615]: ARCRON: sync finished, signal quality 5: OK, will use clock May 10 11:13:01 oolong ntpd[615]: ARCRON: unit 0: sending resync command May 10 11:14:06 oolong ntpd[615]: ARCRON: sync finished, signal quality -1: UNKNOWN, will use clock anyway May 10 11:41:49 oolong ntpd[615]: ARCRON: unit 0: sending resync command May 10 11:43:57 oolong ntpd[615]: ARCRON: sync finished, signal quality 5: OK, will use clock May 10 12:39:26 oolong ntpd[615]: ARCRON: unit 0: sending resync command May 10 12:41:34 oolong ntpd[615]: ARCRON: sync finished, signal quality 3: OK, will use clock
Reference Clock Drivers
ARC Rugby MSF Receiver


How to Hide Your Social Media Profiles From Bullies
by Joe KeeleySocial networking can be a wonderful thing, but it can also a breeding ground for bullies. It’s one of the many reasons to hide your social media profiles.
If you’re dealing with social media bullying and/or harassment, or just want to hide your social media profiles for another reason, we’re here to help.
In this article we’ll show you how to make your Facebook, Instagram, and Twitter accounts private. We’ll also reveal how people can find hidden profiles on social networks.
How to Make Your Twitter Account Private
By default, your Twitter account and tweets are public for anyone to see. That visibility includes people who aren’t signed into Twitter.
To change this, open Twitter on a web browser. On the left navigation, click More > Settings and privacy. On the main pane, click Privacy and safety.
Beneath the Tweets section, click Protect your Tweets. A confirmation box will pop up, so click Protect. Your tweets, past and future, will now only be visible to those who follow you. Anyone who tries to follow you from this point forward will need to be approved by you.
While on the Privacy and safety page, for the ultimate security, go to Location information and Photo tagging in turn to disable them.
With your tweets protected, your followers won’t be able to retweet your tweets. Your tweets won’t appear on search engines and will only be searchable on Twitter by your followers.
However, while this setting makes your tweets private, it doesn’t hide your entire profile. Depending on what you have populated on your profile, everyone will still see your:
- Banner image
- Profile image
- Name
- Username
- Bio
- Location
- Website
- Birth date (if you are under 18, this is always hidden)
- Twitter registration date
- Number of people you follow (but not who they are)
- Number of people who follow you (but not who they are)
Go to your profile and click Edit Profile to customize the visibility or the information contained within most of these elements.
How to Make Your Instagram Account Private
Anyone can see your Instagram profile and posts, unless you set your account to private. A private account means that you have to approve followers before they can see your posts.
To set your account private on Android or iOS:
- Go to your Instagram profile and tap the menu icon (three horizontal lines)
- Tap Settings
- Tap Privacy > Account Privacy
- Slide Private account on
Your posts won’t appear in search or on hashtag pages. Bear in mind that if you like or comment on someone else’s post then your username will still be listed.
If someone isn’t following you on Instagram, on your profile they will see:
- Profile image
- Name
- Username
- Bio
- Number of people you follow (but not who they are)
- Number of people who follow you (but not who they are)
How to Make Your Facebook Account Private
Unlike Twitter and Instagram, Facebook doesn’t have a handy catch-all switch for making your profile private.
Your profile can always be found in search, except from people you’ve blocked.
To begin, load Facebook in your browser and click the dropdown arrow and then click Settings. Next, click Privacy from the left-hand navigation.
From this page you can customize the visibility of profile elements. The most secure option will be Only me, though this isn’t available for everything. For example, Who can send you friend requests? can only be set to Everyone or Friends of friends.
You should also check out the Timeline and tagging and Stories pages for some more privacy options.
How to Block Someone on Twitter, Instagram, and Facebook
You now know how to hide your social media profiles, but you can also block a specific account if someone is causing you grief. However, bear in mind that this doesn’t stop them finding you as they could sign out or use another account.
Nevertheless, blocking is a quick, easy way to stop someone seeing your profile. It also means you won’t have to see their profile either.
To block someone:
- On Twitter and Instagram, go to the person’s profile, click the More icon (three vertical dots), click Block, then Block again to confirm.
- On Facebook, go to Settings > Blocking. Enter the name of the user you want to block in the Block users field, then click Block.
How to Find Hidden Profiles on Social Networks
Following the above advice will help you hide your social media profiles. Which is the best way to beat social media bullies. And if you need to hide accounts on other social media platforms here’s how to make all of your social media accounts private.
You might want your social network profile to be completely undiscoverable. However, despite your best efforts, malicious people could still find your social media profiles. Here are some of the ways people use to find hidden profiles on social networks, along with ways to counter them.
1. Reverse Image Search
Your profile image can be indexed by a search engine. You may notice this if you search your name on Google Images.
If someone has access to your picture from another social network—your Pinterest profile, perhaps—then they can perform a reverse image search. If you’ve used that same image elsewhere, those accounts could be surfaced in the search.
How do I prevent this? It’s not usually possible to make your profile picture hidden from public. Your best bet is to use a different image for every profile to make it harder for a reverse image search to establish a link.
- On Twitter, go to your profile, click Edit profile, click your profile image and upload a new one, then click Save.
- On Instagram, go to your profile, tap Edit Profile, and tap Change Profile Photo.
- On Facebook, go to your profile, hover your profile image, and click Update. Remember, you should also delete your old profile picture from the relevant album.
2. Tagged in Posts
You can do everything you can to control your profile, but it’s much harder to control the actions of your friends and family.
For example, they might tag you in a tweet or a photo. Your profile will still be private, but your account is then known to others.
How do I prevent this? You want to either stop people being able to tag you, or for those tags to be approved by you before they appear public.
- On Twitter, go to Settings and privacy > Privacy and safety > Photo tagging and turn it Off.
- On Instagram, go to Settings > Privacy > Tags. Turn Add Automatically to Off.
- On Facebook, you used to be able to control this but no longer can. The best you can do is stop them appearing on your news feed. For that, go to Settings > Timeline and tagging and set Review tags that people add to your posts before the tags appear on Facebook? to On.
3. Repeat Usernames
It’s very tempting to use the same username across all of your social media accounts for that consistent online identity.
The problem is that this makes it very easy for someone to find all your accounts with a single bit of information.
How do I prevent this? It’s best to have a different username for each social media account. You can change your username after registration.
- On Twitter, go to Settings and privacy > Account > Username. Edit the field and click Save.
- On Instagram, go to your profile, tap Edit profile, alter your username, and tap the tick icon.
- On Facebook, go to Settings > General > Username, enter the new username, and click Save Changes.
4. Attaching Your Phone Number or Email Address
It might be unavoidable to have your phone number and/or email address tied to your social media account, as most platforms use them for verification.
Nevertheless, you certainly shouldn’t have them set to be publicly available because people can search for that email or number and find your account. This can often automatically happen if someone syncs their contacts to their social media account.
How do I prevent this? Do not have the information displaying publicly and do not allow your account to be found in search with it.
- On Twitter, go to Settings and privacy > Discoverability and contacts and ensure that both Let others find you by your email address and Let others find you by your phone number are unticked.
- On Instagram, you are not discoverable by email, only by phone number. To remove your number, go to your profile, tap Edit profile, and delete the phone number field.
- On Facebook, go to Settings > Privacy. Set both Who can look you up using the email address you provided and Who can look you up using the phone number you provided to Only me.
5. Links to Other Apps
Many services let you sign up with your login information from a social media profile. This is great for convenience, but be careful.
Check that this doesn’t make your social network account information public. For example, many dating apps will display your Instagram photos and then link out to your account.
How do I prevent this? Remove any third-party apps that are tied to your social media accounts and always sign up for a separate account on new services.
- On Twitter, go to Settings and privacy > Account > Apps and sessions. Go into each app and Revoke access.
- On Instagram, go to Settings > Security > Apps and websites > Active and Remove each app.
- On Facebook, go to Settings > Apps and websites, tick all unnecessary services and click Remove.
Detox or Delete Your Social Media
In this article we’ve shown you how to hide your social media accounts, so hopefully you should find yourself better protected from bullies and other unsavory individuals.
However, perhaps it’s time to take it a step further.
If you just want to take a break then you can do a social media detox. Or, if you want to take the nuclear option, you can always delete your entire social media presence.
Explore more about: Facebook, Instagram, Online Privacy, Twitter.


Winning Justice for our Clients
Our lawyers are dedicated to winning justice for honest people who have been seriously injured, or who have lost a loved one because of someone else's carelessness, recklessness, or other wrongful conduct.
- We are experienced, skillful, ethical attorneys
- We only handle personal injury and wrongful death cases
- Free initial consultation - learn your rights
- Contingent fee - no attorneys fees unless we win
- We handle cases throughout Washington and the United States
- Most cases settle fast
- Easy Seattle location, home and hospital visits throughout Washington in serious injury cases


The self-hosted media centre
Note: Make sure there is a file extension (.mp4, .mov, .mpg etc.) as it is reguired to make the video play.


The LBC Election Youth Debate
by LBCThe LBC Election Youth Debate is live at 8pm and you can watch it here.
The panellists with Iain Dale tonight are representatives from the Conservatives, Labour, LibDems and the Brexit Party. All are 21 or under.
The LBC Election Youth Debate is live at 8pm and you can watch it here.
The panellists with Iain Dale tonight are representatives from the Conservatives, Labour, LibDems and the Brexit Party. All are 21 or under.


This example demonstrates real-time push-notifications from SignalR. To see the real-time updates:
Note: To further enhance real-time experience, the Grid will also display changes from other users, which currently happen to perform CRUD operations on the same demo. If you refresh the page, all changes will be lost, because the remote service only broadcasts changes, it does not actually save them.


Args:
rpcserver: The RPC server to use. Should be an instance of HttpRpcServer
or TestRpcServer.
app_id: The application to fetch logs from.
module: The module of the app to fetch logs from, optional.
version_id: The version of the app to fetch logs for.
output_file: Output file name.
num_days: Number of days worth of logs to export; 0 for all available.
append: True if appending to an existing file.
severity: App log severity to request (0-4); None for no app logs.
end: date object representing last day of logs to return.
vhost: The virtual host of log messages to get. None for all hosts.
include_vhost: If true, the virtual host is included in log messages.
include_all: If true, we add to the log message everything we know
about the request.
time_func: A time.time() compatible function, which can be overridden for
testing.
error_fh: Where to send status and error messages.
| def google.appengine.tools.appcfg.LogsRequester.DownloadLogs |
( |
|
self | ) |
|
Download the requested logs.
This will write the logs to the file designated by
self.output_file, or to stdout if the filename is '-'.
Multiple roundtrips to the server may be made.
| def google.appengine.tools.appcfg.LogsRequester.RequestLogLines |
( |
|
self, |
|
|
|
tf, |
|
|
|
offset |
|
) |
| |
Make a single roundtrip to the server.
Args:
tf: Writable binary stream to which the log lines returned by
the server are written, stripped of headers, and excluding
lines skipped due to self.sentinel or self.valid_dates filtering.
offset: Offset string for a continued request; None for the first.
Returns:
The offset string to be used for the next request, if another
request should be issued; or None, if not.
The documentation for this class was generated from the following file:
- code/googleappengine-read-only/python/google/appengine/tools/appcfg.py


Database Format
COLMAP stores all extracted information in a single SQLite database file. The
database can be accessed with the database management toolkit in the COLMAP GUI,
the provided C++ database API (see src/colmap/scene/database.h
), or with a scripting
language of your choice (see scripts/python/database.py
).
The database contains the following tables:
cameras
images
keypoints
descriptors
matches
two_view_geometries
To initialize an empty SQLite database file with the required schema, you can either create a new project in the GUI or execute src/colmap/exe/database_create.cc.
Cameras and Images
The relation between cameras and images is 1-to-N. This has important implications for Structure-from-Motion, since one camera shares the same intrinsic parameters (focal length, principal point, distortion, etc.), while every image has separate extrinsic parameters (orientation and location).
The intrinsic parameters of cameras are stored as contiguous binary blobs in
float64, ordered as specified in src/colmap/camera/models.h
. COLMAP only
uses cameras that are referenced by images, all other cameras are ignored.
The name
column in the images table is the unique relative path in the image
folder. As such, the database file and image folder can be moved to different
locations, as long as the relative folder structure is preserved.
When manually inserting images and cameras into the database, make sure
that all identifiers are positive and non-zero, i.e. image_id > 0
and camera_id > 0
.
Keypoints and Descriptors
The detected keypoints are stored as row-major float32 binary blobs, where the
first two columns are the X and Y locations in the image, respectively. COLMAP
uses the convention that the upper left image corner has coordinate (0, 0) and
the center of the upper left most pixel has coordinate (0.5, 0.5). If the
keypoints have 4 columns, then the feature geometry is a similarity and the
third column is the scale and the fourth column the orientation of the feature
(according to SIFT conventions). If the keypoints have 6 columns, then the
feature geometry is an affinity and the last 4 columns encode its affine shape
(see src/feature/types.h
for details).
The extracted descriptors are stored as row-major uint8 binary blobs, where each row describes the feature appearance of the corresponding entry in the keypoints table. Note that COLMAP only supports 128-D descriptors for now, i.e. the cols column must be 128.
In both tables, the rows table specifies the number of detected features per image, while rows=0 means that an image has no features. For feature matching and geometric verification, every image must have a corresponding keypoints and descriptors entry. Note that only vocabulary tree matching with fast spatial verification requires meaningful values for the local feature geometry, i.e., only X and Y must be provided and the other keypoint columns can be set to zero. The rest of the reconstruction pipeline only uses the keypoint locations.
Matches
Feature matching stores its output in the matches table and geometric verification in the two_view_geometries table. COLMAP only uses the data in two_view_geometries for reconstruction. Every entry in the two tables stores the feature matches between two unique images, where the pair_id is the row-major, linear index in the upper-triangular match matrix, generated as follows:
def image_ids_to_pair_id(image_id1, image_id2):
if image_id1 > image_id2:
return<PHONE_NUMBER> * image_id2 + image_id1
else:
return<PHONE_NUMBER> * image_id1 + image_id2
and image identifiers can be uniquely determined from the pair_id as:
def pair_id_to_image_ids(pair_id):
image_id2 = pair_id %<PHONE_NUMBER>
image_id1 = (pair_id - image_id2) /<PHONE_NUMBER>
return image_id1, image_id2
The pair_id enables efficient database queries, as the matches tables may contain several hundred millions of entries. This scheme limits the maximum number of images in a database to<PHONE_NUMBER> (maximum value of signed 32-bit integers), i.e. image_id must be smaller than<PHONE_NUMBER>.
The binary blobs in the matches tables are row-major uint32 matrices, where the left column are zero-based indices into the features of image_id1 and the second column into the features of image_id2. The column cols must be 2 and the rows column specifies the number of feature matches.
The F, E, H blobs in the two_view_geometries table are stored as 3x3 matrices in row-major float64 format. The meaning of the config values are documented in the src/estimators/two_view_geometry.h source file.


Currently pursuing my B-TECH from SRM INSTUTE OF SCIENCE AND TECHNOLOGY
KTR Campus in Computer Science.
Hello...I am Shivang Sharma currently a student and a growing web develope. I am pursuing mt B.TECH from SRM Instute Of Science And Technology, KTR Campus in Computer Science. Currently i am learning newer skills to make my self better in this field and i aspire to be a great web developer.
i did my high schooling from BPS,Sikar(Rajasthan), with 79% and 10th with Vidhyashram public school with 84.83%.
My skills include Python, c-Language, HTML, CSS, Javascript, Bootstrap, Mathematics
And hopefully more will be added with time.


public final class AmountParser extends Parser
| Modifier and Type | Class and Description |
|---|---|
static class |
AmountParser.Result |
| Modifier and Type | Field and Description |
|---|---|
static android.os.Parcelable.Creator |
CREATOR |
CLASS_NAME
| Constructor and Description |
|---|
AmountParser() |
| Modifier and Type | Method and Description |
|---|---|
void |
clearResult()
Clears parser result.
|
AmountParser |
clone()
Create a copy of the entity.
|
void |
consumeResult(AmountParser.Result resultToConsume)
Consumes given result.
|
void |
consumeResultFrom(Entity other)
Consume result from other entity.
|
protected void |
deserializeNativeSettings(byte[] serializedSettings) |
boolean |
isArabicIndicMode()
Indicates whether Arabic-Indic mode is enabled.
|
protected byte[] |
serializeNativeSettings() |
void |
setAllowMissingDecimals(boolean allowMissingDecimals)
Indicates whether amounts without decimal are accepted as valid.
|
void |
setAllowNegativeAmounts(boolean allowNegativeAmounts)
Indicates whether negative values are accepted as valid amounts.
|
void |
setAllowSpaceSeparators(boolean allowSpaceSeparators)
Indicates whether amounts with space separators between groups of digits(thousands) are allowed.
|
void |
setArabicIndicMode(boolean arabicIndicMode)
Indicates whether Arabic-Indic mode is enabled.
|
boolean |
shouldAllowMissingDecimals()
Indicates whether amounts without decimal are accepted as valid.
|
boolean |
shouldAllowNegativeAmounts()
Indicates whether negative values are accepted as valid amounts.
|
boolean |
shouldAllowSpaceSeparators()
Indicates whether amounts with space separators between groups of digits(thousands) are allowed.
|
protected void |
terminateNative(long nativeContext) |
getPriority, isRequired, setRequired
describeContents, finalize, getNativeContext, getResult, nativeGetNativeResultContext, readFromParcel, writeToParcel
public void setAllowSpaceSeparators(boolean allowSpaceSeparators)
public boolean shouldAllowSpaceSeparators()
public void setAllowMissingDecimals(boolean allowMissingDecimals)
true
.
Setting this to true
can yield to more false positives
because any set of consequent digits can represent valid amount.
By default, this is set to 'false'public boolean shouldAllowMissingDecimals()
true
.
Setting this to true
can yield to more false positives
because any set of consequent digits can represent valid amount.
By default, this is set to 'false'public void setArabicIndicMode(boolean arabicIndicMode)
public boolean isArabicIndicMode()
public void setAllowNegativeAmounts(boolean allowNegativeAmounts)
true
can yield to more false positives.
By default, this is set to 'false'public boolean shouldAllowNegativeAmounts()
true
can yield to more false positives.
By default, this is set to 'false'protected void terminateNative(long nativeContext)
terminateNative
in class Entity
@Nullable protected byte[] serializeNativeSettings()
serializeNativeSettings
in class Entity
protected void deserializeNativeSettings(@NonNull byte[] serializedSettings)
deserializeNativeSettings
in class Entity
public AmountParser clone()
Entity
RecognizerRunnerView
or RecognizerRunner
with the updated entity hierarchy.public void consumeResultFrom(@NonNull Entity other)
Entity
com.microblink.entities.recognizers.RecognizerBundle#loadFromIntent(Intent)
and similar methods to replace the result content of the saved entities with results that
have arrived over Intent
consumeResultFrom
in class Entity
other
- Entity from which result should be consumed.public void consumeResult(@NonNull AmountParser.Result resultToConsume)
Parser
consumeResult
in class Parser
resultToConsume
- Result that should be consumed.public void clearResult()
Parser
clearResult
in class Parser