vi is Found on Nearly Every Unix Computer
vi is Powerful and Fast
vi Stays Out of Your Way
Open a file with vi. Type: vi myfile.txt
Command Mode
Insert (or Text) Mode
When in doubt about which mode you are in, press <Esc>
From Command Mode k Up one line j Down one line h Left one character l Right one character (or use <Spacebar>) w Right one word b Left one word
NOTE: Many vi commands can take a leading count (e. g., 6k, 7e).
From Command Mode i Enter text entry mode x Delete a character dd Delete a line r Replace a character R Overwrite text, press <Esc> to end
Displaying Line Numbers
From Command Mode :set nu Display line numbers :set nonu Hide line numbers
Setting Right Margin
From Command Mode :set wm=number Set Wrap Margin number of spaces from right edge of screen :set wm=10 Set Wrap Margin 10 spaces from right edge of screen :set wm=0 Turn off Wrap Margin
From Command Mode ZZ Write (if there were changes), then quit :wq Write, then quit :q Quit (will only work if file has not been changed) :q! Quit without saving changes to file
UNIX ---> vi file ---> COMMAND ---> i I a A o O ---> TEXT SHELL <---- ZZ <------- MODE <------ <Esc> <------ MODE
A Basic vi Session
- To enter vi, type: vi filename <Return>
- To enter insert mode, type: i
- Type in the text: This is easy.
- To leave insert mode and return to command mode, press: <Esc>
- In command mode, save changes and exit vi by typing: :wq <Return>
You are back at the Unix prompt.
From Command Mode e Move to end of current word $ Move to end of current line ^ Move to beginning of current line + Move to beginning of next line - Move to beginning of previous line G Go to last line of the file :n Go to line with this number (:10 goes to line 10) <Ctrl>d Scroll down one-half screen <Ctrl>u Scroll up one-half screen <Ctrl>f Scroll forward one full screen <Ctrl>b Scroll backward one full screen ) Move to the next sentence ( Move to the previous sentence } Move to the next paragraph { Move to the previous paragraph H Move to the top line of the screen M Move to the middle line of the screen L Move to the last line of the screen % Move to matching bracket: ( { [ ] } )
From Command Mode i Insert text before current character a Append text after current character I Begin text insertion at the beginning of a line A Append text at end of a line o Open a new line below current line O Open a new line above current line
Format Example operator number object c2w number operator object 2cw Operators c change d delete y yank Objects and Locations w one word forward b one word backward e end of word H, M, L top, middle, or bottom line on screen ), ( next sentence, previous sentence }, { next paragraph, previous paragraph ^, $ beginning of line, end of line /pattern/ forward to pattern
From Command Mode r Replace only the character under the cursor. (Note: using r you remain in command mode.) R Beginning with the character under the cursor, replace as many characters on this line as you want. (You are in overtype mode until you press <Esc> cw Beginning with the character under the cursor, change a word to whatever you type. (You are in insert mode until you press <Esc>) c$ Beginning with the character under the cursor, C change a line to whatever you type. (You are in insert mode until you press <Esc>)
From Command Mode x Delete a character dw Delete an alphabetic word and the following space (6dw deletes six words) dW Delete a blank-delimited word and the following space dd Delete a line (6dd deletes six lines) d$ Delete all characters to the end of the line. D d} Delete all characters to the end of the paragraph. :5,30d Delete lines 5 through 30
Deleted text goes into a temporary buffer that is replaced each time you delete (or copy) more text. The current contents of the buffer can be put back into your file.
From Command Mode yy Copy (yank) the current line 6yy Copy (yank) six lines, beginning with the current line yw Copy the current word p Put the text after the cursor position P Put the text before the cursor position
Copied text goes into a temporary buffer that is replaced each time you copy (or delete) more text. Only the current contents of the temporary buffer can be put back into your file. As a result, when you use copy (y), use the put (p) command immediately.
A yank and put procedure using colon commands:
From Command Mode . Repeat last command n. Repeat last command n number of times J Join next line to current line u Undo last single change U Restore current line ~ Change letter's case (capital to lower and vice versa)
Temporary Buffer
Deleted or copied text goes into a temporary unnamed buffer. The contents of the temporary buffer may be retrieved by using the p or P commands.
p Put words from temporary buffer after cursor or put lines from temporary buffer below current line P Put words from temporary buffer before cursor or put lines from temporary buffer above current line
Lettered Buffers
There are 26 lettered buffers (a-z). Contents of a lettered buffer are saved until you copy or delete more characters into it, or until you quit your current vi session.
From Command Mode "ayy Copy (yank) a line into buffer a "Ayy Appends to buffer a "a10yy Copies 10 lines into buffer a "a10dd Deletes 10 lines of text into buffer a "ap Put contents of lettered buffer a below the current line
Both temporary and lettered buffers last only for the current vi session.
:beginning_line, ending_line command destination
where destination is the line after which you want the text placed.
From Command Mode :5,10 co 105 Copy lines 5-10 to the line after 105 :5,20 m $ Move lines 5-20 to end of file :7,300 d Delete lines 7-300 (to buffer)
From Command Mode /text Search forward (down) for text (text can include spaces and characters with special meanings.) ?text Search backward (up) for text n Repeat last search in the same direction N Repeat last search in the opposite direction fchar Search forward for a charcter on current line Fchar Search backward for a character on current line ; Repeat last character search in the same direction % Find matching ( ), { }, or [ ]
The simplest way to do substitutions over a range of lines, or throughout the file, is to use the s colon command. The basic form of this command is the following:
:n1,n2s/old/new/gc n1 is the beginning line n2 is the ending line number s means to substitute text matching the pattern (old) with text specified by (new) g (global) is optional. It indicates you want to substitute all occurrences on the indicated lines. If you use g, the editor substitutes only the first occurrence on the indicated lines. c (confirm) is optional. It indicates you want to confirm each substitution before vi completes it.
From Command Mode :%s/old/new/g Substitutes old with new throughout the file :.,$s/old/new/g Substitutes old with new from the current cursor position to the end of the file :^,.s/old/new/g Substitutes old with new from the beginning of the file to the current cursor position :& Repeats the last substitute (:s) command
From Command Mode :w file Write current file to file :w>>file Append current file to file :5,10w file Write lines 5 through 10 to file :5,10w>>file Append Lines 5 through 10 to file :r file Read a copy of file into current file :!ls See a list of files in your current directory
From Command Mode-within vi for the current file only :set all Display all options :set Display current settings of options :set nooption Unset option :set ai Set Auto Indentation during text entry :set ic Set Ignore Case during searches :set nu Show line Numbers :set sm Show Matching ( or { when ) or } is entered :set wm=10 Set Wrap Margin 10 spaces from right edge of screen
Options can be set four ways:
:set nu
Sample contents of a .exrc file set nu set ai set wm=10
Example of setting the EXINIT environmental variable setenv EXINIT "set nu ai ic"
On the Uniform Access systems (Homer, Saul, Mead, Alcott), the EXINIT environmental variable is used to set the shell within which the vi editor operates. Since the EXINIT environmental variable, if it has been defined, overrides anything set by a .exrc file, customizing vi on these computers requires redefining EXINIT. For example, to add numbering and auto indent, you would take the following steps:
% printenv EXINIT set shell=/bin/cshThis response indicates that the shell is set to the C shell.
% setenv EXINIT "$EXINIT nu ai" % printenv EXINIT set shell=/bin/csh nu ai
set ai set ic set nu set wm=8
Do not leave blank lines at the beginning or end of the .exrc file.
Abbreviations are text strings that automatically expand into larger strings during insert mode.
From Command Mode :ab UW University of Washington
Mapping defines a single key to execute a sequence of keystrokes when the single key is pressed in command mode. In the following example,the @ key is mapped to replace the current word with "University of Washington". The <Control>v allows you to enter the <Esc> key into the command sequence.
From Command Mode :map @ cwUniversity of Washington <Control>v <Esc> <Return>
Mapping can also be used to call commands external to vi, such as sort or fmt. In the following example, the @ sign is mapped to the sort command, so that the current paragraph (indicated by the }) will be sorted. The <Control>v allows you to enter the <Return> key into the command sequence. The second <Return> completes the map command.
From Command Mode :map @ !}sort <Control>v <Return> <Return>
Note: You can also put abbreviation and mapping commands in your .exrc file.
editor=
editor=vi
When finished editing in vi, exit vi and you will be returned to the compose screen.
You can edit more than one file at a time with vi.
From The Unix Shell Prompt vi file1 file2 vi two (or more) files at the same time From Command Mode :n Move to file2 from file1 :rew Rewind back to file1 :e! Restore original file1 file2 (start all over) ZZ Save and quit file. (Must be done for each file.)
When you print a file you may want the left margin moved to the right. This leaves room for a three-hole punch.
From Command Mode :1,$> Move entire file 1 shift width (eight spaces) to the right :1,$< Move entire file eight spaces to the left :%s/^/ /g Insert any number of spaces at the beginning of each line in the entire file. Simply press the space bar the desired number of times. :20>> Moves next 20 lines over 1 shift width.
You can issue a single shell command while in the vi editor. For example, to list the files in your directory (ls), follow these steps:
From Command Mode :w Write changes to your file (just in case). :!ls List contents of your current directory on the screen. Press <Return> to return to vi.
You can issue many shell commands by temporarily leaving the vi editor.
From Command Mode :w Write changes to your file. :sh Return to the shell to enter a number of commands without leaving vi. Press <Control>d to return to vi editing.
Occasionally, you may want a double spaced version of your file for editing or review.
In Command Mode :w original.backup Save a backup copy of the original file :%! sed G Double space the entire file. :1,5! sed G Double space the lines from 1-5.
© Copyright 1996 University of Washington
Computing & Communications.
Permission to reprint or adapt sections from these class notes for
noncommercial purposes is granted, provided that the source is
acknowledged. Inquiries may be submitted to
<EMAIL_ADDRESS>Class notes URL: http://weber.u.washington.edu/~rells/R110/
Last Modified: February 24, 1997


