1. Introduction -SonarQube Tutorial
SonarQube (previously known as Sonar) is an open source platform for Continuous Inspection of code quality. It is written in java and supported for 25+ languages such as Java, C/C++, C#, PHP, Flex, Groovy, JavaScript, Python, PL/SQL, COBOL, etc, it is also used for Android Development
1.1 SonarQube Architecture
The SonarQube Platform is made of 4 components:
1.One SonarQube Server starting 3 main processes:
-
Web Server for developers, managers to browse quality snapshots and configure the SonarQube instance
-
Search Server based on Elasticsearch to back searches from the UI
-
Compute Engine Server in charge of processing code analysis reports and saving them in the SonarQube Database
2.One SonarQube Database to store:
-
The configuration of the SonarQube instance (security, plugins settings, etc.)
-
The quality snapshots of projects, views, etc.
3.Multiple SonarQube Plugins installed on the server, possibly including language, SCM, integration, authentication, and governance plugins
4.One or moreSonarQube Scanners running on your Build / Continuous Integration Servers to analyze projects
1.2 SonarQube Integration
The following schema shows how SonarQube integrates with other ALM tools and where the various components of SonarQube are used.
-
Developers code in their IDEs and use SonarLint to run the local analysis.
-
Developers push their code into their favorite SCM: git, SVN, TFVC, …
-
The Continuous Integration Server triggers an automatic build, and the execution of the SonarQube Scanner required to run the SonarQube analysis.
-
The analysis report is sent to the SonarQube Server for processing.
-
SonarQube Server processes and stores the analysis report results in the SonarQube Database and displays the results in the UI.
-
Developers review, comment, challenge their Issues to manage and reduce their Technical Debt through the SonarQube UI.
-
Managers receive Reports from the analysis.
Ops use APIs to automate configuration and extract data from SonarQube.
Ops use JMX to monitor SonarQube Server.
2. Installation & Configuration
1.Download and unzip the SonarQube distribution (let’s say in “C:\sonarqube” or “/etc/sonarqube”)
2.Start the SonarQube server as follows
# On Windows, execute:
C:\sonarqube\bin\windows-x86-xx\StartSonar.bat
# On other operating system, execute:
/etc/sonarqube/bin/[OS]/sonar.sh console
3.It will Open the command prompt & you can observe the message once it is ready like.-SonarQube is up”
jvm 1 | 2017.03.21 18:18:36 INFO app[][o.s.p.m.Monitor] Process[web] is up
jvm 1 | 2017.03.21 18:18:36 INFO app[][o.s.p.m.JavaProcessLauncher] Launch p
rocess[ce]: E:\Users\SmlCodes\Desktop\Java\JDK 8.0\jre\bin\java -Djav
a.awt.headless=true -Dfile.encoding=UTF-8 -Xmx512m -Xms128m -XX:+HeapDumpOnOutOf
MemoryError -Djava.io.pngdir=C:\DevOps\sonarqube\temp -javaagent:E:\Users\smlcodes
_s.SmlCodes\Desktop\Java\JDK 8.0\jre\lib\management-agent.jar -cp ./lib/common
/*;./lib/server/*;./lib/ce/*;C:\DevOps\sonarqube\lib\jdbc\h2\h2-1.3.176.jar org.
sonar.ce.app.CeServer C:\DevOps\sonarqube\temp\sq-process5966313576283705229prop
erties
jvm 1 | 2017.03.21 18:18:55 INFO app[][o.s.p.m.Monitor] Process[ce] is up
jvm 1 | 2017.03.21 18:18:55 INFO app[][o.s.application.App] SonarQube is up
4.Once it is up, open http://localhost:9000/ from the browser to access SonarQube
5.You can Login by using default System administrator credentials admin/admin
6.9000 is the default port and can be changed in
SONAR_HOME\conf\sonar.properties
2.1 Configure MySQL Database with SonarQube
1.Go to MySQL website, download & Install MySQL Server Database
2.Login to MySQL database
3.Create new Database. For Ex: CREATE DATABASE `sonarqube`;
4.Go To SonarQube config folder location(C:\DevOps\sonarqube\conf) edit sonar.properties file and uncomment the following line for MySql and save it
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&
characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
5.Start the sonar server by executing
C:\DevOps\sonarqube\bin\windows-x86-64\StartSonar.bat
2.2 SonarQube Runner (Old, Use SonarScanner)
SonarQube Runner Download the latest version of SonarQube runner from and unzip to the desired location. SonarQube Runner is recommended as the default launcher to analyze a project with SonarQube.
1.Set a new environment variable as SONAR_RUNNER_HOME. And its value should be the unzipped path of sonar-runner zip file. Example,-C:\DevOps\sonar-runner-2.4” don’t put the semicolon (;)
2.Append Sonar Runner’s bin path (%SONAR_RUNNER_HOME%\bin) to the environment variable -PATH”.
3.Uncomment the following lines in the property file, ‘C:\DevOps\sonar-runner-2.4\conf\sonar-runner.properties’ and save it.
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- MySQL sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
2.3 SonarQube Runner vs Scanner
Answer is very simple: “Runner” is the old name for “Scanner”. Everything you need to know about the different SonarQube Scanners is available on the Scanners part of the official documentation.
If you’re stuck to Java 7 , then you can use: SonarQube Runner (sonar-runner) up to version 5.5 of SonarQube.
Latest: Download -SonarQube-Scanner” (download as per your machine OS) https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
-
Unzip the file and add
Path
to environment variablesPath — D:\sonar-scanner-<IP_ADDRESS>7-windows\bin
2.Navigate to config folder of sonar scanner (D:\sonar-scanner-<IP_ADDRESS>7-windows\conf) here you will get a sonar-scanner.properties
file
Edit it and add below lines
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
-
Go to
C:\sonar-scanner-<IP_ADDRESS>2\bin
& Runsonar-scanner.bat
to make PATH changes effect. -
Navigate to Project Location & Hit
sonar-scanner
3. Analyzing Source Code
SonarQube can perform analysis on 20+ different languages. The outcome of this analysis will be quality measures and issues (instances where coding rules were broken). However, what gets analyzed will vary depending on the language
-
On all languages, “blame” data will automatically be imported from supported SCM providers. Git and SVN have supported automatically. Other providers require additional plugins.
-
On all languages, a static analysis of source code is performed (Java files, COBOL programs, etc.)
-
A static analysis of compiled code can be performed for certain languages (.classfiles in Java, .dll files in C#, etc.)
-
A dynamic analysis of code can be performed on certain languages.
During analysis, data is requested from the server, the files provided to the analysis are analyzed, and the resulting data is sent back to the server at the end in the form of a report, which is then analyzed asynchronously server-side.
3.1 Running Analysis
First, you should install the plugin(s) for the language(s) of the project to be
analyzed, either by a direct
download or through
the update center.
Then, you need to choose an analysis method. The following are available:
-
SonarQube Scanner: Launch analysis from the command line
-
SonarQube Scanner for MSBuild: Launch analysis of .Net projects
-
SonarQube Scanner for Ant: Launch analysis from Ant
-
SonarQube Scanner for Maven: Launch analysis from Maven with minimal configuration
-
SonarQube Scanner for Gradle: Launch Gradle analysis
-
SonarQube Scanner For Jenkins: Launch analysis from Jenkins
We can add any plugins by downloading jars and places sonarqube\extensions\plugins folder
3.2 Using the Update Center behind a Proxy
Update Center uses HTTP(S) connections to external servers to provide these
services. If SonarQube is located behind a proxy, additional information must be
provided in the SONAR_HOME/conf/sonar.properties configuration file:
http.proxyHost=<your.proxy.host>
http.proxyPort=<yout.proxy.port>
#If proxy authentication is required
http.proxyUser=<your.proxy.user>
http.proxyPassword=<your.proxy.password>
4. SonarQube Java Project Configuration
1.Go to the root folder of the Java Project to be analyze
2.Create ‘sonar-project.properties’ file under the root folder of the project
3.Provide project details in sonar-project.properties like below
sonar.projectKey=SonarJavaTest
sonar.projectName=Sonar Java Test
sonar.projectVersion=1.0
sonar.sources=.
4.Go to the project root folder through the Command prompt
5.Execute the command
sonar-runner -e
- if we use SonarRunner(old).-
sonar-scanner -X
- if we use SonarRunner(old). -
‘-e’ option is useful when some error occurs and it gives the stack trace.
- ‘-X’ options will run it in debug mode.
6.Once the analysis is successful, launch the sonar web application http://localhost:9000 and login as administrator.
7.Go to http://localhost:9000/projects it will show the summary of the analysis of the project.
8.By Clicking on the Sonar Java Test, you can get the more details about the project
9.If you want to run the analysis in module wise just change sonar-project.properties’ file as below
sonar.projectKey=Project Name
sonar.projectName= Project project
sonar.projectVersion=1.0
sonar.sources=.
sonar.modules=Module1, Module2,Module3
Module1.projectName=Module 1
Module2.projectName=Module 2
Module3.projectName=Module 3
SonarQube Eclipse Configuration with SonarLint Plugin
SonarQube Eclipse Configuration with SonarLint Plugin
The SonarQube Eclipse plugin does not work with SonarQube 5.2+. It is replaced by SonarLint for Eclipse. SonarLint is an Eclipse plugin that provides on-the-fly feedback to developers on new bugs and quality issues injected into Java, JavaScript, and PHP code. To Configure SonarLint in eclipse follow below steps.
1.Open Eclipse IDE
2.Choose any one from below Options
-
open browser, navigate to https://marketplace.eclipse.org/content/sonarlint & Drag Install button from marketplace to Eclipse IDE
-
Go to Help > Eclipse Marketplace… and search for “SonarQube”
3.Select the Features and Confirm Installation
4.Accept the license, Finish the Installation and restart Eclipse
Add SonarQube Server to Eclipse
To add SonarQube Server to Eclipse do following things
1.Select File → New → Other → SonarLint → New Server → Next → fill the details
2.Test the Connection & Finish
Configuring Eclipse Project with SonarLint plugin
1.Select Project to be Configure SonarLint, for Ex: SonarJava as below
2.Navigate to root folder of the project & run sonar-runner -e
3.Open http://localhost:9000/projects check whether it is analyzed or not
4.If analyzed, Right Click on Project & Select → SonarLint →Bind to SonarQube Object & Select appropriate SonarQube Project from the Server & Finish
Analyze Eclipse Project with SonarLint plugin
Do some changes in the files or add new Files to the Project & analyze project by
Right Click on Project & Select → SonarLint →Analized Changed files
Go to project home page in SonarQube for Ex: http://localhost:9000/dashboard?id=SonarDemo and see the changes
SonarQube Maven Project Configuration
By Configring Maven Level Globally
1.Install & Configure Apache Maven in your local system
2.Go to Maven conf folder change the settings.xml by adding sonar details
<settings>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://myserver:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
3.Chose the Java Maven Project for Analyzing Source Code. Ex:MavenWeb as below
4.Open pom.xml & Configure sonar plugin as below
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.7</version>
</plugin>
5.Open the command prompt, navigate to your maven project, and start giving the following commands
mvn clean verify sonar:sonar
6.open http://localhost:9000/projects it will display the analysis report
By Project Level - pom.xml
Let’s define the plugin in the pom.xml:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version><IP_ADDRESS>5</version>
</plugin>
</plugins>
</pluginManagement>
</build>
The latest version of the plugin is available here. Now, we need to execute this command from the root of our project directory to scan it:
mvn sonar:sonar -Dsonar.host.url=http://localhost:9000
-Dsonar.login=the-generated-token
or
pom.xml
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://localhost:9000
</sonar.host.url>
<sonar.sources>src/main/java</sonar.sources>
<sonar.tests>src/test/java</sonar.tests>
</properties>
</profile>
</profiles>
run
mvn clean install sonar:sonar


Contributing
We encourage everyone from Home Office Digital to join the discussion on the design patterns.
1. Talk about it (crit)
Crits are a good place to discuss work with other designers to help solve design issues. A larger crit session is organised once every two weeks but informal crits are recommended whenever the need arises, they should include at least 3 designers.
- If possible, share the designs before a crit
- Clarify the user need
- Don't view the element in isolation, understand the journey
- Explain the design issue
2. Document it (on the patterns trello board)
If the user need or design solution is new and there's no pattern that resolves the issue, add it to the patterns board and we will review with you so it can be developed to help others.
- Include what the problem the pattern is trying to solve
- Add any comments or feedback from the crit
- Use screenshots, with any personal data redacted
How designs will be reviewed and fed back on.
3. Develop it (and include in the pattern library)
- Add to the sketch template file, if it's relevant
- Add to the code repository
4. Share it, let people know the changes
Add some detail around what the pattern does, and let others know (preferrably through slack) that a new pattern has been added.


Chapter 5 Class data using Google Sheets
Collecting data interactively with students has several benefits:
- Students see the connection between the data and their own actions. Students are especially motivated when the data is about them or something they are doing.
- The inevitable imperfections in user-entered data serve as a lesson in coding factors and the measuring variables in a standard way.
- The instructor (or individual students) can analyze the data and see how the analysis changes in real time, as more data rows are added.
5.1 Resources
Two example lessons, from the StatPREP 2018 Workshops are:
You’re welcome to use those interactive documents. Each document has a link to the spreadsheet for entering data. It’s your own choice whether to start by clearing out any existing rows or add on to the rows from another session. NOTE: No guarantee that your class’s data will be there later on, since someone else might have erased it. And so you might want to set up your own spreadsheet exclusively for your class’s use.
The section below on Setting up a new spreadsheet shows how to create a spreadsheet for your class. Note that you should post the link to your spreadsheet on your course website, so that students can access it to enter data.
For data analysis, you have a choice of options:
- Use the Read class data activity. The user will have to paste the command to read in your spreadsheet at the start of every command block. (See Setting up a new spreadsheet.)
- Use your own R session. Again, you will need to give the command to read in your spreadsheet into the console.
- Create your own tutorial document in Rmd. This presumes that you are comfortable editing Rmd documents and, if you want to give your students access, publishing them on a server. A working template is available via the StatPREP Workshops2018 project on
rstudio.cloud
. (Follow this link. to the fileGoogle_data_template.Rmd
.)
5.2 Setting up a new spreadsheet
You can modify this document to work with a spreadsheet of your own. Here’s how.
- Set up a Google spreadsheet. It’s a good idea to populate it with some variable names and a few values. This will let you test to make things are working before you start the activity in class.
Within the Google spreadsheet document press the “Share” button.
After you press “Share,” you will see a dialog box.
- Pull down the menu to select “Anyone with the link can edit.” (This is what lets your students add data.)
- Copy the link and paste it somewhere you can get to it again. You’ll need it. The link will look like this:
https://docs.google.com/spreadsheets/d/1ucevNh7wKLtOukyEpacUKi5_-KZUQGtIOONhWRnnnQ4/edit?usp=sharing
- You will also need to copy the key that’s contained in the link. The key is just the central gibberish in the link, like this:
1ucevNh7wKLtOukyEpacUKi5_-KZUQGtIOONhWRnnnQ4
Put the link on your course web site so that your students can get to it. That’s how they will access the spreadsheet for entering data.
Back in your Google sheet, select the File/Publish_to_the_web menu item. Use the resulting dialog box to publish the entire document.
Create the R command that will load the spreadsheet data into your R session.
Globe <- gs_read(gs_key("1ucevNh7wKLtOukyEpacUKi5_-KZUQGtIOONhWRnnnQ4"))
In forming the command, replace the quoted string in the above with your own key. The key is located in the center of the link to the spreadsheet: an incomprehensible set of characters similar to that highlighted in bold in the example in step (3). You might also replace
Globe
with a name that’s more suited to your own activity.Paste the command you’ve created someplace handy. You’ll need it. (Suggestion: Paste it next to the link in step (4).)
Time for class!
- Once you reach the point in your class where you want to do statistics on your data, bring up the lesson document provided for this purpose by StatPREP located here. That document has several R command chunks, all of which are blank. You can put any R commands in those chunks, but make sure that the command from step (5) always is the first command in any chunk that you use. That way, whenever you run the code in the chunk, the data will be read in from Google. Keep in mind that the chunks are all independent of one another, so you’ll need to read in the data in any chunk you use.
Try it out in the following command chunk:
- Paste in the command you created in step (5).
- Below that, add any R commands you like.
For instructors who want to write their own tutorial, you will find that this simplifies things since you can arrange to have the spreadsheet data read-in globally and not have to put the data-reading command in every chunk. Use the template .Rmd
document provided by StatPREP here. Modify the chunk named read_data
the top of the document by inserting your own command (with your own key). Notice that in any new chunk you create, you’ll have to reference the read_data
chunk as the exercise-setup
. The chunks already in the template document do this, so you can just copy (and rename!) an existing chunk.


Bus Mall
Please take our survey!
Click on one image out of three that represents a product you would be interested in.


Display options
Suppress rollover
Caption
Contribution
Remove tags
Click and drag in empty area to pan canvas
POST TO YOUR WALL
message:
caption:
link:
description:
name:


---
sort_order: 90
tei_id: rdx_b5h9g.p.idp7075488
annotation_count: 0
images:
small-thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcm9j/mini-thumbnail/
json: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcm9j/info/
full: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcm9j/fs/
page: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcm9j/single-page/
thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcm9j/thumbnail/
title: Page 90
number: 90
---
{% raw %}82{% endraw %}
{% raw %}JACOB HODGES.{% endraw %}
{% raw %}minutely into his whole history, which cor{% endraw %}
{% raw %}responded with great accuracy to the re¬{% endraw %}
{% raw %}cords of the court in which he was tried{% endraw %}
{% raw %}for murder, and the sketches which have{% endraw %}
{% raw %}been preserved of his life and religious ex{% endraw %}
{% raw %}perience while in prison.{% endraw %}
{% raw %}Could all that he said, warmed with the{% endraw %}
{% raw %}emotion with which it was uttered, bt{% endraw %}
{% raw %}written down just as it fell from his lips,{% endraw %}
{% raw %}could some pencil paint the varied expres¬{% endraw %}
{% raw %}sions of his care-worn and sable counte¬{% endraw %}
{% raw %}nance, with the beamings and tears of his{% endraw %}
{% raw %}expressive eye ; the suppressed heavings{% endraw %}
{% raw %}of his heart, with his marked gratitude for{% endraw %}
{% raw %}grace and mercy, no one could doubt that{% endraw %}
{% raw %}Jacob Hodges was a man of penitence, a{% endraw %}
{% raw %}man of prayer, a man of God. I never{% endraw %}
{% raw %}was more impressed and overawed by the{% endraw %}
{% raw %}dignity of Christian character, or saw more{% endraw %}
{% raw %}distinctly drawn the living symbols of the{% endraw %}
{% raw %}grace of God.{% endraw %}
{% raw %}This interview seemed to call forth{% endraw %}
{% raw %}afresh his confidence in me«as his friend{% endraw %}
{% raw %}and adviser, and to secure warmer attach¬{% endraw %}
{% raw %}ment. As I was leaving the place, Jacob{% endraw %}


If it's snowing and I park here...
Will they tow me? aims to help citizens of Boston and Cambridge get their cars off of snow emergency routes and out of the way during bad winter weather.
Built by Code for Boston using data from coUrbanize, the City of Boston, and the City of Cambridge.


Your budget
Results
Total monthly income: £
Total monthly spending: £
- Download your full budget sheet to save or print
- See a detailed breakdown of your income and spending
What you can do
As your income isn’t covering your living costs you can:
- see if there’s any way you can cut your costs or reduce your spending
- see if you can get help towards your living costs
If you’re really struggling with your money and are in lots of debt, you can get help from your local Citizens Advice
What you can do
As you’ve got some money spare each month you could consider:
- saving some money
- increasing your repayments, if you’re repaying debts
Monthly income breakdown
| Income |
|---|
Monthly spending breakdown
| Spending |
|---|
Dealing with debts
If you have debts your budget can be used to help find the right debt solution for your circumstances. The options available to you depend on how much (if any) spare income you have each month. You can see our content on getting out of debt, or get help from your local Citizens Advice.
Tips for keeping on top of your budget
Keep a spending diary for a month to keep track of exactly what you spend. You could keep receipts and write down everything you spend your money on or use a spending diary app on your mobile phone.
- Sign up for text balance alerts from your bank - this can help you keep on top of your bank balance.
- Sign up for online banking - it can be quicker and easier to check your bank balance.
Some local Citizens Advice offices also run free sessions on budgeting and managing your money. They cover things like:
- how to reduce your costs
- how to budget
- how to set up and use a bank account
- how to set up standing orders and direct debits
Ask local Citizens Advice whether they offer these services.


It was at my friend Peter's 17th birthday party when I first tried shrooms. I was a small, skinny 16 year old girl who smoked and drank too much. We were sitting in his house smoking pot and drinking Jack Daniels and decided it was time to open the gifts. A couple of guys had gotten together and bought shrooms for him as a present. We decided to take some and have fun tripping.
There were a few people who had done hallucigenics before. I hadn't tried them yet and was a little skeptical about it but decided to try it anyways. I don't remember how much I had, someone measured it out for me. Everyone was putting them in peanut butter sandwiches or eating them with cheese doodles but I just closed my eyes, chewed and swallowed as fast as I could and washed it down with some beer. It was disgusting and I almost threw up but managed to keep it down.
After about 15 minutes, the shrooms were starting to show signs of working. Ashley was lying on her back and moving her arms as if she was swimming in water. Jake could not stop laughing. Leo threw up. I wasn't feeling much, a little lightheaded and a bit nauseous but none of the colors and visions I had heard about. I needed to pee so I got up to go to the bathroom.
That's when it happened. The second I stood up, the world I had been looking at before dissapeared. Everything was in neon. Shapes were fuzzy and moving. I felt like I was spinning. At that moment, I promptly freaked out and dropped to the floor on all fours and made a sort of noise that someone later described as an 'anguished squeal'. Someone helped me up and set me back in the chair and got me to breath normal again. I had no idea what was going on at all. Then all of a sudden, just as quickly as I had felt the effect, everything calmed down. I sat back in my chair and swore I could hear some kind of beautiful elven music being played. My friends looked like movie stars. I saw Marilyn Monroe, Fred Astaire, Charlie Chaplin, Jayne Mansfield and Jimmy Dean. Everything was bright and light and wonderful. My sense of touch was AMAZING. I could feel everything. The fibers of the chair under my hands was the most wonderful thing I had ever felt. I was in some kind of incredible dream.
I don't know how long I was sitting there but after a while I really had to use the bathroom. I got up and started walking to the bathroom. I felt like I was elevating off the ground and instead of walking, pink bubbles were floating me across the hall. I cannot tell you what trying to use the bathroom was. I kept stopping and looking and staring. When I was washing my hands, I swore the toothbrushes on the shelf were talking to each other and I could hear their conversation. I must have been in there for at least 20 minutes. I came back out and sat with my friend Sean. I put my head on his lap as he stroked my hair. It was the most sensual, most erotic feeling ever. Better then sex. I almost had an orgasm right there. Later I found myself sitting on the counter in the kitchen with Jake eating a plain bagel and singing something.
5 minutes after coming back to the living room, it started to get bad. I was getting really cold and my lips turned blue. The pretty things I saw before were turning into dark, twisted, mangled shapes. The movie stars were gone and in their place, hooded figures with long gangly fingers that kept reaching out towards me. People were trying to calm me down but I was so scared. When someone grabbed my arm to try and help me off the floor, I screamed and began crying.  Finally, Leo picked me up and brought me into a seperate bedroom and lay me on the bed. He pulled the covers up to my neck and got into bed with me. He held me there for about an hour while I was crying and yelling and whimpering. But I finally started to calm down. I was afraid to fall asleep so I just stood awake staring at the blue wall.
By then I had come down a little bit and went back to the living room. I smoked some pot and felt a lot more relaxed. It had been about 5 hours since I had taken shrooms and I was almost off them. I slept over Peter's that night, like everyone else. I was pretty tired and passed out right away. The next day I woke up at 3 in the afternoon and had some coffee. I was a little tired, but that was all. No side effects or anything.
My first experience was both good and bad. Since then, I've had nicer trips. I find that acid is much better then shrooms and I prefer it over anything. But my first trip was a memorable one, and I don't regret it.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


@Suspendable abstract fun send(payload: Any): Unit
Queues the given payload for sending to the counterparty and continues without suspending.
Note that the other party may receive the message at some arbitrary later point or not at all: if counterparty is offline then message delivery will be retried until it comes back or until the message is older than the network's event horizon time.


|
Example Company Inc.
CMP
<EMAIL_ADDRESS>John Doe
|
Example Company Inc.
CMP
<EMAIL_ADDRESS>John Doe
|
|
Example Company Inc.
CMP
<EMAIL_ADDRESS>John Doe
|
Example Company Inc.
CMP
<EMAIL_ADDRESS>John Doe
|
|
Example Company Inc.
CMP
<EMAIL_ADDRESS>John Doe
|
Example Company Inc.
CMP
<EMAIL_ADDRESS>John Doe
|


Includes data analysis functions (e.g., to calculate effect sizes and 95% Confidence Intervals (CI) on Standardised Effect Sizes (d) for ABBA cross-over repeated-measures experimental designs), data presentation functions (e.g., density curve overlaid on histogram), and the data sets analyzed in different research papers in software engineering (e.g., related to software defect prediction or multi-site experiment concerning the extent to which structured abstracts were clearer and more complete than conventional abstracts) to streamline reproducible research in software engineering.
| Version: | 0.2.1 |
| Depends: | R (≥ 3.1.1) |
| Imports: | openxlsx (≥ 2.4.0), ggplot2 (≥ 2.0.0), gridExtra (≥ 0.9.1), xtable (≥ 1.7-4), metafor (≥ 1.9-2), lme4 (≥ 1.1-10), MASS (≥ 7.3-45), stats (≥ 3.2.3), reshape (≥ 0.8.8) |
| Suggests: | testthat, assertthat |
| Published: | 2018-11-05 |
| Author: | Lech Madeyski [cre, aut, ctb], Barbara Kitchenham [ctb] (Data and code contributor), Marian Jureczko [ctb] (Data contributor), David Budgen [ctb] (Data contributor), Pearl Brereton [ctb] (Data contributor), Jacky Keung [ctb] (Data contributor), Stuart Charters [ctb] (Data contributor), Shirley Gibbs [ctb] (Data contributor), Amnart Pohthong [ctb] (Data contributor) |
| Maintainer: | Lech Madeyski <lech.madeyski at gmail.com> |
| License: | CC BY 4.0 |
| URL: | http://madeyski.e-informatyka.pl/reproducible-research/ |
| NeedsCompilation: | no |
| Citation: | reproducer citation info |
| Materials: | README NEWS |
| CRAN checks: | reproducer results |
| Reference manual: | reproducer.pdf |
| Package source: | reproducer_0.2.1.tar.gz |
| Windows binaries: | r-devel: reproducer_0.2.1.zip, r-release: reproducer_0.2.1.zip, r-oldrel: reproducer_0.2.1.zip |
| OS X binaries: | r-release: reproducer_0.2.1.tgz, r-oldrel: reproducer_0.2.1.tgz |
| Old sources: | reproducer archive |
Please use the canonical form https://CRAN.R-project.org/package=reproducer to link to this page.


Have you ever used UITableViewController
? Have you ever used UIViewController and UITableView
? What are the differences between these two solutions? What are good practice for them? This note is a quick compare about UITableViewController and UIViewController + UITableView
. I will call the UIViewController + UITableView
is Free TableView
UITableViewController
is a UIViewController. Its view is a UITableView, can’t change constraints. You can’t add view into UITableView
, without a cell.
It’s good at handling text field become first responder. UITableViewController
will automatically move contentOffset to the current active text field.
Good practice for chat log screen, form screen.
Accept static table view: very easy and fast to design form with Storyboard
It’s bad for state view (empty state, loading state, error state). Can’t display state view by adding to view. You can do that by adding to tableHeaderView or tableFooterView, but you have to handle much things. It’s bad for sticked top or bottom view.
Can’t inherit from BaseController. You have a BaseController with many setting inside, such as, stateView, loadData, setupUI, etc… and you can’t inherit that with UITableViewController
.
Free TableView is a UIViewController
and add a UITableView
into the view. You can easily set constraints for UITableView
.
Very flexible. You can show/hide the tableView, set padding for tableView. Good for state display. In the demo, I show an empty state is a green UIView, at the center of the screen.
Not accept static table view. I have a trick for this: use Dynamic table view, but datasource is a collection of UITableCell
.
But it will not automatically adjust when the textfield activate. We need lib to help us take care of it. I suggest this lib from Håkon Bogen (download at Github). Really good lib.
I have a demo for this. Download here. Some code in demo I need to tell you.
knController
is UIViewController. I made my own controller to manage building UI by code.knCustomTableController
is Free TableViewhorizontal:toView:space
, fill:toView:space
are my Auto Layout Libs, called knContrainsts.Free TableView
has disadvantages but can be solved easily. This solution is much more flexible and easier to manage. But UITableViewController
still has good practice which can’t replace by Free TableView


@(username: String)
@main("Movify") {
Reconquer your couch. Movify let you connect again with your favourite passion. Yeah, thats it. Movies.
@if(username == null) { Subscribe now } else { Subscribe now }Movify gives you millions of movies at your fingertips. The actors your love, top box office movies and new discoveries just for you. Hit play to stream anyting you like.
With Movify there's always great movies to watch. Browse amazing movies for every mood and genre. Perfect if you don't know what to watch or if you're in the mood for something new.
That's why Movify is so social. Share movies on Movify, Facebook, Twitter, your blog, anywhere. You can also get closer to the friends, arctors, directors and trendsetters who turn you on to great movies. Find out what they're watching to right now.


Animator
public final class Animator<A: AnimationType>
Runs an animation until the animations finishes, or until cancel()
is called.
The Animator
class is one-shot: It runs the animation precisely one time.
It starts in the Pending
state. From here either:
- It enters the running state. This occurs if start() is called.
- It is cancelled. This occurs if cancel() is called, and causes the animator
to enter the
Completed
state, with a result ofCancelled
.
After entering the Running
state, the started
event is fired. The
animation then updates on every frame, triggering the changed
event each
time, until either:
- The animation finishes on its own, after which the animator enters the
Completed
state, with a result ofFinished
. cancel()
is called, after which the animator enters theCompleted
state, with a result ofCancelled
.
When the animator enters the Completed
state, it triggers either the
cancelled
or finished
event, depending on the result. After entering
the Completed
state, the animator is finished and no further state changes
can occur.
-
The current state of the animator. Animators begin in a running state, and they are guarenteed to transition into either the cancelled or finished state exactly one time – no further state changes are allowed.
Declaration
Swift
fileprivate (set) public var state: AnimatorState = .pending
-
The animation that is being run.
Declaration
Swift
fileprivate (set) public var animation: A
-
Fired when the animator starts running
Declaration
Swift
public let started = Event<A>()
-
Fired after every animation update.
Declaration
Swift
public let changed = Event<A>()
-
Fired if the animator is cancelled.
Declaration
Swift
public let cancelled = Event<A>()
-
Fired when the animation finishes.
Declaration
Swift
public let finished = Event<A>()
-
Creates a new animator.
Parameters
animation
The animation to be run.
-
Starts a pending animation
If the animator is not in a
pending
state, calling start() will have no effect.Declaration
Swift
public func start()
-
Cancels the animation.
If the animator is in a
running
orpending
state, this will immediately transition to thecancelled
state (and call anyonCancel
observers). If the animator is already cancelled or finished, callingcancel()
will have no effect.Declaration
Swift
public func cancel()


Active Record Validations and Callbacks
This guide teaches you how to hook into the lifecycle of your Active Record objects. More precisely, you will learn how to validate the state of your objects before they go into the database as well as how to perform custom operations at certain points in the object lifecycle.
After reading this guide and trying out the presented concepts, we hope that you’ll be able to:
-
Use the built-in Active Record validation helpers
-
Create your own custom validation methods
-
Work with the error messages generated by the validation process
-
Create callback methods to respond to events in the object lifecycle.
-
Create special classes that encapsulate common behavior for your callbacks
-
Create Rails Observers
1. Overview of ActiveRecord Validation
Before you dive into the detail of validations in Rails, you should understand a bit about how validations fit into the big picture. Why should you use validations? When do these validations take place?
1.1. Why Use ActiveRecord Validations?
The main reason for validating your objects before they get into the database is to ensure that only valid data is recorded. It’s important to be sure that an email address column only contains valid email addresses, or that the customer’s name column will never be empty. Constraints like that keep your database organized and helps your application to work properly.
There are several ways that you could validate the data that goes to the database, including native database constraints, client-side validations, and model-level validations. Each of these has pros and cons:
-
Using database constraints and/or stored procedures makes the validation mechanisms database-dependent and may turn your application into a hard to test and maintain beast. However, if your database is used by other applications, it may be a good idea to use some constraints also at the database level. Additionally, database-level validations can safely handle some things (such as uniqueness in heavily-used tables) that are problematic to implement from the application level.
-
Implementing validations only at the client side can be difficult in web-based applications. Usually this kind of validation is done using javascript, which may be turned off in the user’s browser, leading to invalid data getting inside your database. However, if combined with server side validation, client side validation may be useful, since the user can have a faster feedback from the application when trying to save invalid data.
-
Using validation directly in your Active Record classes ensures that only valid data gets recorded, while still keeping the validation code in the right place, avoiding breaking the MVC pattern. Since the validation happens on the server side, the user cannot disable it, so it’s also safer. It may be a hard and tedious work to implement some of the logic involved in your models' validations, but fear not: Active Record gives you the ability to easily create validations, providing built-in helpers for common validations while still allowing you to create your own validation methods.
1.2. When Does Validation Happen?
There are two kinds of Active Record objects: those that correspond to a row inside your database and those that do not. When you create a fresh object, using the new method, that object does not belong to the database yet. Once you call save upon that object it will be saved into the appropriate database table. Active Record uses the new_record? instance method to determine whether an object is already in the database or not. Consider the following simple Active Record class:
class Person < ActiveRecord::Base end
We can see how it works by looking at some script/console output:
>> p = Person.new(:name => "John Doe", :birthdate => Date.parse("09/03/1979")) => #<Person id: nil, name: "John Doe", birthdate: "1979-09-03", created_at: nil, updated_at: nil> >> p.new_record? => true >> p.save => true >> p.new_record? => false
Saving new records means sending an SQL INSERT operation to the database, while saving existing records (by calling either save or update_attributes) will result in a SQL UPDATE operation. Active Record will use these facts to perform validations upon your objects, keeping them out of the database if their inner state is invalid in some way. You can specify validations that will be beformed every time a object is saved, just when you’re creating a new record or when you’re updating an existing one.
| There are four methods that when called will trigger validation: save, save!, update_attributes and update_attributes!. There is one update method for Active Record objects left, which is update_attribute. This method will update the value of an attribute without triggering any validation. Be careful when using update_attribute, because it can let you save your objects in an invalid state. |
1.3. The Meaning of valid
To verify whether an object is valid, Active Record uses the valid? method, which basically looks inside the object to see if it has any validation errors. These errors live in a collection that can be accessed through the errors instance method. The process is really simple: If the errors method returns an empty collection, the object is valid and can be saved. Each time a validation fails, an error message is added to the errors collection.
2. The Declarative Validation Helpers
Active Record offers many pre-defined validation helpers that you can use directly inside your class definitions. These helpers create validation rules that are commonly used. Every time a validation fails, an error message is added to the object’s errors collection, and this message is associated with the field being validated.
Each helper accepts an arbitrary number of attributes identified by symbols, so with a single line of code you can add the same kind of validation to several attributes.
All these helpers accept the :on and :message options, which define when the validation should be applied and what message should be added to the errors collection when it fails, respectively. The :on option takes one of the values :save (the default), :create or :update. There is a default error message for each one of the validation helpers. These messages are used when the :message option isn’t used. Let’s take a look at each one of the available helpers.
2.1. The validates_acceptance_of helper
Validates that a checkbox on the user interface was checked when a form was submitted. This is normally used when the user needs to agree to your application’s terms of service, confirm reading some text, or any similar concept. This validation is very specific to web applications and actually this acceptance does not need to be recorded anywhere in your database (if you don’t have a field for it, the helper will just create a virtual attribute).
class Person < ActiveRecord::Base validates_acceptance_of :terms_of_service end
The default error message for validates_acceptance_of is "must be accepted"
validates_acceptance_of can receive an :accept option, which determines the value that will be considered acceptance. It defaults to "1", but you can change this.
class Person < ActiveRecord::Base validates_acceptance_of :terms_of_service, :accept => 'yes' end
2.2. The validates_associated helper
You should use this helper when your model has associations with other models and they also need to be validated. When you try to save your object, valid? will be called upon each one of the associated objects.
class Library < ActiveRecord::Base has_many :books validates_associated :books end
This validation will work with all the association types.
| Don’t use validates_associated on both ends of your associations, because this will lead to several recursive calls and blow up the method calls' stack. |
The default error message for validates_associated is "is invalid". Note that each associated object will contain its own errors collection; errors do not bubble up to the calling model.
2.3. The validates_confirmation_of helper
You should use this helper when you have two text fields that should receive exactly the same content. For example, you may want to confirm an email address or a password. This validation creates a virtual attribute, using the name of the field that has to be confirmed with _confirmation appended.
class Person < ActiveRecord::Base validates_confirmation_of :email end
In your view template you could use something like
<%= text_field :person, :email %> <%= text_field :person, :email_confirmation %>
| This check is performed only if email_confirmation is not nil, and by default only on save. To require confirmation, make sure to add a presence check for the confirmation attribute (we’ll take a look at validates_presence_of later on this guide): |
class Person < ActiveRecord::Base validates_confirmation_of :email validates_presence_of :email_confirmation end
The default error message for validates_confirmation_of is "doesn’t match confirmation"
2.4. The validates_exclusion_of helper
This helper validates that the attributes' values are not included in a given set. In fact, this set can be any enumerable object.
class MovieFile < ActiveRecord::Base validates_exclusion_of :format, :in => %w(mov avi), :message => "Extension %s is not allowed" end
The validates_exclusion_of helper has an option :in that receives the set of values that will not be accepted for the validated attributes. The :in option has an alias called :within that you can use for the same purpose, if you’d like to. This example uses the :message option to show how you can personalize it with the current attribute’s value, through the %s format mask.
The default error message for validates_exclusion_of is "is not included in the list".
2.5. The validates_format_of helper
This helper validates the attributes' values by testing whether they match a given pattern. This pattern must be specified using a Ruby regular expression, which is specified using the :with option.
class Product < ActiveRecord::Base validates_format_of :description, :with => /^[a-zA-Z]+$/, :message => "Only letters allowed" end
The default error message for validates_format_of is "is invalid".
2.6. The validates_inclusion_of helper
This helper validates that the attributes' values are included in a given set. In fact, this set can be any enumerable object.
class Coffee < ActiveRecord::Base validates_inclusion_of :size, :in => %w(small medium large), :message => "%s is not a valid size" end
The validates_inclusion_of helper has an option :in that receives the set of values that will be accepted. The :in option has an alias called :within that you can use for the same purpose, if you’d like to. The previous example uses the :message option to show how you can personalize it with the current attribute’s value, through the %s format mask.
The default error message for validates_inclusion_of is "is not included in the list".
2.7. The validates_length_of helper
This helper validates the length of your attribute’s value. It includes a variety of different options, so you can specify length constraints in different ways:
class Person < ActiveRecord::Base validates_length_of :name, :minimum => 2 validates_length_of :bio, :maximum => 500 validates_length_of :password, :in => 6..20 validates_length_of :registration_number, :is => 6 end
The possible length constraint options are:
-
:minimum - The attribute cannot have less than the specified length.
-
:maximum - The attribute cannot have more than the specified length.
-
:in (or :within) - The attribute length must be included in a given interval. The value for this option must be a Ruby range.
-
:is - The attribute length must be equal to a given value.
The default error messages depend on the type of length validation being performed. You can personalize these messages, using the :wrong_length, :too_long and :too_short options and the %d format mask as a placeholder for the number corresponding to the length constraint being used. You can still use the :message option to specify an error message.
class Person < ActiveRecord::Base validates_length_of :bio, :too_long => "you're writing too much. %d characters is the maximum allowed." end
The validates_size_of helper is an alias for validates_length_of.
2.8. The validates_numericality_of helper
This helper validates that your attributes have only numeric values. By default, it will match an optional sign followed by a integral or floating point number. Using the :integer_only option set to true, you can specify that only integral numbers are allowed.
If you set :integer_only to true, then it will use the $$/\A[\-]?\d+\Z/ regular expression to validate the attribute’s value. Otherwise, it will try to convert the value to a number using +Kernel.Float.
class Player < ActiveRecord::Base validates_numericality_of :points validates_numericality_of :games_played, :only_integer => true end
Besides :only_integer, the validates_numericality_of helper also accepts the following options to add constraints to acceptable values:
-
:greater_than - Specifies the value must be greater than the supplied value. The default error message for this option is "must be greater than (value)"
-
:greater_than_or_equal_to - Specifies the value must be greater than or equal the supplied value. The default error message for this option is "must be greater than or equal to (value)"
-
:equal_to - Specifies the value must be equal to the supplied value. The default error message for this option is "must be equal to (value)"
-
:less_than - Specifies the value must be less than the supplied value. The default error message for this option is "must e less than (value)"
-
:less_than_or_equal_to - Specifies the value must be less than or equal the supplied value. The default error message for this option is "must be less or equal to (value)"
-
:odd - Specifies the value must be an odd number if set to true. The default error message for this option is "must be odd"
-
:even - Specifies the value must be an even number if set to true. The default error message for this option is "must be even"
The default error message for validates_numericality_of is "is not a number".
2.9. The validates_presence_of helper
This helper validates that the specified attributes are not empty. It uses the blank? method to check if the value is either nil or an empty string (if the string has only spaces, it will still be considered empty).
class Person < ActiveRecord::Base validates_presence_of :name, :login, :email end
| If you want to be sure that an association is present, you’ll need to test whether the foreign key used to map the association is present, and not the associated object itself. |
class LineItem < ActiveRecord::Base belongs_to :order validates_presence_of :order_id end
| If you want to validate the presence of a boolean field (where the real values are true and false), you should use validates_inclusion_of :field_name, :in => [true, false] This is due to the way Object#blank? handles boolean values. false.blank? # => true |
The default error message for validates_presence_of is "can’t be empty".
2.10. The validates_uniqueness_of helper
This helper validates that the attribute’s value is unique right before the object gets saved. It does not create a uniqueness constraint directly into your database, so it may happen that two different database connections create two records with the same value for a column that you intend to be unique. To avoid that, you must create an unique index in your database.
class Account < ActiveRecord::Base validates_uniqueness_of :email end
The validation happens by performing a SQL query into the model’s table, searching for a record where the attribute that must be validated is equal to the value in the object being validated.
There is a :scope option that you can use to specify other attributes that are used to limit the uniqueness check:
class Holiday < ActiveRecord::Base validates_uniqueness_of :name, :scope => :year, :message => "Should happen once per year" end
There is also a :case_sensitive option that you can use to define whether the uniqueness constraint will be case sensitive or not. This option defaults to true.
class Person < ActiveRecord::Base validates_uniqueness_of :name, :case_sensitive => false end
The default error message for validates_uniqueness_of is "has already been taken".
2.11. The validates_each helper
This helper validates attributes against a block. It doesn’t have a predefined validation function. You should create one using a block, and every attribute passed to validates_each will be tested against it. In the following example, we don’t want names and surnames to begin with lower case.
class Person < ActiveRecord::Base validates_each :name, :surname do |model, attr, value| model.errors.add(attr, 'Must start with upper case') if value =~ /^[a-z]/ end end
The block receives the model, the attribute’s name and the attribute’s value. You can do anything you like to check for valid data within the block. If your validation fails, you can add an error message to the model, therefore making it invalid.
3. Common Validation Options
There are some common options that all the validation helpers can use. Here they are, except for the :if and :unless options, which are discussed later in the conditional validation topic.
3.1. The :allow_nil option
The :allow_nil option skips the validation when the value being validated is nil. You may be asking yourself if it makes any sense to use :allow_nil and validates_presence_of together. Well, it does. Remember, the validation will be skipped only for nil attributes, but empty strings are not considered nil.
class Coffee < ActiveRecord::Base validates_inclusion_of :size, :in => %w(small medium large), :message => "%s is not a valid size", :allow_nil => true end
3.2. The :allow_blank option
The :allow_blank: option is similar to the +:allow_nil option. This option will let validation pass if the attribute’s value is nil or an empty string, i.e., any value that returns true for blank?.
class Topic < ActiveRecord::Base validates_length_of :title, :is => 5, :allow_blank => true end Topic.create("title" => "").valid? # => true Topic.create("title" => nil).valid? # => true
3.3. The :message option
As you’ve already seen, the :message option lets you specify the message that will be added to the errors collection when validation fails. When this option is not used, Active Record will use the respective default error message for each validation helper, together with the attribute name.
3.4. The :on option
The :on option lets you specify when the validation should happen. The default behavior for all the built-in validation helpers is to be ran on save (both when you’re creating a new record and when you’re updating it). If you want to change it, you can use :on => :create to run the validation only when a new record is created or :on => :update to run the validation only when a record is updated.
class Person < ActiveRecord::Base # => it will be possible to update email with a duplicated value validates_uniqueness_of :email, :on => :create # => it will be possible to create the record with a 'non-numerical age' validates_numericality_of :age, :on => :update # => the default (validates on both create and update) validates_presence_of :name, :on => :save end
4. Conditional validation
Sometimes it will make sense to validate an object just when a given predicate is satisfied. You can do that by using the :if and :unless options, which can take a symbol, a string or a Ruby Proc. You may use the :if option when you want to specify when the validation should happen. If you want to specify when the validation should not happen, then you may use the :unless option.
4.1. Using a symbol with the :if and :unless options
You can associate the :if and :unless options with a symbol corresponding to the name of a method that will get called right before validation happens. This is the most commonly used option.
class Order < ActiveRecord::Base validates_presence_of :card_number, :if => :paid_with_card? def paid_with_card? payment_type == "card" end end
4.2. Using a string with the :if and :unless options
You can also use a string that will be evaluated using :eval and needs to contain valid Ruby code. You should use this option only when the string represents a really short condition.
class Person < ActiveRecord::Base validates_presence_of :surname, :if => "name.nil?" end
4.3. Using a Proc object with the :if and :unless options
Finally, it’s possible to associate :if and :unless with a Ruby Proc object which will be called. Using a Proc object can give you the hability to write a condition that will be executed only when the validation happens and not when your code is loaded by the Ruby interpreter. This option is best suited when writing short validation methods, usually one-liners.
class Account < ActiveRecord::Base validates_confirmation_of :password, :unless => Proc.new { |a| a.password.blank? } end
5. Writing your own validation methods
When the built-in validation helpers are not enough for your needs, you can write your own validation methods. You can do that by implementing methods that verify the state of your models and add messages to their errors collection when they are invalid. You must then register those methods by using one or more of the validate, validate_on_create or validate_on_update class methods, passing in the symbols for the validation methods' names. You can pass more than one symbol for each class method and the respective validations will be ran in the same order as they were registered.
class Invoice < ActiveRecord::Base validate :expiration_date_cannot_be_in_the_past, :discount_cannot_be_more_than_total_value def expiration_date_cannot_be_in_the_past errors.add(:expiration_date, "can't be in the past") if !expiration_date.blank? and expiration_date < Date.today end def discount_cannot_be_greater_than_total_value errors.add(:discount, "can't be greater than total value") unless discount <= total_value end end
You can even create your own validation helpers and reuse them in several different models. Here is an example where we create a custom validation helper to validate the format of fields that represent email addresses:
module ActiveRecord module Validations module ClassMethods def validates_email_format_of(value) validates_format_of value, :with => /\A[\w\._%-]+@[\w\.-]+\.[a-zA-Z]{2,4}\z/, :if => Proc.new { |u| !u.email.blank? }, :message => "Invalid format for email address" end end end end
The recipe is simple: just create a new validation method inside the ActiveRecord::Validations::ClassMethods module. You can put this code in a file inside your application’s lib folder, and then requiring it from your environment.rb or any other file inside config/initializers. You can use this helper like this:
class Person < ActiveRecord::Base validates_email_format_of :email_address end
6. Manipulating the errors collection
You can do more than just call valid? upon your objects based on the existance of the errors collection. Here is a list of the other available methods that you can use to manipulate errors or ask for an object’s state.
-
add_to_base lets you add errors messages that are related to the object’s state as a whole, instead of being related to a specific attribute. You can use this method when you want to say that the object is invalid, no matter the values of it’s attributes. add_to_base receives a string with the message.
class Person < ActiveRecord::Base def a_method_used_for_validation_purposes errors.add_to_base("This person is invalid because ...") end end
-
add lets you manually add messages that are related to particular attributes. When writing those messages, keep in mind that Rails will prepend them with the name of the attribute that holds the error, so write it in a way that makes sense. add receives a symbol with the name of the attribute that you want to add the message to and the message itself.
class Person < ActiveRecord::Base def a_method_used_for_validation_purposes errors.add(:name, "can't have the characters !@#$%*()_-+=") end end
-
invalid? is used when you want to check if a particular attribute is invalid. It receives a symbol with the name of the attribute that you want to check.
class Person < ActiveRecord::Base validates_presence_of :name, :email end person = Person.new(:name => "John Doe") person.invalid?(:email) # => true
-
on is used when you want to check the error messages for a specific attribute. It will return different kinds of objects depending on the state of the errors collection for the given attribute. If there are no errors related to the attribute, on will return nil. If there is just one errors message for this attribute, on will return a string with the message. When errors holds two or more error messages for the attribute, on will return an array of strings, each one with one error message.
class Person < ActiveRecord::Base validates_presence_of :name validates_length_of :name, :minimum => 3 end person = Person.new(:name => "John Doe") person.valid? # => true person.errors.on(:name) # => nil person = Person.new(:name => "JD") person.valid? # => false person.errors.on(:name) # => "is too short (minimum is 3 characters)" person = Person.new person.valid? # => false person.errors.on(:name) # => ["can't be blank", "is too short (minimum is 3 characters)"]
-
clear is used when you intentionally want to clear all the messages in the errors collection. However, calling errors.clear upon an invalid object won’t make it valid: the errors collection will now be empty, but the next time you call valid? or any method that tries to save this object to the database, the validations will run. If any of them fails, the errors collection will get filled again.
class Person < ActiveRecord::Base validates_presence_of :name validates_length_of :name, :minimum => 3 end person = Person.new person.valid? # => false person.errors.on(:name) # => ["can't be blank", "is too short (minimum is 3 characters)"] person.errors.clear person.errors.empty? # => true p.save # => false p.errors.on(:name) # => ["can't be blank", "is too short (minimum is 3 characters)"]
7. Using the errors collection in your view templates
Rails provides built-in helpers to display the error messages of your models in your view templates. When creating a form with the form_for helper, you can use the error_messages method on the form builder to render all failed validation messages for the current model instance.
class Product < ActiveRecord::Base validates_presence_of :description, :value validates_numericality_of :value, :allow_nil => true end
<% form_for(@product) do |f| %> <%= f.error_messages %> <p> <%= f.label :description %><br /> <%= f.text_field :description %> </p> <p> <%= f.label :value %><br /> <%= f.text_field :value %> </p> <p> <%= f.submit "Create" %> </p> <% end %>
You can also use the error_messages_for helper to display the error messages of a model assigned to a view template. It’s very similar to the previous example and will achieve exactly the same result.
<%= error_messages_for :product %>
The displayed text for each error message will always be formed by the capitalized name of the attribute that holds the error, followed by the error message itself.
Both the form.error_messages and the error_messages_for helpers accept options that let you customize the div element that holds the messages, changing the header text, the message below the header text and the tag used for the element that defines the header.
<%= f.error_messages :header_message => "Invalid product!", :message => "You'll need to fix the following fields:", :header_tag => :h3 %>
Which results in the following content
If you pass nil to any of these options, it will get rid of the respective section of the div.
It’s also possible to change the CSS classes used by the error_messages helper. These classes are automatically defined at the scaffold.css file, generated by the scaffold script. If you’re not using scaffolding, you can still define those CSS classes at your CSS files. Here is a list of the default CSS classes.
-
.fieldWithErrors - Style for the form fields with errors.
-
#errorExplanation - Style for the div element with the error messages.
-
#errorExplanation h2 - Style for the header of the div element.
-
#errorExplanation p - Style for the paragraph that holds the message that appears right below the header of the div element.
-
#errorExplanation ul li - Style for the list of error messages.
7.1. Changing the way form fields with errors are displayed
By default, form fields with errors are displayed enclosed by a div element with the fieldWithErrors CSS class. However, we can write some Ruby code to override the way Rails treats those fields by default. Here is a simple example where we change the Rails behaviour to always display the error messages in front of each of the form fields with errors. The error messages will be enclosed by a span element with a validation-error CSS class. There will be no div element enclosing the input element, so we get rid of that red border around the text field. You can use the validation-error CSS class to style it anyway you want.
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| if instance.error_message.kind_of?(Array) %(#{html_tag}<span class='validation-error'> #{instance.error_message.join(',')}</span>) else %(#{html_tag}<span class='validation-error'> #{instance.error_message}</span>) end end
This will result in something like the following content:
The way form fields with errors are treated is defined by the ActionView::Base.field_error_proc Ruby Proc. This Proc receives two parameters:
-
A string with the HTML tag
-
An object of the ActionView::Helpers::InstanceTag class.
8. Callbacks
Callbacks are methods that get called at certain moments of an object’s lifecycle. With callbacks it’s possible to write code that will run whenever an Active Record object is created, saved, updated, deleted or loaded from the database.
8.1. Callbacks registration
In order to use the available callbacks, you need to registrate them. You can do that by implementing them as an ordinary methods, and then using a macro-style class method to register then as callbacks.
class User < ActiveRecord::Base validates_presence_of :login, :email before_validation :ensure_login_has_a_value protected def ensure_login_has_a_value if self.login.nil? self.login = email unless email.blank? end end end
The macro-style class methods can also receive a block. Rails best practices say that you should only use this style of registration if the code inside your block is so short that it fits in just one line.
class User < ActiveRecord::Base validates_presence_of :login, :email before_create {|user| user.name = user.login.capitalize if user.name.blank?} end
| Remember to always declare the callback methods as being protected or private. These methods should never be public, otherwise it will be possible to call them from code outside the model, violating object encapsulation and exposing implementation details. |
9. Conditional callbacks
Like in validations, we can also make our callbacks conditional, calling then only when a given predicate is satisfied. You can do that by using the :if and :unless options, which can take a symbol, a string or a Ruby Proc. You may use the :if option when you want to specify when the callback should get called. If you want to specify when the callback should not be called, then you may use the :unless option.
9.1. Using a symbol with the :if and :unless options
You can associate the :if and :unless options with a symbol corresponding to the name of a method that will get called right before the callback. If this method returns false the callback won’t be executed. This is the most common option. Using this form of registration it’s also possible to register several different methods that should be called to check the if the callback should be executed.
class Order < ActiveRecord::Base before_save :normalize_card_number, :if => :paid_with_card? end
9.2. Using a string with the :if and :unless options
You can also use a string that will be evaluated using :eval and needs to contain valid Ruby code. You should use this option only when the string represents a really short condition.
class Order < ActiveRecord::Base before_save :normalize_card_number, :if => "paid_with_card?" end
9.3. Using a Proc object with the :if and :unless options
Finally, it’s possible to associate :if and :unless with a Ruby Proc object. This option is best suited when writing short validation methods, usually one-liners.
class Order < ActiveRecord::Base before_save :normalize_card_number, :if => Proc.new { |order| order.paid_with_card? } end
9.4. Multiple Conditions for Callbacks
When writing conditional callbacks, it’s possible to mix both :if and :unless in the same callback declaration.
class Comment < ActiveRecord::Base after_create :send_email_to_author, :if => :author_wants_emails?, :unless => Proc.new { |comment| comment.post.ignore_comments? } end
10. Available callbacks
Here is a list with all the available Active Record callbacks, listed in the same order in which they will get called during the respective operations.
10.1. Callbacks called both when creating or updating a record.
-
before_validation
-
after_validation
-
before_save
-
INSERT OR UPDATE OPERATION
-
after_save
10.2. Callbacks called only when creating a new record.
-
before_validation_on_create
-
after_validation_on_create
-
before_create
-
INSERT OPERATION
-
after_create
10.3. Callbacks called only when updating an existing record.
-
before_validation_on_update
-
after_validation_on_update
-
before_update
-
UPDATE OPERATION
-
after_update
10.4. Callbacks called when removing a record from the database.
-
before_destroy
-
DELETE OPERATION
-
after_destroy
The before_destroy and after_destroy callbacks will only be called if you delete the model using either the destroy instance method or one of the destroy or destroy_all class methods of your Active Record class. If you use delete or delete_all no callback operations will run, since Active Record will not instantiate any objects, accessing the records to be deleted directly in the database.
10.5. The after_initialize and after_find callbacks
The after_initialize callback will be called whenever an Active Record object is instantiated, either by direcly using new or when a record is loaded from the database. It can be useful to avoid the need to directly override your Active Record initialize method.
The after_find callback will be called whenever Active Record loads a record from the database. When used together with after_initialize it will run first, since Active Record will first read the record from the database and them create the model object that will hold it.
The after_initialize and after_find callbacks are a bit different from the others, since the only way to register those callbacks is by defining them as methods. If you try to register after_initialize or after_find using macro-style class methods, they will just be ignored. This behaviour is due to performance reasons, since after_initialize and after_find will both be called for each record found in the database, significantly slowing down the queries.
11. Halting Execution
As you start registering new callbacks for your models, they will be queued for execution. This queue will include all your model’s validations, the registered callbacks and the database operation to be executed. However, if at any moment one of the before_create, before_save, before_update or before_destroy callback methods returns a boolean false (not nil) value or raise and exception, this execution chain will be halted and the desired operation will not complete: your model will not get persisted in the database, or your records will not get deleted and so on. It’s because the whole callback chain is wrapped in a transaction, so raising an exception or returning false fires a database ROLLBACK.
12. Callback classes
Sometimes the callback methods that you’ll write will be useful enough to be reused at other models. Active Record makes it possible to create classes that encapsulate the callback methods, so it becomes very easy to reuse them.
Here’s an example where we create a class with a after_destroy callback for a PictureFile model.
class PictureFileCallbacks def after_destroy(picture_file) File.delete(picture_file.filepath) if File.exists?(picture_file.filepath) end end
When declared inside a class the callback method will receive the model object as a parameter. We can now use it this way:
class PictureFile < ActiveRecord::Base after_destroy PictureFileCallbacks.new end
Note that we needed to instantiate a new PictureFileCallbacks object, since we declared our callback as an instance method. Sometimes it will make more sense to have it as a class method.
class PictureFileCallbacks def self.after_destroy(picture_file) File.delete(picture_file.filepath) if File.exists?(picture_file.filepath) end end
If the callback method is declared this way, it won’t be necessary to instantiate a PictureFileCallbacks object.
class PictureFile < ActiveRecord::Base after_destroy PictureFileCallbacks end
You can declare as many callbacks as you want inside your callback classes.
13. Observers
Active Record callbacks are a powerful feature, but they can pollute your model implementation with code that’s not directly related to the model’s purpose. In object-oriented software, it’s always a good idea to design your classes with a single responsibility in the whole system. For example, it wouldn’t make much sense to have a User model with a method that writes data about a login attempt to a log file. Whenever you’re using callbacks to write code that’s not directly related to your model class purposes, it may be a good moment to create an Observer.
An Active Record Observer is an object that links itself to a model and registers its methods for callbacks. Your model’s implementation remains clean, while you can reuse the code in the Observer to add behaviour to more than one model class. OK, you may say that we can also do that using callback classes, but it would still force us to add code to our model’s implementation.
Observer classes are subclasses of the ActiveRecord::Observer class. When this class is subclassed, Active Record will look at the name of the new class and then strip the Observer part to find the name of the Active Record class to observe.
Consider a Registration model, where we want to send an email every time a new registration is created. Since sending emails is not directly related to our model’s purpose, we could create an Observer to do just that:
class RegistrationObserver < ActiveRecord::Observer def after_create(model) # code to send registration confirmation emails... end end
Like in callback classes, the observer’s methods receive the observed model as a parameter.
Sometimes using the ModelName + Observer naming convention won’t be the best choice, mainly when you want to use the same observer for more than one model class. It’s possible to explicity specify the models that our observer should observe.
class Auditor < ActiveRecord::Observer observe User, Registration, Invoice end
13.1. Registering observers
If you paid attention, you may be wondering where Active Record Observers are referenced in our applications, so they get instantiated and begin to interact with our models. For observers to work we need to register them somewhere. The usual place to do that is in our application’s config/environment.rb file. In this file there is a commented-out line where we can define the observers that our application should load at start-up.
# Activate observers that should always be running config.active_record.observers = :registration_observer, :auditor
You can uncomment the line with config.active_record.observers and change the symbols for the name of the observers that should be registered.
It’s also possible to register callbacks in any of the files living at config/environments/, if you want an observer to work only in a specific environment. There is not a config.active_record.observers line at any of those files, but you can simply add it.
13.2. Where to put the observers' source files
By convention, you should always save your observers' source files inside app/models.
14. Changelog
January 9, 2009: Initial version by Cássio Marques


Carli Lloyd hits again as imperious USA overwhelm Costa Rica in 2019 finale
by Associated Press- Carli Lloyd, Morgan Brian score in opening minutes of 6-0 win
- USA finish 20-1-3 in 2019, ending on 23-match unbeaten streak
- Lloyd scored twice in 3-2 victory over Sweden on Thursday
Carli Lloyd and Morgan Brian scored in the first 10 minutes and Lynn Williams came off the bench to add a pair of second-half goals in the United States’ 6-0 victory over Costa Rica on Sunday night at TIAA Bank Field in the Americans’ final match of the year.
The US were 20-1-3 in 2019, finishing with a 23-match unbeaten streak.
Lloyd started the scoring in the fourth minute, taking a long pass from Rose Lavelle and drilling a shot from the left side of the box past goalkeeper Noelia Bermudez. Lloyd scored twice in a 3-2 victory over Sweden on Thursday night.
Brian added a goal in the 10th minute, taking Lavelle’s pass and sending a scorching shot into the corner of the net. It was especially gratifying for Brian, who grew up in nearby St Simons Island, Georgia, and conducts camps in the Jacksonville area during the offseason.
US coach Vlatko Andonovski made several substitutions at half-time and it quickly paid dividends.
Williams converted in the 50th minute off a pass from Tobin Heath. Williams added a second goal in the 68th minute, taking an assist from Jessica McDonald. Williams narrowly missed a hat trick when her point-blank shot was caught by Bermudez late in the game.
Christen Press and Margaret Purce also added second-half goals.
US goalkeeper Ashlyn Harris had a relatively easy time, needing to turn back just one shot. The closest Costa Rica came to scoring was when Melissa Herrera hit the cross bar on a shot in the 62nd minute and teammate Priscilla Chinchilla did the same in the 76th minute.


---
layout: post
title: Stunt
date: '2018-06-03T11:30:13+02:00'
categories:
- Storyboards
- Sketches
picture_url: https://film-Storyboards.tumblr.com/post/174534655714/rough-Storyboards
---
Rough storyboard for a stunt, The Crimson Rivers (Les Rivières Pourpres), TV series directed by Olivier Barma.


{% extends "base.html" %} {% block media_end_js %} {% if user.is_authenticated %} {% endif %} {% endblock%} {% block content %} {% if user.is_authenticated %} {% if user.first_name %}
PCTeacher is a learning platform specially designed to adapt to your learning style. Click below to select the lesson which you would like to start with, and PCTeacher will automatically adjust to your learning style as you go along.


ABOUT US
About Big'O NETWORKSBig'O Networks is founded with a vision to provide innovative BLOCKCHAIN solutions at an affordable cost. We mainly focused on decentralized goverence, autonomus ,decentralized data infrastruture. We are towards first step to revolutionize our society by exploring Blockchain technology and implementing its use cases.
~ Founders |
We educate students by the experts in their respective field through collabrating with educational institutes. Students become experts through more practical session and world use cases.
To evolve as an International repute in providing blockchain solution for enterprises,companies and to work on innovative project ideas to make our WORLD, a better place.
Blockchain is a better, safer way to record activity and keep data fresh, while maintaining a record of its history. The data can't be corrupted by anyone or accidentally deleted, and you benefit from both a historical trail of data, plus an instantly up-to-date record.
Blockchain creates trust between different entities where trust is either nonexistent or unproven.
Blockchain really proves its value when there's no central actor who enables trust.
Immutability simply means that transactions, once recorded on the blockchain, can't be changed or deleted.
Blockchain creates an unalterable record of transactions with end-to-end encryption, which shuts out fraud and unauthorized activity.
Blockchain enables an unprecedented amount of individual control over one's own digital data.
Blockchain's nature also can cut costs for organizations. It creates efficiencies in processing transactions


| Criteria | Evaluation Item | Points Earned |
Possible points |
|---|---|---|---|
| Program Runs & Files submitted |
Project successfully runs. NetBeans project folder submitted as a .zip file in the D2L dropbox. | |
5 |
| Window title bar text | Student's Name appears in the Window Frame in screen capture image and when Program is run | |
5 |
| 4 flags displayed | Output shows at least 4 flags in various screen locations; none of the flags are overlapping | |
5 |
| background color | All flags have a different background color | |
5 |
| flag stripe color | Each flag's stripe color is different than that flag's background color | |
5 |
| Total Points ====> | |
25 |


First, need to include these tags in html file.
The History object takes in few arguments, which consists of startYear: An Integer which is the starting year values for the history object; endYear: An Integer which is the ending year values for the history object; width: An Integer which is the width of the whole history object element; height: An Integer which is the height of the whole history object element; selector: A class or id selector that the user want to append to; direction: A string which takes in values of either "horizontal" or "vertical". Indicating which direction that the user want the History object. side: A string which takes in values of either "both", "up", "down", "left", "right". Note that if choesn direction as "horizontal", the side can only takes in "up", "down", or "both". If chosen "vertical", the side can only takes in "left", "right", or "both". The side represents which side the element should be, either left side of the svg object if chosen "left" or right side if the svg if chosen "right".
Then all the methods can be call via the object
createNonAnimatedClickHistory takes in three arguments, includeYear, events, and barLength. The includeYear is a boolean value, indicating whether the user want to show the start year and end year on their History line. The input events is a list of events, in which every object in the list takes the for of {year: ..., name: ..., description: ...}. The last input barLength indicate that how long the user want the bar that grow out of main line. Example is provided in Examples page. The method will create a history time line that each time event is click to show, and the bar growing from the main line is not animated.
createNonAnimatedClickHistory returns a svg element which contains the nessary components to create the History such as Line, Circle, ForeignObject, Text, Button.
createNonAnimatedNonClickHistory takes in three arguments, includeYear, events, and barLength. The includeYear is a boolean value, indicating whether the user want to show the start year and end year on their History line. The input events is a list of events, in which every object in the list takes the for of {year: ..., name: ..., description: ...}. The last input barLength indicate that how long the user want the bar that grow out of main line. Example is provided in Examples page. The method will create a history time line that each time event is not click to show, and also the bar growing out from the main line is not animated.
createNonAnimatedNonClickHistory returns a svg element which contains the nessary components to create the History such as Line, Circle, ForeignObject, Text, Button.
createAnimatedClickHistory takes in three arguments, includeYear, events, and barLength. The includeYear is a boolean value, indicating whether the user want to show the start year and end year on their History line. The input events is a list of events, in which every object in the list takes the for of {year: ..., name: ..., description: ...}. The last input barLength indicate that how long the user want the bar that grow out of main line. Example is provided in Examples page. The method will create a history time line that each time event is click to show, and also the bar growing out from the main line is animated.
createAnimatedClickHistory returns a svg element which contains the nessary components to create the History such as Line, Circle, ForeignObject, Text, Button.
createAnimatedNonClickHistory takes in three arguments, includeYear, events, and barLength. The includeYear is a boolean value, indicating whether the user want to show the start year and end year on their History line. The input events is a list of events, in which every object in the list takes the for of {year: ..., name: ..., description: ...}. The last input barLength indicate that how long the user want the bar that grow out of main line. Example is provided in Examples page. The method will create a history time line that each time event is not click to show, and also the bar growing out from the main line is animated.
createAnimatedNonClickHistory returns a svg element which contains the nessary components to create the History such as Line, Circle, ForeignObject, Text, Button.
createScroll takes in two arguments, numSteps, and idList. The numSteps is an Integer values that represents the number of step point that the user want on their scroll bar. The idList is a list that its length is the same as the numSteps and it contains the id that each step point will stop at. (Note that the idList needs to be in the order that the user want to stop. For example, if user want the first stop to be id #first, then the first element in the idList should be #first). Examples is show in the examples page.
createScroll returns a svg element which contains circles that equal to the numSteps.
createStep takes in two arguments, numSteps, and htmlList. The numSteps represents the number of the step that the user want the form to have. The htmlList is a list with each element represents a HTML collections. (Note that the list needs to have the order that the user want. For example, by clicking the first step, it will show up the first HTML collections in the first index of the htmlList). Example is provided in the examples page.
createStep returns a svg element which contains circles that equal to the numSteps. And numSteps of ForeignObject element, in each element it will show up the corresponding htmlList's HTML collections.


The first winter storm of 2018 is bringing extreme cold, high winds and snow in a 'bomb cyclone'
The bombogenesis is at hand and the end is... probably not nigh.
What's that? You have no idea what that means? Well, you're not alone. Social media is all worked up and #BombCyclone has been trending on Twitter. But what is that?
Bombogenesis — a fancy term for a winter hurricane — can happen when a cold air mass collides with a warm air mass, like air over warm ocean water. The formation of the rapidly strengthening weather system is what creates a bomb cyclone.
Got all that? Great. But what does all this mean for us? Winter Storm Grayson is really giving us the business. Gov. Cuomo declared a state of emergency for New York City and its suburbs.
PHOTOS: The bomb cyclone snow day in New York City
Schools were closed and Tuesday's morning commute resembled a scene from the movie "The Day After Tomorrow." The winter storm warning issued by the National Weather Service is in effect until Friday morning. And MTA trains and buses are operating under a Cold Weather Plan.
Central Park set a new snow record for the day with 9.8 inches of snow, according to the National Weather Service, and Long Island could see more than a foot of the white stuff before the storm is done. Temperatures are expected to be well below normal for the weekend with wind chills between zero and -5 degrees. Yikes! It should warm up by Monday, though.


This is a paragraph with a standard line-height.
The default line height in most browsers is about 110% to 120%.
This is a paragraph with a smaller line-height.
This is a paragraph with a smaller line-height.
This is a paragraph with a bigger line-height.
This is a paragraph with a bigger line-height.


\PHPUnit_Util_Getopt
Command-line options parsing class.
- Author: Andrei Zmievski<EMAIL_ADDRESS>- Copyright: 2001-2014 Sebastian Bergmann<EMAIL_ADDRESS>- License: http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
Synopsis
- // methods
- public static void getopt()
- protected static void parseShortOption()
- protected static void parseLongOption()
Violations
PHPMessDetector
| Line | Rule | Message |
|---|---|---|
| 60 - 106 | CyclomaticComplexity | The method getopt() has a Cyclomatic Complexity of 14. The configured cyclomatic complexity threshold is 10. |
| 60 - 106 | NPathComplexity | The method getopt() has an NPath complexity of 348. The configured NPath complexity threshold is 200. |
| 108 - 144 | CyclomaticComplexity | The method parseShortOption() has a Cyclomatic Complexity of 11. The configured cyclomatic complexity threshold is 10. |
| 146 - 198 | CyclomaticComplexity | The method parseLongOption() has a Cyclomatic Complexity of 13. The configured cyclomatic complexity threshold is 10. |
Checkstyle
| Line | Column | Severity | Message |
|---|---|---|---|
| 96 | 38 | error | Only one argument is allowed per line in a multi-line function call |
| 96 | 53 | error | Only one argument is allowed per line in a multi-line function call |
| 96 | 60 | error | Only one argument is allowed per line in a multi-line function call |
| 100 | 38 | error | Only one argument is allowed per line in a multi-line function call |
| 100 | 54 | error | Only one argument is allowed per line in a multi-line function call |
| 100 | 61 | error | Only one argument is allowed per line in a multi-line function call |
Methods
History
-
2014-08-12T06:43:31+02:00 (commit #50dfaba)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>phpcbf --standard=PSR2 src tests
-
2014-07-20T19:13:08+02:00 (commit #8150734)
Author: Jeff Welch<EMAIL_ADDRESS>/ Commiter: Jeff Welch<EMAIL_ADDRESS>Fixes #1330: Allow non-ambiguous shortened longopts.
-
2014-01-22T19:43:07+01:00 (commit #02b42d7)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Initial work on formatting code according to PSR-2
-
2014-01-20T17:21:13+01:00 (commit #3a5808f)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Cleanup
-
2014-01-09T08:11:47+01:00 (commit #205e008)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year
-
2013-01-07T11:37:52+01:00 (commit #c517984)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year
-
2012-09-24T06:47:44+02:00 (commit #81ab540)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Do not perform string replacement for @package_version@ anymore.
-
2012-04-30T12:02:38+02:00 (commit #5786e50)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>List The BSD 3-Clause License correctly and consistently. Thanks to Christian Aistleitner<EMAIL_ADDRESS>for bringing this issue to my attention.
-
2012-01-01T11:21:16+01:00 (commit #aae6c38)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2010-12-31T11:45:34+01:00 (commit #bee3344)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2010-07-07T12:42:23+02:00 (commit #f0d9cdd)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Change email address.
-
2010-06-12T20:25:54+02:00 (commit #d19a737)
Author: Mark Story<EMAIL_ADDRESS>/ Commiter: Mark Story<EMAIL_ADDRESS>Removing trailing whitespace from files. Refs #1063
-
2010-05-18T16:13:08+02:00 (commit #0f2b39e)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Remove superfluous @abstract annotation.
-
2010-04-05T17:41:26+02:00 (commit #471d69e)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Add @subpackage annotation.
-
2010-03-08T11:45:40+01:00 (commit #e8411e5)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix TRAC-1016.
-
2010-02-02T14:14:29+01:00 (commit #bc1aaaa)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Remove closing PHP tags.
-
2010-01-19T09:39:03+01:00 (commit #fb48a69)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Initial work on autoloading.
-
2009-12-31T09:26:09+01:00 (commit #37f75ff)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2009-12-31T09:25:53+01:00 (commit #bddcc5f)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2009-12-31T09:23:37+01:00 (commit #7a7d0b7)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2009-12-25T10:32:26+01:00 (commit #60e7125)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Remove Subversion keywords.
-
2009-12-25T10:30:57+01:00 (commit #42294ad)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Remove Subversion keywords.
-
2009-12-25T10:26:35+01:00 (commit #8617133)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Remove Subversion keywords.
-
2009-12-23T10:22:46+01:00 (commit #2e774a7)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5487].
-
2009-12-23T10:22:17+01:00 (commit #57d11b6)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5487].
-
2009-12-23T10:21:48+01:00 (commit #66731c8)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix #779.
-
2009-12-22T18:38:49+01:00 (commit #e5924f2)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5471].
-
2009-12-22T18:38:37+01:00 (commit #77b424b)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5471].
-
2009-12-22T18:37:10+01:00 (commit #e4ee2c6)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix #945.
-
2009-12-22T17:40:59+01:00 (commit #4337a24)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Revert accidental commit.
-
2009-12-22T17:39:23+01:00 (commit #6ceb98f)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix #942.
-
2009-11-23T09:39:24+01:00 (commit #1503412)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5389].
-
2009-11-23T09:29:23+01:00 (commit #4c9cf4e)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Initial work on PHP_CodeCoverage migration.
-
2009-09-13T16:31:10+02:00 (commit #49e09bd)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5229].
-
2009-09-13T16:30:40+02:00 (commit #6efb28e)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix CS.
-
2009-08-29T10:49:43+02:00 (commit #f144a51)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5161].
-
2009-08-29T10:24:37+02:00 (commit #86e29fa)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix CS/WS issues.
-
2009-08-27T10:37:36+02:00 (commit #c978d03)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [5134].
-
2009-08-27T10:34:10+02:00 (commit #1a20980)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Introduce PHPUnit_Framework_Exception.
-
2008-12-31T10:26:51+01:00 (commit #a899cb2)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [4402].
-
2008-12-31T10:25:57+01:00 (commit #4b26cea)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2008-06-08T09:56:46+02:00 (commit #bf92a96)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [3142].
-
2008-06-08T09:46:30+02:00 (commit #3662ef0)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fix CS/WS issues found by PHP_CodeSniffer.
-
2007-12-26T19:11:55+01:00 (commit #1bba1cc)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2007-12-26T19:11:04+01:00 (commit #58121cf)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump copyright year.
-
2007-09-29T12:56:13+02:00 (commit #8feea89)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Merge [1361].
-
2007-02-24T07:58:18+01:00 (commit #203ee10)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fugbix typo.
-
2007-02-24T07:58:18+01:00 (commit #ae2a7c2)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Fugbix typo.
-
2006-12-24T18:50:40+01:00 (commit #0189be1)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Bump year.
-
2006-11-08T14:24:54+01:00 (commit #604fb61)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Consistently use lowercase "array".
-
2006-09-11T09:20:41+02:00 (commit #75e12fb)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>No longer needed.
-
2006-07-06T11:50:42+02:00 (commit #dacd2f1)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Leftover: PHPUnit2 -> PHPUnit.
-
2006-06-30T10:38:41+02:00 (commit #210b621)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Make it easier to use a checkout of the trunk.
-
2006-06-29T20:56:08+02:00 (commit #6b0d2d5)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Post-PEAR cleanup, phase one: PHPUnit2_* -> PHPUnit_*, pear.php.net -> phpunit.de, etc.
-
2006-06-29T16:58:01+02:00 (commit #8b8c705)
Author: Sebastian Bergmann<EMAIL_ADDRESS>/ Commiter: Sebastian Bergmann<EMAIL_ADDRESS>Recreate trunk.