The Les Houches school of physics has long and well known history of forming generations of young researchers on the frontiers of their fields. Our school is aimed primarily at the growing audience of theoretical physicists interested in machine learning and high-dimensional data analysis, as well as to colleagues from other fields interested in this interface. We will cover basics and frontiers of high-dimensional statistics, machine learning, theory of computing and learning, relevant mathematics and probability theory. We will focus in particular on methods of statistical physics and their results in the context of current questions and theories related to the before-mentioned fields. The school will also cover examples of applications of machine learning methods in physics research, as well as other emerging applications of wide interest. Open questions and directions will be presented as well.
Download the poster of the conference
The school has been posponed to a yet-unspecified date due to the COVID19 situation.
Lecturers
- Boaz Barak, Harvard, USA
- Giulio Biroli, ENS Paris, France
- Michael Jordan, UC Berkeley, USA
- Marc Mézard ENS Paris
- Yann LeCun (Facebook)
- Remi Monasson, ENS Paris, France
- Andrea Montanari, Stanford, USA
- Maria Schuld, Univ. KwaWulu Natal & Xanada
- Haim Sompolinsky, Harvard and Hebrew University of Jerusalem
- Nathan Srebro, Chicago, USA
- Miles Stoudenmire,Flatiron Institute, USA
- Pierre Vandergheynst, EPFL Swiss
Invited Speakers
- Christian Borgs (UC Berkeley)
- Jennifer Chayes (UC Berkeley)
- Shirley Ho (Flatiron NYC)
- Levent Sagun (Facebook AI)
- More to be confirmed...
Organizing Committee
- Gerard Ben Arous(NYU, New York)
- Surya Ganguli(Stanford)
- Florent Krzakala (ENS, Paris)
- Lenka Zdeborova (CEA & CNRS, Saclay)


Flyers take on the Hurricanes on 4-game losing streak
by Associated PressPhiladelphia Flyers (10-7-4, fifth in the Metropolitan Division) vs. Carolina Hurricanes (13-7-1, third in the Metropolitan Division)
Raleigh, North Carolina; Thursday, 7 p.m. EST
BOTTOM LINE: Philadelphia looks to break its four-game skid with a win over Carolina.
The Hurricanes are 2-4-1 in division matchups. Carolina has scored 73 goals and is seventh in the league averaging 3.5 per game. Andrei Svechnikov leads the team with 10.
The Flyers are 4-2-2 against the rest of their division. Philadelphia has allowed nine power-play goals, killing 85.2% of opponent opportunities.
In their last meeting on Nov. 5, Philadelphia won 4-1. Claude Giroux recorded a team-high 2 points for the Flyers.
TOP PERFORMERS: Dougie Hamilton leads the Hurricanes with 14 assists and has recorded 23 points this season. Svechnikov has scored seven goals over the last 10 games for Carolina.
Travis Konecny leads the Flyers with 12 total assists and has recorded 20 points. Sean Couturier has totaled 9 points over the last 10 games for Philadelphia.
LAST 10 GAMES: Flyers: 5-2-3, averaging 2.4 goals, 4.2 assists, 2.8 penalties and 6.1 penalty minutes while allowing 2.3 goals per game with a .922 save percentage.
Hurricanes: 6-4-0, averaging 3.7 goals, 6.5 assists, 4.1 penalties and 8.8 penalty minutes while giving up three goals per game with a .897 save percentage.
Hurricanes Injuries: None listed.
Flyers Injuries: None listed.
___
The Associated Press created this story using technology provided by Data Skrive and data from Sportradar.


-
CARL FONTICELLA | FILE
Ohio sophomore quarterback Nathan Rourke leads the Ohio offense in the red zone in its win over Miami on Oct. 31. Rourke became Ohio’s starting quarterback mid-season, and he led the Bobcats to a win in the Bahamas Bowl.
-
MIJANA MAZUR | FILE
Ohio senior middle linebacker Quentin Poling calls out a defensive signal in the Bobcats’ 38-10 win over Toledo on Nov. 8. Ohio’s all time leader in solo tackles and tackles for loss, Poling was the cornerstone of the Ohio defense over the last four years.
-
BLAKE NISSEN | FILE
Ohio redshirt junior safety Kylan Nelson mimes releasing an arrow into the stands after the Bobcats’ overtime win against Eastern Michigan on Sept. 23. Ohio defeated Eastern Michigan 27-20 in that game.
-
BLAKE NISSEN | FILE
Ohio redshirt junior running back A.J. Ouellette stiff arms a defender during the Bobcats’ game against Kent State on Oct. 21. Ouellette and the Bobcats’ offense exploded for 199 rushing yards and 48 points en route to a 48-3 win over the Golden Flashes.
-
MATT STARKEY | FILE
Athens’ football coach Ryan Adams yells onto the field during the Bulldogs’ 48-0 win over Alexander on Sept. 15. The Bulldogs played well for most of the season but ultimately missed the state playoffs.
-
CARL FONTICELLA | FILE
The Bobcats' defense celebrates after an interception by redshirt junior safety Javon Hagan in the first half of Ohio’s game against Miami on Oct. 31. The Bobcats won on “Bobcat Blackout” night in dominating fashion over their rivals, 45-28.
-
CARL FONTICELLA | FILE
Ohio redshirt senior point guard Taylor Agler heaves a desperation 3-pointer toward the basket at the buzzer of the Bobcats’ 69-66 loss to Miami in the Mid-American Conference quarterfinals in Quicken Loans Arena.
-
EMILEE CHINN | FILE
Ohio women’s basketball coach Bob Boldon hoists a commemorative ball in the air following his 100th win at Ohio. Boldon joined Marsha Reall as the only coaches to win 100 games at Ohio after the Bobcats defeated Akron, 85-73, on March 5.
-
CARL FONTICELLA | FILE
Ohio senior guard Mike Laster scans the court during the first half of the Bobcats' game against Bowling Green on Feb. 27. Laster became a senior leader for the Bobcats this season, becoming a go-to scorer whenever the Bobcats needed him to be.
-
MIJANA MAZUR | FILE
Athens senior Micah Saltzman dribbles around Vinton County’s Jake Speakman during the Bulldogs’ 69-60 loss on Feb. 23. The Bulldogs won nine straight games before falling to Vinton County in the sectional round of the OHSAA basketball tournament.
-
EMILEE CHINN | FILE
Ohio junior forward Gabe Lampron celebrates after his goal during the Bobcats' game against UNLV in the 2018 ACHA National Tournament on March 9. Lampron later scored an overtime goal to win the game for the Bobcats.
-
BLAKE NISSEN | FILE
Ohio sophomore goalie Jimmy Thomas yells in excitement after the Bobcats' game against UNLV in the 2018 ACHA National Tournament on March 9. The Bobcats beat the Rebels 3-2 in overtime on a Gabe Lampron overtime goal.
-
CARL FONTICELLA | FILE
Ohio junior defenseman Tom Pokorney celebrates his breakaway goal during the third period of the Bobcats' 5-3 win over Illinois on Feb. 9 at Bird Arena. Pokorney came off suspension and scored two goals to lift the Bobcats to a win.
-
BLAKE NISSEN | FILE
Ohio redshirt senior second baseman Taylor Saxton laughs as she tosses up a softball during the Bobcats' first of two games against Akron. The Bobcats swept the Zips in a doubleheader April 14.
-
BLAKE NISSEN | FILE
Ohio sophomore pitcher Derek Carr delivers a pitch in the Bobcats’ game against Eastern Michigan on April 13. The Bobcats’ offense struggled through the early part of MAC play, but the pitching staff helped keep the team afloat.
-
BLAKE NISSEN | FILE
Ohio freshman shortstop Katie Yun runs to first during the Bobcats’ game against Pittsburgh on March 27. Yun came into the Bobcats’ lineup as a freshman and has become one of the team’s best offensive performers this season.
-
EMILEE CHINN | FILE
Ohio celebrates after junior first baseman Rudy Rott hits a walk-off home run in the 10th inning of the Bobcats' game against Shawnee State on April 11. Rott has been both the team’s cleanup hitter and best hitter this season.
-
CARL FONTICELLA | FILE
Ohio junior diver Nicole Hughes competes in the three-meter dive against Bowling Green on Jan. 27. Hughes helped Ohio finish seventh in the Mid-American Conference Championships in February.
-
ABIGAIL DEAN | FILE
Ohio sophomore libero Meredith Howe celebrates a point during the Bobcats’ sweep of Buffalo on Oct. 28 in The Convo. The Bobcats suffered through injuries all season but still managed to make it to the MAC semifinals, where they ultimately lost to Miami.


Rob Beckett (born 1986-11-28[ref]) has appeared in 106 episodes between 2012-2019. Rob Beckett on IMDB. Rob Beckett on Wikipedia. Rob Beckett on Chortle.


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import models.resident._ @import models.resident.properties._ @this( finalSummaryPartial: playHelpers.finalSummaryPartial, checkYourAnswersPartial: playHelpers.checkYourAnswersPartial ) @(gainAnswers: YourAnswersSummaryModel, deductionAnswers: ChargeableGainAnswers, incomeAnswers: IncomeAnswersModel, result: TotalGainAndTaxOwedModel, taxYear: TaxYearModel, isCurrentTaxYear: Boolean, prrUsed: Option[Boolean] = None, lettingsReliefUsed: Option[Boolean] = None, totalCosts: BigDecimal, totalDeductions: BigDecimal, aeaRemaining: BigDecimal)(implicit request: Request[_], messages: Messages, lang: Lang)


PM4Py-MDL Web Interface
Multi-Dimensional Process Mining through your Browser!
Select the process of interest to see the model and/or the list of events:


Software Developer In Test at Ryanair 01/2019 – Present
Currently working at (Ryanair) - Europe's Largest Airline, where I build State-Of-The-Art Test Automation and Tools that focused to deliver world-class user experiences and products such as flight booking, accommodation, car hire etc.
My achievements within working for Ryanair:
- Created scalable Test Automation Frameworks and Tools and achieved over 80% coverage in sum of Front-end and Back-end Solutions.
- Implemented over 200 High-Quality (Web/Mobile)UI / API / Unit tests at every development stage to insure effective tests coverage.
- Executed (Adobe) Analytics Automation Testing making sure maximum products conversion rate is delivered to PO and Analytics teams.
- Accelerated Automation Tests Preparation, Execution, Results Analysis for CI pipeline by 50% (before ~ 30 min, after ~ 15 min) of total processing time after migrating to AWS Docker stack
- Reduced up to 75% of manual work and manual testing for the project.
- Accomplished all above within flexible Scrum team of great people supported by BDD-like environment in less than 1 year.


{{define "content"}}
Howdy, {{.User.DisplayName}}. Please select on which service your spotify top tracks playlist will be generated.


4.4. Spill to Disk
Overview
In the case of memory intensive operations, Presto allows offloading intermediate operation results to disk. The goal of this mechanism is to enable execution of queries that require amounts of memory exceeding per query or per node limits.
The mechanism is similar to OS level page swapping. However, it is implemented on the application level to address specific needs of Presto.
Properties related to spilling are described in Spilling Properties.
Memory Management and Spill
By default, Presto kills queries if the memory requested by the query execution
exceeds session properties query_max_memory
or
query_max_memory_per_node
. This mechanism ensures fairness in allocation
of memory to queries and prevents deadlock caused by memory allocation.
It is efficient when there is a lot of small queries in the cluster, but
leads to killing large queries that don’t stay within the limits.
To overcome this inefficiency, the concept of revocable memory was introduced. A query can request memory that does not count toward the limits, but this memory can be revoked by the memory manager at any time. When memory is revoked, the query runner spills intermediate data from memory to disk and continues to process it later.
In practice, when the cluster is idle, and all memory is available, a memory intensive query may use all of the memory in the cluster. On the other hand, when the cluster does not have much free memory, the same query may be forced to use disk as storage for intermediate data. A query that is forced to spill to disk may have a longer execution time by orders of magnitude than a query that runs completely in memory.
Please note that enabling spill-to-disk does not guarantee execution of all
memory intensive queries. It is still possible that the query runner will fail
to divide intermediate data into chunks small enough that every chunk fits into
memory, leading to Out of memory
errors while loading the data from disk.
Spill Disk Space
Spilling intermediate results to disk and retrieving them back is expensive
in terms of IO operations. Thus, queries that use spill likely become
throttled by disk. To increase query performance it is recommended to
provide multiple paths on separate local devices for spill (property
spiller-spill-path
in Spilling Properties).
The system drive should not be used for spilling, especially not to the drive where the JVM is running and writing logs. Doing so may lead to cluster instability. Additionally, it is recommended to monitor the disk saturation of the configured spill paths.
Presto treats spill paths as independent disks (see JBOD), so there is no need to use RAID for spill.
Supported Operations
Not all operations support spilling to disk, and each handles spilling differently. Currently, the mechanism is implemented for the following operations.
Joins
During the join operation, one of the tables being joined is stored in memory. This table is called the build table. The rows from the other table stream through and are passed onto the next operation if they match rows in the build table. The most memory-intensive part of the join is this build table.
When the task concurrency is greater than one, the build table is partitioned.
The number of partitions is equal to the value of the task.concurrency
configuration parameter (see Task Properties).
When the build table is partitioned, the spill-to-disk mechanism can decrease the peak memory usage needed by the join operation. When a query approaches the memory limit, a subset of the partitions of the build table gets spilled to disk, along with rows from the other table that fall into those same partitions. The number of partitions that get spilled influences the amount of disk space needed.
Afterward, the spilled partitions are read back one-by-one to finish the join operation.
With this mechanism, the peak memory used by the join operator can be decreased
to the size of the largest build table partition. Assuming no data skew, this will
be 1 / task.concurrency
times the size of the whole build table.
Aggregations
Aggregation functions perform an operation on a group of values and return one value. If the number of groups you’re aggregating over is large, a significant amount of memory may be needed. When spill-to-disk is enabled, if there is not enough memory, intermediate cumulated aggregation results are written to disk. They are loaded back and merged when memory is available.


Nowadays, there are very few apps that do not authenticate their users. We all wanna know who our users are, how they interact with other users and what makes them engaged the most.
Therefore it’s very common that when a user opens the app, the first thing they’re gonna see is the Login screen. Usually, there are 2 options we can provide:
- login via email.
- login via social networks: Facebook, Twitter, Google+.
In this post, we’re gonna discuss about the Facebook login option.
We will build a simple app that:
- Has 2 screens: Login screen and Home screen.
- There is a
Login with Facebook
button on the Login screen. When users tap on that button, they will be taken to Safari or Facebook iOS app (if installed) to do the authentication. - After successfully authenticated, they will move to the Home screen, which only has a welcome label and a Logout button. When they tap on the Logout button, they will be right back at the Login screen again.
Sounds simple and easy, right?
Here a gif that sums up the whole process:
Understand the Facebook authentication process.
Imagine Facebook as a market.
You go to the market and register for a booth to sell things.
When users come to your booth and they like what they see, you may ask them to provide some of their personal information. You may also ask them about their friends, their interests, their recent activities… as long as they are happy to tell you.
With those information, you are able to do a lot of things such as:
- Make a list of users for a lucky draw at the end of the show.
- Send user a congratulation email on their birthday.
- Send new offer and sale.
- Make analytics about which users are interested in which items in your booth.
- ect…
The act of asking users for permissions to use their information
and having them to accept
is called authentication
.
So what do we need to prepare for Facebook authentication?
Actually, there are only 2 things that we need:
- A booth:
- this refers to as a
Facebook app
. - I’m not talking about the
Facebook iOS app
on your phone. I’m talking about theFacebook app
you registered on Facebook Developers website. - A
Facebook app
is like an identity of your business on Facebook. All authentications will happen through that.
- this refers to as a
- A way for user to come to our booth:
- this refers to as
platform
. - It can be a website, a game, an app… In our case, it’ll be an iOS app.
- this refers to as
Here’s a summary of what we’re gonna do:
Alright, without further ado, let’s jump right in and make it happen.
Setup your booth (Facebook App)
Step 1: Create a new Facebook app.
Visit Facebook Developers website and click on Add a New App
.
Fill in your app information:
- Display Name: this is what the user will see when the authentication happens. You can put any text here, including spaces and special characters. Ex:
My Awesome App
,Super News Reader
, etc… - Is this a test version of another app? No.
- Contact Email: put your email address here.
- Categories: Choose the category that best describe your app. Ex: if you’re building a news reader app, choose
News
.
Then hit Create App ID
.
 Ex: select all the photos which show a flower.
Select all the correct photos and hit Submit
(scroll down if you don’t see the button). You will then be redirected to the app dashboard.
Step 2: Add iOS platform to your Facebook app.
Click on Settings
.
Click on Add Platform
.
Tap on the Apple logo.
This will generate a form for iOS platform.
Now we need the bundle ID to fill in this form. Let’s open your iOS project and follow these 3 steps:
- Tap on the project icon on the left sidebar.
- Choose
General
tab. - Copy the
Bundle Identifier
field.
Go back to the iOS form on the web and paste in the bundle ID you just copied.
Turn on Single Sign On
.
Then click Save Changes
.
Now your Facebook app is fully configured.
Let’s integrate it into to your iOS project
Step 1: Import Facebook SDK.
The easiest way is to use cocoapods
. If you haven’t installed cocoapods
yet, please read this guide at step 2.
Add FBSDKCoreKit
and FBSDKLoginKit
pods to your Podfile:
Open Terminal
and run this command:
Step 2: Configure the Info.plist file.
Open the generated .xcworkspace
.
Right-click on the Info.plist
.
Choose to open as Source Code
.
You will see the content of Info.plist
in XML format:
Go back to your Facebook app settings on the web.
Click on Quick Start
Scroll down to the Configure your info.plist
part.
Facebook already generated 2 blocks of XML code for us with all the necessary information prefilled.
Copy the first block to your Info.plist
(under the <dict>
tag).
Then copy the second block just below the first one.
If you do it correctly, your Info.plist
will look like this:
Step 3: Wire it up in AppDelegate.
Open AppDelegate.swift
.
Import Facebook SDK module at the top of the file.
Add the following lines:
What do these 2 lines do?
- This is when the app first launch, we want to call the
FBSDKApplicationDelegate
to initialize the Facebook SDK. - This is after the app switch to Safari (or the Facebook iOS app), finish the authentication and then switch back to our app, it will store the
accessToken
that Facebook passes back to us as a proof of successful authentication.
Step 4: Call login action in ViewController.
In your LoginViewController
, when user tap on the Login With Facebook
button, you will make the call to Facebook:
This is what the code above does:
- Instantiate a
loginManager
. This object is used to make the call to authenticate with Facebook. - Define a list of permissions to request. For simplicity, we only ask for the public profile of our users.
- Define a closure to handle callback when the Facebook authentication finished. There are 3 cases to handle here:
- 3.1: There is an error occured while authenticating. You can look into the
error
variable to see what went wrong. - 3.2: User tap
Cancel
while authenticating. Usually you don’t want to do anything here. - 3.3: The authentication succeeded. We should redirect them to the
Home View Controller
.
- 3.1: There is an error occured while authenticating. You can look into the
- Actually make the call to authenticate user via the
loginManager
object. We also pass all variables defined above into this method call.
After this step, the users will be brought to Safari (or Facebook iOS app) to review the permissions. If they’re happy with it, they would grant our app access to those information.
Then the user will be switched back to our app and into the callback application:openURL:sourceApplication:annotation
in the AppDelegate
we just defined above.
Step 5: Handle autologin.
After you have been successfully authenticated, you are provided an accessToken
. The next time users open the app, you want to log them in automatically.
Facebook SDK does provide the FBSDKAccessToken.currentAccessToken()
method which returns the accessToken
obtained from previous authentication. If it is not nil, we know that we don’t need to login anymore.
Step 6: Provide a way for user to logout.
This can be done very easily:
Wrap up
The full source code of this demo app can be found at https://github.com/hoang-tran/TestFacebookLogin.
Today we went over the process of authenticating our app with Facebook users. We went from creating a Facebook app
on Facebook developers website to integrate the whole flow into our iOS app. The process is simple in theory yet requires a lot of steps.
On the next post, we will learn how to take advantage of the Facebook accessToken
once we have it. We’re gonna explore how to retrieve the user information and what we can do with it.
Stay tune, guys 😎


this.beforeCallCount = 0;
this.afterCallCount = 0;
this.beforeCallCount++;
return this.super() + count + view.width;
this.afterCallCount++;
this.afterValue = value;
this.parent.setAttribute('width', value);
return this.super() + count + view.height;
return 5 >= view.height || this.super()
this.parent.setAttribute(attribute, value);
var container = this.container,
layoutX = container.layoutX,
layoutY = container.layoutY,
layoutBgcolor = container.layoutBgcolor,
v1 = container.v1,
v2 = container.v2,
v3 = container.v3,
v4 = container.v4,
v5 = container.v5,
v6 = container.v6;
// Verify doBeforeUpdate and doAfterUpdate we're called
assert.equal(1, layoutX.beforeCallCount, 'doBeforeUpdate should be called once.');
assert.equal(1, layoutX.afterCallCount, 'doAfterUpdate should be called once.');
assert.equal(70, layoutX.afterValue, 'The value passed to doAfterUpdate should be 70.');
// Verify updateSubview works and default as well as overridden
// skipSubview works
assert.equal('#666666', v1.bgcolor, 'View one should have a bgcolor of #666666.');
assert.equal('#666666', v2.bgcolor, 'View two should have a bgcolor of #666666.');
assert.equal('#666666', v3.bgcolor, 'View three should have a bgcolor of #666666.');
assert.equal('#666666', v4.bgcolor, 'View four should have a bgcolor of #666666.');
assert.equal('#666666', v5.bgcolor, 'View five should have a bgcolor of #666666.');
assert.equal('transparent', v6.bgcolor, 'View six should have a bgcolor of undefined.');
assert.equal(10, v1.x, 'View one should have an x of 10.');
assert.equal(21, v2.x, 'View two should have an x of 21.');
assert.equal(33, v3.x, 'View three should have an x of 33.');
assert.equal(46, v4.x, 'View four should have an x of 46.');
assert.equal(60, v5.x, 'View five should have an x of 60.');
assert.equal(0, v6.x, 'View six should have an x of 0.');
assert.equal(5, v1.y, 'View one should have a y of 5.');
assert.equal(16, v2.y, 'View two should have a y of 16.');
assert.equal(28, v3.y, 'View three should have a y of 28.');
assert.equal(41, v4.y, 'View four should have a y of 41.');
assert.equal(0, v5.y, 'View five should have a y of 0 because it gets skipped.');
assert.equal(0, v6.y, 'View six should have a y of 0.');
assert.equal(55, container.y, 'Update parent should set the container y to 55.');
assert.equal(100, container.width, 'Update parent for layoutX should not have been called.');
// Verify subview monitoring works
v3.setAttribute('visible', false);
assert.equal(2, layoutX.beforeCallCount, 'doBeforeUpdate should be called once again.');
assert.equal(2, layoutX.afterCallCount, 'doAfterUpdate should be called once again.');
assert.equal(55, layoutX.afterValue, 'The value passed to doAfterUpdate should be 55.');
assert.equal(10, v1.x, 'View one should have an x of 10.');
assert.equal(21, v2.x, 'View two should have an x of 21.');
assert.equal(33, v3.x, 'View three should still have an x of 33.');
assert.equal(33, v4.x, 'View four should have an x of 33.');
assert.equal(46, v5.x, 'View five should have an x of 46.');
assert.equal(0, v6.x, 'View six should have an x of 0.');
assert.equal(5, v1.y, 'View one should have a y of 5.');
assert.equal(16, v2.y, 'View two should have a y of 16.');
assert.equal(28, v3.y, 'View three should still have a y of 28.');
assert.equal(28, v4.y, 'View four should have a y of 28.');
assert.equal(0, v5.y, 'View five should have a y of 0 because it gets skipped.');
assert.equal(0, v6.y, 'View six should have a y of 0.');
assert.equal(41, container.y, 'Update parent should set the container y to 41.');
v6.setAttribute('visible', true);
assert.equal(3, layoutX.beforeCallCount, 'doBeforeUpdate should be called once again.');
assert.equal(3, layoutX.afterCallCount, 'doAfterUpdate should be called once again.');
assert.equal('#666666', v6.bgcolor, 'View six should have a bgcolor of #666666.');
assert.equal(10, v1.x, 'View one should have an x of 10.');
assert.equal(21, v2.x, 'View two should have an x of 21.');
assert.equal(33, v3.x, 'View three should still have an x of 33.');
assert.equal(33, v4.x, 'View four should have an x of 33.');
assert.equal(46, v5.x, 'View five should have an x of 46.');
assert.equal(55, v6.x, 'View six should have an x of 55.');
assert.equal(5, v1.y, 'View one should have a y of 5.');
assert.equal(16, v2.y, 'View two should have a y of 16.');
assert.equal(28, v3.y, 'View three should still have a y of 28.');
assert.equal(28, v4.y, 'View four should have a y of 28.');
assert.equal(0, v5.y, 'View five should have a y of 0 because it gets skipped.');
assert.equal(41, v6.y, 'View six should have a y of 41.');
assert.equal(55, container.y, 'Update parent should set the container y to 55.');
layoutX.setAttribute('updateparent', true);
assert.equal(4, layoutX.beforeCallCount, 'doBeforeUpdate should be called once again.');
assert.equal(4, layoutX.afterCallCount, 'doAfterUpdate should be called once again.');
assert.equal(70, container.width, 'Update parent for layoutX should set the container width to 70.');
// Verify reverse works
layoutX.setAttribute('reverse', true);
assert.equal(55, v1.x, 'View one should have an x of 10.');
assert.equal(41, v2.x, 'View two should have an x of 41.');
assert.equal(33, v3.x, 'View three should still have an x of 33.');
assert.equal(28, v4.x, 'View four should have an x of 28.');
assert.equal(21, v5.x, 'View five should have an x of 21.');
assert.equal(10, v6.x, 'View six should have an x of 10.');
assert.equal(70, container.width, 'Update parent for layoutX should set the container width to 70.');


|
Assimp
5.0.1, master @ cd42b955
|
Represents a layer in the file. More...
Public Member Functions | |
| Layer () | |
Public Attributes | |
| unsigned int | mFaceIDXOfs |
| Current face indexing offset from the beginning of the buffers. More... | |
| FaceList | mFaces |
| Temporary face list from the file. More... | |
| uint16_t | mIndex |
| Index of the layer. More... | |
| std::string | mName |
| Name of the layer. More... | |
| NormalChannel | mNormals |
| Normal vector channel from the file. More... | |
| uint16_t | mParent |
| Parent index. More... | |
| aiVector3D | mPivot |
| Pivot point of the layer. More... | |
| unsigned int | mPointIDXOfs |
| Current point indexing offset from the beginning of the buffers. More... | |
| ReferrerList | mPointReferrers |
| Lists for every point the index of another point that has been copied from this point or UINT_MAX if no copy of the point has been made. More... | |
| WeightChannelList | mSWeightChannels |
| Subdivision weight channel list from the file. More... | |
| PointList | mTempPoints |
| Temporary point list from the file. More... | |
| UVChannelList | mUVChannels |
| UV channel list from the file. More... | |
| VColorChannelList | mVColorChannels |
| Vertex color list from the file. More... | |
| WeightChannelList | mWeightChannels |
| Weight channel list from the file. More... | |
| bool | skip |
| Skip this layer? More... | |
Represents a layer in the file.
|
inline |
| unsigned int Assimp::LWO::Layer::mFaceIDXOfs |
Current face indexing offset from the beginning of the buffers.
| FaceList Assimp::LWO::Layer::mFaces |
Temporary face list from the file.
| uint16_t Assimp::LWO::Layer::mIndex |
Index of the layer.
| std::string Assimp::LWO::Layer::mName |
Name of the layer.
| NormalChannel Assimp::LWO::Layer::mNormals |
Normal vector channel from the file.
| uint16_t Assimp::LWO::Layer::mParent |
Parent index.
| aiVector3D Assimp::LWO::Layer::mPivot |
Pivot point of the layer.
| unsigned int Assimp::LWO::Layer::mPointIDXOfs |
Current point indexing offset from the beginning of the buffers.
| ReferrerList Assimp::LWO::Layer::mPointReferrers |
Lists for every point the index of another point that has been copied from this point or UINT_MAX if no copy of the point has been made.
| WeightChannelList Assimp::LWO::Layer::mSWeightChannels |
Subdivision weight channel list from the file.
| PointList Assimp::LWO::Layer::mTempPoints |
Temporary point list from the file.
| UVChannelList Assimp::LWO::Layer::mUVChannels |
UV channel list from the file.
| VColorChannelList Assimp::LWO::Layer::mVColorChannels |
Vertex color list from the file.
| WeightChannelList Assimp::LWO::Layer::mWeightChannels |
Weight channel list from the file.
| bool Assimp::LWO::Layer::skip |
Skip this layer?


The AADL files of this directory contains the various property sets used by
Cheddar.
The imported directory
gives a set of AADL examples which can be imported
into Cheddar and which shows the AADL capabilities of Cheddar.
The exported directory
shows some examples of XML Cheddar's project files and how
they can be exported in AADL.


Registration for Thomso'17 Zonals
This year Thomso, the annual youth festival of Indian Institute of Technology Roorkee, is coming to your city with its Zonals. Thomso'17 will be organising multiple events in your city. Grab this absolutely amazing opportunity to showcase your talent at one of the greatest and the grandest youth festivals of India.
Register NowOne
This year Thomso, the annual youth festival of Indian Institute of Technology Roorkee, is coming to your city with its Zonals. Thomso'17 will be organising multiple events in your city. Grab this absolutely amazing opportunity to showcase your talent at one of the greatest and the grandest youth festivals of India.
Two
This year Thomso, the annual youth festival of Indian Institute of Technology Roorkee, is coming to your city with its Zonals. Thomso'17 will be organising multiple events in your city. Grab this absolutely amazing opportunity to showcase your talent at one of the greatest and the grandest youth festivals of India.
Three
This year Thomso, the annual youth festival of Indian Institute of Technology Roorkee, is coming to your city with its Zonals. Thomso'17 will be organising multiple events in your city. Grab this absolutely amazing opportunity to showcase your talent at one of the greatest and the grandest youth festivals of India.
THOMSO 17


Spartan Blockchain Solutions (SBS) is a student-run, non-profit blockchain advisory and advocacy firm. Our mission is to provide local businesses and organizations with innovative blockchain solutions while jumpstarting Michigan State University’s ecosystem to become a leading academic institution in the blockchain space. Our analysts develop skills through internal workshops, client engagements, and networking with professionals in the blockchain space. We strive to help our student analysts and managers develop unique skills that will allow them to pursue careers in emerging technologies. The SBS Engagement Team interacts with clients to provide value and solve complex business problems by leveraging some of the most cutting-edge software platforms in the blockchain space.


wealthyvision is a name that has alot of meaning to it. It means the vision of wealth that he sees in the near future. It represents what he wants out of life and how he aspires to live generally. "Wealthyvision can mean alot of things" says the man himself. it can be music, sports, video, gaming, water bottles, dog food. its not limited to just one possibility.
wealthyvision has started out making beats from an ipad using an app called the iMPC. He has a huge interest in sampling and has made quite compelling beats using this method. his recent EP 'Hard Work Pays Off' is a reflection of the hard work that he has put in for a short period of time on an amazing body of work. Wealthyvision isn't seeing the amount of love due to lack of publicity but taking a look on his Soundcloud would make all of the difference. He has a team of producers by his side to help aid him in where he wants to take his musical imagination.


| |
This is the index.html (Home) |
| |
This is the About.html |
| |
This is the ER-Diagramm (this is in .png format) |
| |
This is index.html (Index of the "Information.." site) |
| |
This is TableAll.php (All batches ordered by products (alphabetically)) |
| |
This is TableByExpi.php (All batches ordered by expirationdate) |
| |
This is TableByFacility.php (All batches ordered by storagefacility and storagenumber) |
| |
This is TableByQuant.php (All products ordered by quantity in stock and facility they are stored in) |
| |
This is searchform.html |
| |
This is searchProduct.php |
| |
This is formreduce.php |
| |
This is reducequantity.php |
| |
This is index.php (Index of the "Product Portfolio" site) |
| |
This is deleteprod.php |
| |
This is newprod.php |
| |
This is Portfolio.php |
| |
This is forminsert.php |
| |
This is forminsert2.php |
| |
This is insertInfoProcess.php |


WIE Student Branch Affinity group of IEEE- NIEC is the beholder of enthusiastic aspiring women , who believe in their vision ,to transit technology through Voluntary participation and leadership roles.Here in WIE NIEC , we believe in creating a atmosphere for sustaining technological innovations through the nurturing talents of girl members that are profoundly supported by boys . Established in 2015 , WIE Affinity NIEC has emerged from being a droplet of water to a pearl of women empowerment , that is valued in terms of it's highly successful events and achievements at global level. We not only do inspirational work for technology , but allow it to become aspiration for others.This line is made into a fact by Affinity's most prominent event -STAR Program.Organised in two higher secondary girls schools , for fostering STEM education in girl students,it has stood by its name-Student -Teacher & Research Engineer/Scientist Program.
IEEE NIEC WIE Affinity group is a dream that will continue to evolve by bringing forth women in engineering to take technology to it's Zenith.
The IEEE Computer Society is the world's leading membership organization dedicated to computer science and technology. Serving more than 60,000 members, the IEEE Computer Society is the trusted information, networking, and career-development source for a global community of technology leaders that includes researchers, educators, software engineers, IT professionals, employers, and students.
© 2016 - All Rights with IEEE NIEC


-
There we go. Now it's official.
-
SpaceUp has started! https://db.tt/a24WdFrv
-
It's a nice dream, but it's unfortunately just that.
-
The dream for scientists, analysts, and programmers is for all the world's data to be in 1 place, in 1 format, and have 1 naming convention.
-
making graphs!
-
Oatmeal cookies and coffee. Breakfast of champions.
-
I'll fix it tomorrow. #sleep
-
I guess it's still to early to require automatic https for Let's Encrypt certificates. I'm getting "untrusted" errors from some browsers.
-
Fun fact: There are more people under 15 in India then there are in the U.S. period.
-
Anyone have any good resources for learning intermediate-advanced Statistics?
-
Kinda wanna blog more, but I don't want to look at my computer anymore. 😪
-
🎉🎉 Open Source Project Meetup Night 🎉🎉
-
It's easier to just delete some after a week. The impulse to read clickbait articles vanishes, and only the best articles remain.
-
Finally caught up on all the articles I've been hoarding for the last week. By that I mean I read 2 of them, and deleted 8.
-
Everything I needed to do today is done. Now, time to relax.
-
I love it when all my tests pass.
-
I love that Dr. Drang links to the actual bills. It makes them so much easier to find.
-
"California and New York State legislatures to force smartphone manufacturers... to incorporate backdoors..."
http://bit.ly/1ZNIP0L
-
I recently read King Space Void by my friend Anthony Trevino. It's a fun, bite-sized bit of bizzareness. You should check it out!
-
That feeling when you want to have a server just to serve your clever 500 error jokes.


speed_vector
should be converted to an ordinal factor since its categories have a natural ordering. By default, the function factor()
transforms speed_vector
into an unordered factor. To create an ordered factor, you have to add two additional arguments: ordered
and levels
.
factor(some_vector,
ordered = TRUE,
levels = c("lev1", "lev2" ...))
By setting the argument ordered
to TRUE
in the function factor()
, you indicate that the factor is ordered. With the argument levels
you give the values of the factor in the correct order.
From speed_vector
, create an ordered factor vector: factor_speed_vector
. Set ordered
to TRUE
, and set levels
to c("slow", "medium", "fast")
.
# Create speed_vector
speed_vector <- c("medium", "slow", "slow", "medium", "fast")
# Convert speed_vector to ordered factor vector
factor_speed_vector <-
# Print factor_speed_vector
factor_speed_vector
summary(factor_speed_vector)
# Create speed_vector
speed_vector <- c("medium", "slow", "slow", "medium", "fast")
# Add your code below
factor_speed_vector <- factor(speed_vector, ordered = TRUE, levels = c("slow", "medium", "fast"))
# Print factor_speed_vector
factor_speed_vector
summary(factor_speed_vector)
msg = "Do not change anything about the command that specifies the `speed_vector` variable."
test_object("speed_vector", undefined_msg = msg, incorrect_msg = msg)
test_function("factor", args = c("x", "ordered", "levels"),
incorrect_msg = c("The first argument you pass to `factor()` should be `speed_vector`.",
"Make sure to set `ordered = TRUE` inside your call of `factor()`.",
"Make sure to set `levels = c(\"slow\", \"medium\", \"fast\")` inside your call of `factor()`."))
test_object("factor_speed_vector", eq_condition = "equal",
incorrect_msg = "There's still something wrong with `factor_speed_vector`; make sure to only pass `speed_vector`, `ordered = TRUE` and `levels = c(\"slow\", \"medium\", \"fast\")` inside your call of `factor()`.")
success_msg("Great! Have a look at the console. It is now indicated that the Levels indeed have an order associated, with the `<` sign. Continue to the next exercise.")
Use the function factor()
to create factor_speed_vector
based on speed_character_vector
. The argument ordered
should be set to TRUE
since there is a natural ordering. Also, set levels = c("slow", "medium", "fast")
.


SBATrackedItemDetailsStepObject
open class SBATrackedItemDetailsStepObject : RSDFormUIStepObject, SBATrackedItemDetailsStep
SBATrackedItemDetailsStepObject
is a concrete implementation of the SBATrackedItemDetailsStep
protocol that includes a template for creating multiple schedules assigned to this tracked item details.
Seealso
SBAMedicationTrackingStepNavigator
-
The tracked item for this step.
Declaration
Swift
public private(set) var trackedItem: SBATrackedItem?
-
The template input field for selecting the time of day for a given schedule.
Declaration
Swift
lazy public private(set) var scheduleTimeTemplate: RSDCopyInputField { get set }
-
The template input field for selecting the days of the week for a given schedule.
Declaration
Swift
lazy public private(set) var scheduleDaysTemplate: RSDCopyInputField { get set }
-
Default initializer.
Declaration
Swift
public init(identifier: String)
Parameters
identifier
The step identifier.
-
Initializer required for copying the step.
Declaration
Swift
public required init(identifier: String, type: RSDStepType?)
-
Initializer required for decoding the step.
Declaration
Swift
public required init(from decoder: Decoder) throws
-
Override copy into to copy the schedule templates.
Declaration
Swift
open override func copyInto(_ copy: RSDUIStepObject)
-
Create a copy of this tracked item.
Declaration
Swift
open func copy(from trackedItem: SBATrackedItem, with previousAnswer: SBATrackedItemAnswer?) -> RSDStep?
-
Create a mapping of key/value pairs for this
RSDStep.Type
.Declaration
Swift
open func answerMap(from taskResult: RSDTaskResult) -> (answers: [String : Any], schedules: [RSDWeeklyScheduleObject])?
-
Subclasses must implement and DO NOT call super.
Declaration
Swift
open func answer(from taskResult: RSDTaskResult) -> SBATrackedItemAnswer?
-
Class function for returning the identifiers for the added fields.
Declaration
Swift
open class func inputFieldIdentifiers() -> [String]
-
Class function for building the input fields that should be included in a top section.
Declaration
Swift
open class func buildInputFields() -> [RSDInputField]
-
Class function for building the input field for the schedule time.
Declaration
Swift
open class func buildScheduleTimeInputField() -> RSDCopyInputField
-
Class function for building the input field for the schedule days of the week.
Declaration
Swift
open class func buildScheduleDaysInputField() -> RSDCopyInputField


Please enter the email which you used to register
*
Enter Security Code sent to your registered email
Passwords don't match


{% extends "layout.html" %} {% block main %}
Welcome, {{ user }}. View and create custom dates here.
Enter your custom date name and when it happened / is due to happen.


Click a room on the map to see more information.
Room A
Capacity: 250
Popular sessions in here:
- Diving in at the deep end with Canvas
- Real-world Applications of HTML5 APIs
- Transforms and Animations
Room B
Capacity: 230
Popular sessions in here:
- Building Responsive UIs
- Getting to Grips with JavaScript
- A Fresh Look at Layouts


{% extends 'layouts/layout-manage-v10.html' %} {% block pageTitle %} Remove a phone number {% endblock %} {% block content %}
Some NHS services may continue to use this phone number to contact you until their systems update.


§179D-9 Enactment of rules. The department shall adopt the necessary rules not later than one and one-half years after July 1, 2007. [L 1987, c 199, pt of §1; am L 2007, c 262, §10]


>>
<<
Usr
Pri
JfC
LJ
Phr
Dic
Voc
!:
Help
Primer
Experiment
You are encouraged to experiment. Try entering similar lines with different numbers. It is clear that + is plus and - is minus. Enter lines that use * for times and % for divide. From using % you will pretty quickly see that numbers such as 2.5 can be the result, and that they can also be used as arguments.
Until you have more experience, you might sometimes be surprised or even disconcerted by what you observe. Take things in small steps. Try examples where you are pretty sure you already know the answer, and do the experiment to confirm your understanding. If a result puzzles you too much, don't spend time on it in these early stages.
3 - 5
_2
The _2, instead of -2, might confuse you. Don't worry, it will be explained in a bit.
Most examples in this book show what you should type, indented by three spaces, and also show the result the system displays. This means that you can read the book in a casual manner, without having to use the system to see results. However, the only way you will really learn is by eventually trying the examples and experimenting with your own. Examples are shown in a fixed-pitch font much as they would appear in the ijx window of your system. A larger font is used in some examples to make it easier for you to read and type the example into the system. This is done where you might mistype something because of being unfamiliar with some of the words, or where a typo could have confusing results.
While experimenting, you frequently want to execute minor variations on sentences you have already tried. There are several shortcuts that make this easier. In the ijx window you can move the cursor to any line in the window and press Enter to recall that line as a new line at the bottom of the window ready for editing. You can recall previous input lines for editing by holding down Shift+Ctrl and pressing the up arrow key until you see the line you want to work with.
The examples in most sections are self-contained, but a later part of a section might depend on steps taken in an earlier part. A few sections depend on steps taken in previous sections, but this should be fairly obvious.
>>
<<
Usr
Pri
JfC
LJ
Phr
Dic
Voc
!:
Help
Primer


The world of digital interaction beyond the web browser has drastically evolved. Ben will go through some of the challenges he and others at his company have faced implementing new technologies like depth cameras, augmented reality, and large touch screens in permanent and unforgiving environments. He will go through Helios' process of creating successful experiences and some pitfalls to avoid mid project. He will also talk about a larger industry issue : making time for side projects.
In a hands on design exercise, exploree methods to vary forms, visually change the proportion of designs and support multiple brand themes using common or similar platforms and components
How do you make someone stop for a moment to consider their own heartbeat? How do you get a crowd of swanky socialites to jump into a pool? Can you measure happiness with a webcam? Sometimes half of the challenge of an installation is getting people to overcome their inhibitions, and give in to enjoying themselves. In this session, Red Paper Heart will teach you all about how they create experiences for the physical world, what they’ve learned, what they’ve had to unlearn, and where they hope to take things next.
Product development in plugged-in world. An introduction to the world of 3D scanning and 3D printing, with an overview of the current market, technologies, and demonstrations of design and prototyping techniques using these technologies


Blog
Reading time: 1 min
poetry solitude isolation
Laugh, and the world laughs with you; Weep, and you weep alone; For the sad old earth must borrow its mirth, But has trouble enough of its own. Sing, and the hills will answer; Sigh, it is lost on the air; The echoes bound to a joyful sound, But shrink from voicing care. Rejoice, and men will seek you; Grieve, and they turn and go; They want full measure of all your pleasure,
Read More…
Freecodecamp - The Story of a Moderate Achievement
Andy T
Reading time: 3 min
web development freecodecamp achievement
The title of this post says “a moderate achievement” and in reality it is, but I am still proud of the topic that I’m about to talk about. I mentioned in one of my first posts on this blog that I started using freeCodeCamp many years ago as one of my first forays into learning front end development. At the time HTML, CSS and JavaScript. I was dedicated for a number of month and almost completed the front end certificate, which consisted of about 300 hours of study.
Read More…Reading time: 2 min
hugo web design gatsby
So it’s been a while since I posted an update on this blog. I guess it seems like I’ve been taking a break from coding, but that’s not exactly accurate. Before starting this site, I spent a lot of time looking at the many web design tools and decided that I wanted to use an SSG to create this blog. I investigated all the major SSGs, Hugo, Gatsby, Jekyll, 11ty and more and decided that Hugo was the best for me as it seemed to have the shortest entry barrier.
Read More…Reading time: 1 min
poetry valentines
Shall I compare thee to a summer’s day? Thou art more lovely and more temperate: Rough winds do shake the darling buds of May, And summer’s lease hath all too short a date: Sometime too hot the eye of heaven shines, And often is his gold complexion dimmed, And every fair from fair sometime declines, By chance, or nature’s changing course untrimmed: But thy eternal summer shall not fade, Nor lose possession of that fair thou ow’st,
Read More…
T'was the Night Before Christmas
Clement Clarke Moore
Reading time: 3 min
poetry christmas
‘Twas The Night Before Christmas, when all through the house Not a creature was stirring, not even a mouse; The stockings were hung by the chimney with care, In hopes that St. Nicholas soon would be there; The children have nestled all snug in their beds, While visions of sugar-plums danced in their heads; And mamma in her ‘kerchief, and I in my cap, Had just settled down for a long winter’s nap,
Read More…
Adding Elements to a Hugo a Blog
Andy T
Reading time: 2 min
blogging hugo disqus
I’ve really enjoyed playing around with Hugo over the past few weeks and am now using it to build another site for my wife. That site is almost complete, which is why I haven’t really posted much in this site for a while. I have been playing around and adding several small things to this site though. One very cool addition to the site has been a Disqus comment function. It was very easy to set up as part of the Hugo framework and really worthwhile.
Read More…
I Wandered Lonely As A Could
William Wordsworth
Reading time: 1 min
poetry loneliness
I wandered lonely as a cloud That floats on high o’er vales and hills, When all at once I saw a crowd, A host, of golden daffodils; Beside the lake, beneath the trees, Fluttering and dancing in the breeze. Continuous as the stars that shine And twinkle on the milky way, They stretched in never-ending line Along the margin of a bay: Ten thousand saw I at a glance, Tossing their heads in sprightly dance.
Read More…Reading time: 4 min
blogging hugo skeleton bootstrap
I’ve been working on this blog for some time now and I think it’s worthwhile to document what I’ve done so far, just in case it’s helpful for other people. I mentioned in a previous post that I’m building this site with Hugo static site generator. Initially I followed a tutorial from Zachary Wade Betz, on how to build a Hugo blog from scratch. The tutorial can be found here Hugo Tutorial and truly is a great way to get accustomed to the structure of Hugo and how to use it to build a great website.
Read More…Reading time: 1 min
hugo wordpress
This is my first mini update of this blog. I’ve been learning more and more about Hugo to build out this website and feel like I’m getting the hang of it now. I think Hugo is a great, easy to access SSG that is incredibly powerful and so fast. The way it generates static sites is really quite incredible. I really like it. There has been a bit of a learning curve, and there are still plenty of things that I still don’t know how to do, but it hasn’t been anywhere near as complicated as I thought it would be.
Read More…Reading time: 2 min
wordpress hugo web design
So I’m getting back into designing websites for fun. I started learning HTML, CSS and JavaScript several years ago through freecodeCamp and I really enjoyed it, but somehow got out of practice a few years ago. When I had a need to build a few websites several years ago, instead of putting the web design principles that I had already learned, I decided to use WordPress. I built quite a few sites using WordPress and some themes, but I always felt that it was kinda cheating - not really web design.
Read More…
That It Will Never Come Again
Emily Dickinson
Reading time: 1 min
poetry time
That it will never come again Is what makes life so sweet. Believing what we don’t believe Does not exhilarate. That if it be, it be at best An ablative estate – This instigates an appetite Precisely opposite. Photo by Diogo Nunes
Read More…Reading time: 2 min
poetry life
If you can keep your head when all about you Are losing theirs and blaming it on you, If you can trust yourself when all men doubt you, But make allowance for their doubting too; If you can wait and not be tired by waiting, Or being lied about, don’t deal in lies, Or being hated, don’t give way to hating, And yet don’t look too good, nor talk too wise:
Read More…Reading time: 1 min
poetry trees
I think that I shall never see A poem lovely as a tree.


Home Page
Our Locations
Pat's Salmon Cookies Sales
Daily Schedule:
New Location Form
Place :
Minimum No. of Customers per Hour :
Maximum No. of Customers per Hour :
The Average number of Cookies Purchased per Customer:


ACTION RESEARCH AS A PRACTICE-CHANGING PRACTICE
Authors
Stephen Kemmis
Status
Unread
Relevance
Details how Action Research should be understood and enacted philosophically.
Quotations
Notes
References
Concepts
Field of Study
Methodology


The Talented Mr. Ripley (1999) by John Sylva Rating: A
In forty years or so, as people do now with such movies as "Bringing Up Baby" or "Gone With the Wind", people will look back on one film that starred a chunk of the A-list of actors that made their mark in the movie industry during the early years of the 21st century. The cast of this movie will consist of the next Audrey Hepburn-s, the next Clark Gable-s, and so on. That film is "The Talented Mr. Ripley," a haunting, stunning thriller that follows the same form legendary director Alfred Hitchcock uses in films such as the 1960 spellbinding classic, "Psycho".
His last film being 1996's war/love story "The English Patient", Anthony Minghella writes and directs this masterful, chilling character study with one of the most appealing, talented casts of any film this year. Adapted from the Patricia Highsmith novel of the same name, the screenplay for "The Talented Mr. Ripley" is written to perfection, starting with a long, thorough exposition that leads to a phenomenal climax, followed by probably the most clever, thoughtful ending of the year. From first frame to last, "The Talented Mr. Ripley" gives you your money's worth with humor, suspense, and not one, not two, but four Academy Award worthy performances that will certainly enhance each actor's career.
On the surface, "Ripley" may appear to be just another entry into the ongoing dice ‘em up flick genre, but the film goes much deeper than anything has in that area, making a film comparable to the brilliance of "Psycho." Thomas Ripley is a Norman Bates for the new millennium, a tragic, unsettling character whom you want to associate with and feel for, but in the end you can't help hoping he fails in his conquest of murder and lies.
The film, set in the 1950's follows a young sociopath named Thomas Ripley (Matt Damon) who is persuaded by a man who is impressed with Tom's piano skills, Herbert Greenleaf (James Rebhorn) to go to Italy and retrieve his wealthy, first-class flirt of a son, Dickie (Jude Law). Ripley accepts the offer, and sets off to Italy. Upon his arrival at a crowded airport, he runs into Meredith Louge (Cate Blanchett), a wealthy business woman who works in the textile industry, whom he will introduce himself to as Dickie Greenleaf. From here, it's apparent Ripley would like to live the life of Dickie instead of his own, and upon his first meeting with Dickie, that thought becomes an obsession, which becomes a murder.
"Ripley" has Tom posing as an old classmate of Dickie's from Princeton, and as a result, Dickie and girlfriend Marge Sherwood (Gwyneth Paltrow) automatically befriend him and Dickie invites Tom stay at his home. Tom falls in love with the lifestyle that Dickie and Marge live daily, and also with Dickie as a person. Where things get even more complicated is when Tom decides to assume Dickie's life, creating himself a fake I.D., and introducing himself to everyone except Marge as Dickie Greenleaf. As the plot unfolds, Meredith will start to date Dickie, and once things really get going, a fair number of lives have been taken. It will be Ripley's ultimate task to maintain his fake identity, but the goings get harder for him once Meredith, who knows him as Dickie, and Marge, who knows him as Tom, start interacting.
"The Talented Mr. Ripley" is similar to last fall's oddball comedy "Being John Malkovich" in a variety of ways, although in "Malkovich," being someone else is as easy as crawling into their brain through a portal, but in "Ripley," you must continue killing and lying to maintain your new identity. These are two of many recent films that focus on a character wanting to be someone else. What is it about changing one's identity that perplexes so many filmmakers to the point where they write feature films about the subject matter? "Ripley" is the only one that can be classified as film noir, and is the most effective of all in that this is undoubtedly, the best thriller of the year.
Matt Damon first broke into Hollywood two years ago with "Good Will Hunting," and ever since has had the boy next door, goody-goody reputation following him. His performance here in "Ripley" is one that will erase his old reputation, and bring on a more sophisticated feel to him. His performance two years ago in "Hunting" was a shock, but Damon is as it his best yet in "Ripley," delivering his lines with an eerie, powerful sense. Damon would seem to be the last person who could realistically play a villain in a film, but here he proves he can be the good guy just as well as he can the bad.
Jude Law, a lesser known actor who has appeared in fiction flicks as "Gattaca" and "eXistenZ," also turns in a fine performance as his charismatic character. Dickie is a mostly realistic, yet somewhat over the top character who will be your best friend one moment, and the next be your worst enemy.
Gwyneth Paltrow is even more Oscar worthy here than she was in last year's Academy Award Best Picture "Shakespeare in Love," showing off her gleaming dramatic chops in the film's final forty five minutes. Paltrow's character is too light during the film's first half to get any award recognition for her performance as the confused, devastated Marge, but now Paltrow shows comedy isn't the only genre she can master.
As far as supporting roles go, "Ripley" has an array of fine actors who are underused as their interesting characters. Among them being Cate Blanchett, who was robbed last year of an Oscar from one of this film's co-stars, Gwyneth Paltrow, in the dazzling film "Elizabeth." A second Oscar nomination in a row is most probably out of the question for Blanchett, as although she shines as her important character, she is only fed ten to twelve minutes screen time from Minghella's screenplay. Blanchett's role should have and could have been enhanced, as Meredith Louge is not just another part of Ripley's life, she is the link between the real world and the world that Ripley has created for himself. On the other hand, Phillip Seymour Hoffman comes of rather restrained as his wise cracking, obnoxious character of Freddy Miles, a close friend of Dickie's who steals the attention that Tom gets from Dickie around halfway through the film. Other supporting actors who deserve more screen time include Jack Davenport as a close friend of Marge's, and Jack Rebhorn, as the concerned Herbert Greenleaf.
"The Talented Mr. Ripley" is an unpredictable, unforgettable motion picture, that will certainly hold its own at the Oscars in March. Every element of the film is haunting, from the lively musical score to the beautiful Italian locations, "Ripley" will follow you in your mind for days after your viewing it. Anthony Minghella's wonderful masterpiece is clever in the way that it absorbs you, making you believe the friendship between Tom and Dickie, and then throws numerous plot twists at you, wrapping you around its story even more. And that's where the film truly succeeds, in a way that it will challenge your thoughts about being another person, as the violent images that occur from Ripley's longing to become Dickie are reason enough to just be happy with yourself.
The Bottom Line: Brilliant screenplay and direction make "Ripley" a thrilling, haunting drama.
Film reviewed December 29th, 1999.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Enter Phase 0 Week 1 of Dev Bootcamp. This post addresses several matters related to Git and GitHub.
- Observations regarding version control and its benefits
- Tracking changes
- The utility of GitHub
Version control is essential to the overall development lifecycle. By utilizing version control, teams of developers can concurrently work on a project in a structured and logical manner. Changes to any repository files can be viewed, approved, reverted, and more. Developers can be notified of changes to ensure they are working on up-to-date code, preventing rework and confusion from files in question.
Git provides several features for tracking changes. Using a commit log and messages, developers can easily trace changes as well as view modifications. Commit times and specific changes are conveniently available. Separate histories are also kept for each branch, allowing developers to concurrently work on different features before discussing what to include to the master branch.
GitHub provides data redundancy, developer networking, collaborative tool, and open source repository. Having options to save data to more than one place is very important in this age, since data becomes more and more valuable. Being a giant open source repository, developers can use GitHub to share ideas and improve upon existing code. Finally, developers can use GitHub as a professional networking tool to display their work and skills.


<b>
The <b>
element is typically used to apply bold highlighting to the
content of the element. This element is part of the highlighting domain. Use this element
only when a more semantically appropriate element is not available. For example, for
specific items such as GUI controls, use the <uicontrol>
element.
Category: Highlighting elements


## encoding: utf-8 <%inherit file="brave.core.template.light"/> <%block name="title">${_("Authorize {0}").format(ar.application.name) | h}%block> <%block name="header"> ${parent.header()} %block> <%block name="post"> ${parent.post()} %block> % if not success:
This application wishes to know certain information about your character. All applications are given access to the following information:
Additionally, this application requires the following additional information:


The root file of a LaTeX document should contain a \documentclass command, then the document preamble, and finally the document environment.
See the wiki for more information.


---
layout: page
title: About
permalink: /about/
sitemap:
priority: 0.7
changefreq: 'monthly'
---
A little about me :
-
I was born and brought up in one of the liveliest cities on this planet -
Mumbai
.
-
A self-taught amateur musician, I can play up to five different instruments.
-
An impulsive backpacker.
My Work :
-
Nomura Services India Pvt. Ltd. | Developer | July 2014 - Present
-
Enhancing existing legacy Risk v/s Finance reconciliation tool to onboard firms other reconciliation
requirements. Architectural changes to overcome legacy issues. Onboard and setup new
reconciliations with new autocommenting
requirements. Significant improvement in performance
and memory utilization of the tool.
-
Received Nomura quarterly STAR award for providing off the shelf solution to autocode new rules using python's panda framework.
-
Lead a team of 6 interns to create a database deployment automation tool.
-
Developed and designed a dashboard for the Production Support team that automated tracking and reporting of the issues saving roughly 3 hours of the team every day. Globally used by more than 60 users.
-
FinalDesk | Co-Founder | Jan 2014 - Present
-
Co-founded a training-cum-internship program for engineering students to help them with technical trainings, interview preparation, soft skill development and internship opportunities
-
Developed a placement training program and delivered it across Mumbai University colleges and trained over 1500 students.
-
Started a blog to share articles on how to prepare for interviews. Led a team of 11 interns for content creation and social media marketing.
-
Developing mobile apps and a website to enable students to prepare for their interviews.
My Projects :


PDF2DSC(1) Ghostscript Tools PDF2DSC(1) NAME pdf2dsc - generate a PostScript page list of a PDF document SYNOPSIS pdf2dsc input.pdf [ output.dsc ] DESCRIPTION pdf2dsc uses gs(1) to read an Adobe Portable Document Format (PDF) docu‐ ment "input.pdf" and create a PostScript(tm) document "output.dsc" that conforms to Adobe's Document Structuring Conventions (DSC) requirements. This new document simply tells Ghostscript to read the PDF file and to display pages one at a time. The generated document can then be viewed with any PostScript viewer based on Ghostscript, like ghostview(1) on Unix or GSview on Windows, with which the user can browse through the pages of the PDF document in any order. If no output file is named on the command line, the name of the output file is that of the input file with any extension removed, followed by the extension ".dsc". CAVEATS The DSC document uses Ghostscript-specific procedures. In addition, the original PDF document must be accessible when the DSC document is pro‐ cessed. You need the file "pdf2dsc.ps" (originally by Russell Lang) supplied with Ghostscript since release 3.53. SEE ALSO gs(1), ghostview(1) VERSION This document was last revised for Ghostscript version 9.05. AUTHOR Yves Arrouye<EMAIL_ADDRESS>and Russell Lang gsview at ghost‐ gum.com.au 9.05 8 February 2012 PDF2DSC(1)


| 1 | package fr.sii.ogham.testing.helper.html; | |
| 2 | ||
| 3 | import java.io.IOException; | |
| 4 | import java.util.List; | |
| 5 | ||
| 6 | import javax.xml.parsers.ParserConfigurationException; | |
| 7 | ||
| 8 | import org.custommonkey.xmlunit.DetailedDiff; | |
| 9 | import org.custommonkey.xmlunit.Difference; | |
| 10 | import org.custommonkey.xmlunit.HTMLDocumentBuilder; | |
| 11 | import org.custommonkey.xmlunit.TolerantSaxDocumentBuilder; | |
| 12 | import org.custommonkey.xmlunit.XMLUnit; | |
| 13 | import org.custommonkey.xmlunit.exceptions.ConfigurationException; | |
| 14 | import org.junit.ComparisonFailure; | |
| 15 | import org.slf4j.Logger; | |
| 16 | import org.slf4j.LoggerFactory; | |
| 17 | import org.w3c.dom.Document; | |
| 18 | import org.xml.sax.SAXException; | |
| 19 | ||
| 20 | import fr.sii.ogham.testing.helper.exception.ComparisonException; | |
| 21 | ||
| 22 | /** | |
| 23 | * Utility class for checking HTML content. | |
| 24 | * | |
| 25 | * @author Aurélien Baudet | |
| 26 | * | |
| 27 | */ | |
| 28 | public final class AssertHtml { | |
| 29 | private static final Logger LOG = LoggerFactory.getLogger(AssertHtml.class); | |
| 30 | ||
| 31 | /** | |
| 32 | * Check if the HTML is identical to the expected. The HTML strings are | |
| 33 | * parsed into {@link Document}s. Two documents are considered to be | |
| 34 | * "identical" if they contain the same elements and attributes in the same | |
| 35 | * order. | |
| 36 | * <p> | |
| 37 | * For each difference, the difference will be logged with error level. It | |
| 38 | * will generate a {@link ComparisonFailure} with the expected string and | |
| 39 | * actual string in order to be able to visualize the differences on sources | |
| 40 | * directly in the IDE. | |
| 41 | * </p> | |
| 42 | * | |
| 43 | * @param expected | |
| 44 | * the expected HTML | |
| 45 | * @param actual | |
| 46 | * the HTML content to check | |
| 47 | */ | |
| 48 | public static void assertIdentical(String expected, String actual) { | |
| 49 | try { | |
| 50 |
1
1. assertIdentical : All method instructions removed → NO_COVERAGE |
HTMLDocumentBuilder builder = new HTMLDocumentBuilder(new TolerantSaxDocumentBuilder(XMLUnit.newTestParser())); |
| 51 | Document expectedDoc = builder.parse(expected); | |
| 52 | Document actualDoc = builder.parse(actual); | |
| 53 | DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(expectedDoc, actualDoc)); | |
| 54 | if (!diff.identical()) { | |
| 55 | logDifferences(diff); | |
| 56 | throw new ComparisonFailure("HTML element different to expected one. See logs for details about found differences.\n", expected, actual); | |
| 57 | } | |
| 58 | } catch (SAXException | IOException | ConfigurationException | ParserConfigurationException e) { | |
| 59 | throw new ComparisonException("Failed to compare HTML", e); | |
| 60 | } | |
| 61 | } | |
| 62 | ||
| 63 | /** | |
| 64 | * Check if the HTML is similar to the expected. The HTML strings are parsed | |
| 65 | * into {@link Document}s. Two documents are considered to be "similar" if | |
| 66 | * they contain the same elements and attributes regardless of order. | |
| 67 | * <p> | |
| 68 | * For each difference, the difference will be logged with error level. It | |
| 69 | * will generate a {@link ComparisonFailure} with the expected string and | |
| 70 | * actual string in order to be able to visualize the differences on sources | |
| 71 | * directly in the IDE. | |
| 72 | * </p> | |
| 73 | * | |
| 74 | * @param expected | |
| 75 | * the expected HTML | |
| 76 | * @param actual | |
| 77 | * the HTML content to check | |
| 78 | */ | |
| 79 | public static void assertSimilar(String expected, String actual) { | |
| 80 | try { | |
| 81 |
3
1. assertSimilar : All method instructions removed → SURVIVED 2. assertSimilar : All method instructions removed → SURVIVED 3. assertSimilar : All method instructions removed → NO_COVERAGE |
HTMLDocumentBuilder builder = new HTMLDocumentBuilder(new TolerantSaxDocumentBuilder(XMLUnit.newTestParser())); |
| 82 | Document expectedDoc = builder.parse(expected); | |
| 83 | Document actualDoc = builder.parse(actual); | |
| 84 | DetailedDiff diff = new DetailedDiff(XMLUnit.compareXML(expectedDoc, actualDoc)); | |
| 85 | if (!diff.similar()) { | |
| 86 | logUnrecoverableDifferences(diff); | |
| 87 | throw new ComparisonFailure("HTML element different to expected one. See logs for details about found differences.\n", expected, actual); | |
| 88 | } | |
| 89 | } catch (SAXException | IOException | ConfigurationException | ParserConfigurationException e) { | |
| 90 | throw new ComparisonException("Failed to compare HTML", e); | |
| 91 | } | |
| 92 | } | |
| 93 | ||
| 94 | | |
| 95 | @SuppressWarnings("unchecked") | |
| 96 | private static void logDifferences(DetailedDiff diff) { | |
| 97 |
1
1. logDifferences : All method instructions removed → NO_COVERAGE |
for (Difference difference : (List<Difference>) diff.getAllDifferences()) { |
| 98 | LOG.error(difference.toString()); // NOSONAR | |
| 99 | } | |
| 100 | } | |
| 101 | ||
| 102 | @SuppressWarnings("unchecked") | |
| 103 | private static void logUnrecoverableDifferences(DetailedDiff diff) { | |
| 104 |
1
1. logUnrecoverableDifferences : All method instructions removed → NO_COVERAGE |
for (Difference difference : (List<Difference>) diff.getAllDifferences()) { |
| 105 | if (!difference.isRecoverable()) { | |
| 106 | LOG.error(difference.toString()); // NOSONAR | |
| 107 | } | |
| 108 | } | |
| 109 | } | |
| 110 | ||
| 111 | private AssertHtml() { | |
| 112 | super(); | |
| 113 | } | |
| 114 | } | |
Mutations | ||
| 50 |
1.1 |
|
| 81 |
1.1 2.2 3.3 |
|
| 97 |
1.1 |
|
| 104 |
1.1 |


To-do List
To-do:
Category:
Date:
Time:
Add
Sort by Date
Incomplete First
items per page
5
10
20
Date
Time
To-do
To-do:
Category:
Date:
Time:
Save Change
X