text:
\section{Background}\label{sec:background}

\subsection{Analysing \textsc{Scratch}\xspace Programs}
\textsc{Scratch}\xspace\cite{maloney2010} is a block-based programming language that aims to make programming more accessible for novices. The use of different block shapes  prevents syntactical errors, but the resulting code can nevertheless contain problems in terms of code smells or bugs.
Code smells are idioms that decrease the understandability of a program and increase the likelihood of introducing bugs during future modifications~\cite{fowler1999}. Different code smells for \textsc{Scratch}\xspace have either been derived from other programming languages \cite{hermans2016a} or have been
defined specially for it~\cite{moreno2014}.
Prior research has demonstrated that code smells have negative effects on
learning~\cite{hermans2016b} as smelly code hampered the learners ability to modify it. Code smells also lower the likelihood of a project being remixed and thus hurt the \textsc{Scratch}\xspace community~\cite{techapalokul2017a}.
In order to find code smells in \textsc{Scratch}\xspace projects there are automated tools to analyse the programs like \textsc{Hairball}\xspace~\cite{boe2013},  \textsc{Quality Hound}\xspace~\cite{techapaloku2017b}, and \textsc{LitterBox}\xspace~\cite{Litterbox}.

Bugs, on the other hand, refer to code that does not correctly implement the functionality it is supposed to. While the process of finding and fixing bugs is inherent to coding and learning to program, tools can offer support to learners as well as teachers. Automated tests and program verification are a common means to identify bugs in programs, and have also been introduced to the \textsc{Scratch}\xspace domain with tools like \textsc{Whisker}\xspace~\cite{stahlbauer2019testing}, \textsc{Itch}\xspace~\cite{johnson2016itch}, or \textsc{Bastet}\xspace~\cite{stahlbauer2020}. As testing as well as verification require some form of specification, a more accessible approach to support learners is through static code analysis tools (i.e., linters), which can recognise common errors based on rules and patterns~\cite{lintersGeneral, codeAnalysisTools}.
In particular, misconceptions of learners often manifest in bugs that follow recurring bug patterns which tools like \textsc{LitterBox}\xspace~\cite{Litterbox} can automatically detect: A bug pattern is a code idiom that is likely to be a defect~\cite{hovemeyer2004}, and bug patterns for \textsc{Scratch}\xspace have been demonstrated to occur frequently~\cite{fraedrich2020}.

\subsection{Feedback and Learning}

Feedback generated by program analysis tools is generally assumed to be effective, in particular because the feedback is returned regardless of other characteristics of the student and is accordingly perceived as less threatening~\cite{hattie2008visible}.
Computer-based feedback mainly focuses on bad coding practices. Such negative
feedback may be useful in programming education in many ways: Teachers face the
challenge of not only having to assess, but also having to support students with their individual problems when
programming~\cite{michaeli2019current,yadav2016expanding,sentance2017computing},
 and tools can be of help in analysing their students' misunderstandings
and currently lacking skills. Learners, especially more experienced
programmers, mainly seek negative feedback to achieve their
goals~\cite{posAndNegFeedbackGoal}, as corrective feedback helps to acquire
further knowledge and cognitive skills \cite{wisniewski2020power}.

The effects of feedback on intrinsic motivation are generally assumed to be
small, but depend on the type of feedback~\cite{wisniewski2020power}. In
particular, negative feedback might reduce the perceived autonomy and
self-efficacy that in turn both influence intrinsic
motivation~\cite{wisniewski2020power,ryan2000intrinsic}. Positive feedback on
the other hand, tends to lead to a higher intrinsic motivation than negative
feedback~\cite{hattie2008visible}. To ensure these effects, feedback should
support the feeling of autonomy and learners feeling responsible for their
competent performance \cite{ryan2000rewards}. Such authentic positive feedback
increases people's confidence, leading them to expect successful goal
attainment \cite{posAndNegFeedbackGoal}. Accordingly, praise and tangible
rewards do not increase intrinsic motivation~\cite{deci1999meta}. Especially
for learners and novices, positive feedback is effective to keep up motivation
\cite{posAndNegFeedbackGoal}. There is also evidence that more motivated
learners process feedback better~\cite{feedbackLearning}, which means that
positive feedback increasing motivation may enhance the processing of negative
feedback.

Importantly, however, positive feedback is different from praise: Praise
contains little to no content-related information and is therefore among the
least effective types of feedback~\cite{hattie2008visible}. Furthermore, praise
does not answer the three questions of effective
feedback~\cite{hattie2014using}: It does not provide any answers concerning the
intended goals, the previous progress or the future direction. Elaborated
feedback, on the other hand, deals with knowledge about task constraints,
mistakes, processing the task and meta-cognition~\cite{narciss2013designing}.
Positive feedback can support learners of programming only if it answers the
three questions of effective feedback and contains elaborated feedback:
Learners can find out which of the intended goals they attained and which
practices and patterns they can maintain and expand further. While praise can
nevertheless be helpful for motivating students, the resulting motivation will
be extrinsic, and the motivation will decrease when external motivators are
omitted: Montessori \cite{montessori1959absorbent} explains that purely
judgemental comments such as praise do not support children; instead they only
point out what the child might already have known (such as being good or bad at
something), make the child dependent on the teacher and thus also decrease
intrinsic interest.

Despite the potential effects of positive feedback,
so far, there are only few implementations in automated analysis tools for \textsc{Scratch}\xspace programs. \textsc{Dr. Scratch}\xspace~\cite{moreno2015} displays praise in form of a short text such as ``You're doing a great job. Keep it up!!!'' and returns points on computational thinking concepts\footnote{http://www.drscratch.org/, last accessed 28.05.21}.

\section{Evaluation}\label{sec:evaluation}

To evaluate the concept of code perfumes on \textsc{Scratch}\xspace projects, we investigate the
following research questions:
\begin{itemize}
	\item \textbf{RQ1:} How common are code perfumes?
	\item \textbf{RQ2:} Are code perfumes related to correctness?
\end{itemize}

\subsection{Experimental Setup}

\subsubsection{Dataset:}
To answer RQ1 we use the dataset by Frädrich et al.~\cite{fraedrich2020} to
study bug patterns. It consists of 74,907\xspace \textsc{Scratch}\xspace projects mined over
the course of 3 weeks. The dataset excludes remixes, which might otherwise skew
results due to duplicated code.

To answer RQ2 we use the 37 Fruit Catching game solutions which were created by children of a sixth and a seventh grade class and used in the evaluation of the \textsc{Whisker}\xspace testing tool~\cite{stahlbauer2019testing}. The game contains three sprites: a bowl that the player can move left or right with the cursor keys, an apple and a banana that appear at random positions at the top of the stage and then drop down to the bottom. The goal is to catch as much fruit as possible within a given time, and when missing an apple the game is lost. In addition to the code itself, the dataset includes a set of 28 automated tests~\cite{stahlbauer2019testing}.

\subsubsection{Analysis tool: }
We implemented the code perfumes listed in Section~\ref{sec:perfume_descriptions} in the open source \textsc{LitterBox}\xspace framework. This tool already has the capabilities of statically analysing \textsc{Scratch}\xspace projects, and we added new finders for these perfumes following the procedure described by Fraser et al.~\cite{Litterbox}.

We furthermore use \textsc{Whisker}\xspace~\cite{stahlbauer2019testing}, an automatic testing tool for \textsc{Scratch}\xspace, to check the solutions of the Fruit Catching game for correctness. \textsc{Whisker}\xspace simulates user inputs automatically and then checks if the program reacts as specified in the tests that are executed (e.g., that the bowl moves right when the right arrow key is pressed). For this we use the test suite provided as part of the \textsc{Whisker}\xspace study. It contains 28 individual test cases checking different correctness aspects of the task.

\subsubsection{RQ1:}
To answer RQ1 we applied \textsc{LitterBox}\xspace to the dataset containing random \textsc{Scratch}\xspace projects. For checking how common code perfumes are we consider the total number of code perfumes found, the instances found for each type of perfume, as well as the number of projects containing at least one perfume. Furthermore we consider the average complexity of the projects containing code perfumes measured as weighted method count (i.e., sum of cyclomatic complexities of all scripts).

\subsubsection{RQ2:}
To answer RQ2 we applied \textsc{LitterBox}\xspace to the Fruit Catching dataset to obtain the number of code perfumes, bug patterns and code smells in the solutions. We used \textsc{Whisker}\xspace to determine the correctness of the programs in terms of the number of tests passed. We then compared code perfumes, bug patterns and smells by their relationship to the number of tests passed.

\subsubsection{Threats to Validity:}
Our experiments are based on the sample of projects mined by Frädrich et al.~\cite{fraedrich2020}, and might not generalise to other data. In particular, only publicly shared projects can be mined, while unfinished, unshared programs might have other properties. Similarly, we only used one task and student solutions from two classes as well as one \textsc{Whisker}\xspace test suite for answering the question if code perfumes can indicate correctness, so the results may not generalise to other tasks, classes or test suites. While we analysed how frequent code perfumes are and how they are related to correctness, a study of whether reporting perfumes influences motivation and learning outcomes is a matter of future work.

\subsection{RQ1: How common are code perfumes?}

\input{tables/Perfume_table.tex}

We found instances of all 25 code perfumes in the dataset of random projects. In total, there are 4,712,055\xspace code perfume instances, and 73,787\xspace contained at least one code perfume. Table~\ref{tab:perfume_table} summarises the number of code perfume instances found for each type, the number of projects containing at least one instance of the respective perfume and the average weighted method count of these projects. Note that the individual numbers of projects containing one type of perfume may not add up to the total number of projects containing at least one perfume, as some projects contain more than one type of perfume and are thus counted in more than one category.

Considering the number of projects containing code perfumes, the most common perfume is \textit{Parallelisation} (70,519). Using highly concurrent, parallel scripts is a key factor of the event-driven paradigm followed by \textsc{Scratch}\xspace, so the large quantity of \textit{Parallelisation} perfumes found is not surprising. The average weighted method count (WMC) of 49.74 of the projects containing this perfume also suggests that this concept is already used in  smaller projects than other perfumes.

The frequent occurrence of \textit{Initialisation of Looks} (54,065) and \textit{Initialisation of Positions} (38,824) is also intuitive, since initialising the looks and locations of sprites in \textsc{Scratch}\xspace is usually necessary for programs to work correctly. Again the average WMC is comparatively low, showing that initialisation is already important at an early state of programming to maintain a correct execution of the program.

The least common perfume is \textit{Say Sound Synchronisation} (41), which is not directly related to programming concepts. It likely is only useful in specific types of animation projects, therefore lower numbers can be expected.
The infrequent occurrence of the motion related  \textit{Gliding Motion} (1,810), \textit{Directed Motion} (2,116), and \textit{Movement in Loop} (11,665) perfumes matches prior research~\cite{fraedrich2020} which found frequent occurrences of the \textit{Stuttering Movement} bug pattern. It appears that learners prefer to follow the event-driven but simpler approach of handling motion through dedicated event-handling blocks, even though this results in stuttering movement.

The quite low number of only 4,082 projects with \textit{List Usage} code perfume further supports previous research~\cite{elementarypatterns}. The  average WMC of the projects using lists is also the highest one of all code perfumes with 172.18, suggesting that lists are one of the most advanced concepts in \textsc{Scratch}\xspace. Similarly, code perfumes related to custom blocks (i.e., \textit{Custom Block Usage} or \textit{Matching Parameters}) are less frequent and usually found in more complex projects, which again matches prior findings on bug patterns~\cite{fraedrich2020}.

Beside the list and custom block related code perfumes the \textit{Coordination} (131.92) and \textit{Object Follower} (146.93) stand out for the high average WMC of the projects they are contained in.
The average WMC of \textit{Coordination} may be explained by the fact that the functionality of a \controlblock{wait until} block can also be achieved by a combination of \controlblock{forever} loop and \controlblock{if then} block, two blocks users are probably more confident to use as the high number of \textit{Conditional Inside Loop} perfumes implies (i.e., 38,935 in contrast to only 10,162 projects using \textit{Coordination}).
This is further supported by the quite low average WMC of \textit{Conditional in Loop} indicating that even simple projects use this paradigm rather than a \textit{Coordination} with a \controlblock{wait until} block.
In the case of \textit{Object Follower} the high complexity may simply be a result of the types of projects in which the perfume can be usefully applied. For comparison, the \textit{Mouse Follower} perfume is conceptually similar, but as it can be used in projects with only a single sprite, the average WMC is only 79.53.
We also note a high average WMC for the \textit{Nested Conditional Checks} and \textit{Nested Loops Perfume}, but these are not surprising as nesting loops and \controlblock{if then}/\controlblock{if else} blocks by definition contribute to an increased complexity as measured by WMC.

The ``Perfumes''-column of Table~\ref{tab:perfume_table} shows that some of the perfumes also occur multiple times within the same project. Notably, the \textit{Parallelisation} code perfume therefore not only occurs in the most projects, but it also shows most perfume instances (1,142,319) overall. This again is due to the inherently parallel nature of \textsc{Scratch}\xspace programs. It has to be noted that a very high amount of parallelisation in a project could also lead to debugging problems if the students are not fully aware how the parallel scripts work \cite{meerbaum2011}, so for evaluating individual students this value should not be taken as the sole grading factor but instead be combined with other characteristics of the project.

The other code perfume standing out due to its high total number of instances found is \textit{Boolean Expression} with 1,037,703. This is also very natural as the Boolean operators in \textsc{Scratch}\xspace are a crucial part to regulate the control flow without having to nest multiple \controlblock{if then} blocks. In addition an \operatorblock{and} block is a simple way to prevent a \textit{Nested Loops} smell. A contributing factor to this high number is that our implementation flags each Boolean operator in a nested expression separately, as each represents a correctly used Boolean expression.

There is a much bigger difference between projects using \textit{Initialisation of Looks} (54,065) to total number of perfumes (473,814) than for \textit{Initialisation of Positions} with 38,824 projects containing a total of 131,560 perfumes. This is because the perfume checking for the looks blocks has multiple possible initialisations (e.g., visibility, size and costume) whereas the other one just looks at the position.

The \textit{Mouse Follower} code perfume has the lowest proportion of instances (5,521) to projects containing at least one perfume (4,049). This can be explained with the nature of the pattern: The user wants to control a sprite with the mouse movements, and since a computer normally only has one mouse, controlling multiple sprites is usually not useful.

Lists may be one of the least used features of \textsc{Scratch}\xspace~\cite{elementarypatterns}, but users knowing how to handle lists use them frequently, as indicated by the 130,290 instances of \textit{List Usage} in only 4,082 projects having this perfume.
The only perfume not to reach a four digit count is \textit{Say Sound Synchronisation} with only 155 instances found in total. Nonetheless, even this perfume indicates that if a user knows this specific practice it will be used multiple times in one project.

\summary{RQ1}{Code perfumes very frequently appear in \textsc{Scratch}\xspace{} programs of varying complexity and can be automatically detected. We found code perfumes in 98\% of our dataset.}

\subsection{RQ2: Are code perfumes related to correctness?}

\begin{figure}[tb]
	\centering
	\subfloat[\label{fig:scatter_perfume_correctness}Passed tests vs. code perfumes.]{\includegraphics[width=0.49\columnwidth]{plots/passed_perfume_scatter.pdf}}\hfill
	\subfloat[\label{fig:perfume_blocks_scatter}Code blocks vs code perfumes.]{\includegraphics[width=0.49\columnwidth]{plots/perfume_blocks_scatter.pdf}}
	\caption{\label{fig:scatter_plots} Relation between code perfumes and correctness and size metrics.
		}
	\vspace{-0.5em}
\end{figure}

Using the \textsc{Scratch}\xspace projects and \textsc{Whisker}\xspace tests provided by Stahlbauer et al.~\cite{stahlbauer2019testing}, we can determine for each project how many of the functional requirements that the students were tasked to implement are met, as well as how many code perfumes their projects contain. Since all projects are solution attempts for the same task we hypothesise that, the more tests a project has passed, the more perfumes should be in the code, as more concepts have been used correctly.

The results of the comparison between tests passed and the number of code perfumes found in each project are shown in Figure~\ref{fig:scatter_perfume_correctness}.
We included a sample solution, which is the only project fulfilling all specifications and thus passing all tests, and this also has the second highest number of code perfumes. We can also see that projects with very few passed tests tend to also only have few code perfumes.
This results in a Pearson's correlation coefficient between passed tests and number of code perfumes of r=0.696\xspace (p<0.001\xspace).
That is, there is a moderate correlation between correctness of the projects according to the passed \textsc{Whisker}\xspace tests and the number of code perfumes.

There are several outliers that did fairly well in the \textsc{Whisker}\xspace tests but do not contain many perfumes, and vice versa. These are solutions that work well but do not exhibit many good coding practices or solutions that have good code quality for scripts that do not contribute to the functionality of the project.

For example, one solution passed only 5 tests but has 28 perfume instances in its code. The student implemented many functionalities right, which resulted in many code perfumes (e.g., the program stop is controlled inside an \controlblock{if then} block and the countdown is implemented to fit the \textit{Timer} pattern). However, the solution has one crucial failure which results in the low count of passed tests: the Apple is at the bottom of the stage and does not go back to the top when the program starts. Therefore the program ends almost immediately when the green flag is clicked, and only tests related to visibility and the termination of the game pass, even though other functionalities are implemented. In this case the code perfumes indicate that there is good code that the tests do not detect.

Another project contains only 17 code perfumes but passes 24 of the \textsc{Whisker}\xspace tests. The code works fine, but it lacks good practices, for example the movements of the bowl are implemented in a way that they exhibit the \textit{Stuttering Movement} bug pattern and not using a \textit{Movement In Loop} perfume. The code is furthermore missing things like an initialisation of the visibility of the sprites, which does not matter for most of the tests. Consequently the code perfumes indicate code that is functional \textit{and} does show good practice.

Figure~\ref{fig:perfume_blocks_scatter} shows the relation between perfumes and number of blocks. There is a strong correlation between these two factors of a project (r=0.889\xspace, p<0.001\xspace).
Intuitively, when a task is given in detail, a student solution that consists of more code is likely to solve more subtasks and thus might contain more code perfumes.
If students struggle, they likely have to spend more time on solving individual problems and thus produce less code. Considering the correlations with size and with correctness, the number of code perfumes thus can provide some feedback to teachers on whether their students are performing well or are struggling.

\begin{figure}[tb]

	\hfill
		\subfloat[\label{fig:scatter_bugpattern_correctness}Passed tests vs. bug patterns]{\includegraphics[width=\columnwidth/2]{plots/passed_patterns_scatter.pdf}}\hfill
		\subfloat[\label{fig:scatter_smell_correctness}Passed tests vs. code smells]{\includegraphics[width=\columnwidth/2]{plots/passed_smells_scatter.pdf}}\hfill
	\caption{\label{fig:blocks_scatter} Relation between tests passed and the number of (a) bug patterns and (b) smells.
	}

\end{figure}

Code smells and bug patterns are alternative means for automated assessment of code.  Whereas the relationship between code perfumes and correctness is clearly visible, the relation between tests passed and the number of bug patterns (Figure~\ref{fig:scatter_bugpattern_correctness}) and number of code smells (Figure~\ref{fig:scatter_smell_correctness}) is not so straight forward.
Our data shows neither a correlation between tests passed with the total occurrence of bug patterns (r=-0.16\xspace, p=0.344\xspace) nor with the number of code smells (r=0.109\xspace, p=0.522\xspace). We conjecture that the high $p$-values of the correlation coefficients will be influenced by the substantially lower number of code smells and bug patterns in the student projects compared to code perfumes. Furthermore, an important difference between code perfumes and code smells/bug patterns is that, unlike code perfumes, neither code smells (r=0.249\xspace, p=0.137\xspace) nor bug patterns (r=0.007\xspace, p=0.969\xspace) are correlated to size.

To compare code perfumes with code smells and bug patterns we therefore control for size through normalisation. This reveals a weak negative correlation between the number of smells per blocks and the number of tests passed (r=-0.353\xspace, p=0.032\xspace), and also a weak negative correlation (r=-0.408\xspace, p=0.012\xspace) between bug patterns per blocks and the number of tests passed. In contrast, even when normalised the correlation between code perfumes per blocks and the number of tests passed remains higher  (r=0.469\xspace, p=0.003\xspace).
While, considering the strength of the correlations, neither of these analyses can serve as a form of auto-grading of student solutions on its own, it does seem that code perfumes provide a better indication for how good the code is. Furthermore, since code perfumes are orthogonal to code smells and bug patterns, a combination of all three factors is probably best suited to inform teachers about their students' progress.

\summary{RQ2}{Correct solutions tend to contain more code perfumes.}

\section{Conclusions}\label{sec:conclusions}

A common ground is important for providing feedback. When providing feedback about negative aspects of code in \textsc{Scratch}\xspace an existing vocabulary of bug patterns and code smells is available. However, in order to provide better, contextualised, and individualised feedback, and especially for encouraging learners, providing feedback about positive aspects of the code is also essential.

In order to provide a vocabulary for good coding practices we introduced and empirically evaluated a catalogue of 25 code perfumes in \textsc{Scratch}\xspace, as well as an automated means for detecting them in \textsc{Scratch}\xspace programs. Our evaluation found occurrences of all of these code perfume, as well as evidence that code perfumes occur more frequently in correct code.

In this paper we introduced the concept of code perfumes and performed analyses to establish a basic understanding of how common they are and how they relate to correctness. An important next step will be to evaluate the effects this positive feedback has on novice programmers. We furthermore envision that not only learners can benefit from this positive feedback, but also teachers who need to get an overview of their students' \textsc{Scratch}\xspace programs in order to provide individualised feedback. Therefore, a further important aspect of future work will be to inspect if the combined use of positive linting (i.e., code perfumes) and negative linting (i.e., code smells and bug patterns) can indeed help teachers provide better feedback.

We introduced an initial set of 25 code perfumes in this paper, but implementing additional code perfumes is straightforward, and we expect to add many more in the future. For example, a desirable perfume could be the usage of meaningful comments inside the \textsc{Scratch}\xspace code, but to include such a pattern the characteristics of a good comment in \textsc{Scratch}\xspace have to be defined first.

In order to support the adoption of code perfumes and further research, all our code perfumes are implemented directly into \textsc{LitterBox}\xspace, which is freely available at: \url{https://github.com/se2p/LitterBox}.
\subsection{Code Perfumes for \textsc{Scratch}\xspace}

\label{sec:perfume_descriptions}

Based on the patterns discussed in Section~\ref{sec:perfume_sources}, we now introduce an initial collection of code perfumes. We anticipate that this list will grow further over time.

{
\setlength{\parskip}{0.5\baselineskip}%
\setlength{\parindent}{0pt}%

\paragraph{{\Large$\spadesuit$}\xspace Backdrop Switch:}
Changing to a backdrop in \textsc{Scratch}\xspace games or animated stories should likely induce some state alterations in one or more sprites or backdrops.
This can elegantly be implemented using appropriate \looksblock{switch backdrop to} options together with \hatblock{when backdrop switches to} event handlers to start the desired actions.
\textit{Backdrop Switch} is inspired by a possible fix of the \textit{Missing Backdrop Switch} bug pattern~\cite{fraedrich2020}.

\paragraph{{\Large$\clubsuit$}\xspace Boolean Expression:} The presence of combinations of expressions (i.e., \operatorblock{<}, \operatorblock{=} and \operatorblock{>} blocks) and Boolean operators (i.e., \operatorblock{and}, \operatorblock{or} and \operatorblock{not} blocks) can be indicative of attempts to properly simplify control flow \cite{computationalThinking}.
Note that only instances without Comparing Literals patterns \cite{fraedrich2020} will be reported.

\paragraph{{\Large$\diamondsuit$}\xspace Collision:} Continuous collision checks (sprite touches edge or other sprite) that implicate adapted reactions (e.g., move, change look) are used to implement basic game and animation behaviour in \textsc{Scratch}\xspace \cite{programmingPatterns, modelforMeasurement}.

\paragraph{{\Large$\clubsuit$}\xspace Conditional Inside Loop:}
Considered as an advanced code structure \cite{programmingPatterns}, this perfume is checking for loops that contain at least one conditional construct. For example an \controlblock{if else} statement within a \controlblock{repeat until} block.

\paragraph{{\Large$\clubsuit$}\xspace Controlled Broadcast Or Stop:} The timing and conditions for when to start other scripts via a broadcast, or when to stop scripts, must be correct for a right program behaviour. So a check for a condition, which must be met before broadcasting or stopping, to control both these actions is useful~\cite{youngProgrammersPatterns}. Furthermore, to ensure correct timing, the block responsible for this must be within a loop.

\paragraph{{\Large$\clubsuit$}\xspace Coordination:}
The existence of a \controlblock{wait until} statement in a \textsc{Scratch}\xspace program might be a sign of an effort to adapt the coordination of scripts to changing control flows~\cite{computationalThinking}.

\paragraph{{\Large$\spadesuit$}\xspace Correct Broadcast:}
Properly implemented message broadcasts should at least consist of matching sending and receiving blocks.
\textit{Correct Broadcast} is inspired by fixes of the \textit{Message Never Received} and the \textit{Message Never Sent} bug pattern~\cite{fraedrich2020}.

\paragraph{{\Large$\spadesuit$}\xspace Custom Block Usage:}
To identify solutions of subtasks that might be reusable and to implement appropriate custom procedures is considered to be good programming practice.
This finder is inspired by fixes of the \textit{Call Without Definition} bug pattern \cite{fraedrich2020}. It detects the presence and use of custom blocks.

\paragraph{{\Large$\diamondsuit$}\xspace Directed Motion:}
Controlling sprite movement by keyboard inputs is a common task in games and animated stories. A simple implementation consists of a \hatblock{when key pressed} event handler followed by \motionblock{point in direction} and \motionblock{move steps} statements \cite{modelforMeasurement, programmingPatterns}.

\paragraph{{\Large$\diamondsuit$}\xspace Gliding Motion:}
This finder reports another simple implementation to manipulate sprite movement: a \hatblock{when key pressed} event handler followed by one or more \motionblock{glide secs to} statements~\cite{modelforMeasurement,programmingPatterns}.

\paragraph{{\Large$\clubsuit$}\xspace Initialisation of Looks:}
Defining the start state of games and animated stories is especially useful, since \textsc{Scratch}\xspace does not perform any default resetting of attributes automatically. Furthermore, it is considered a good programming practice to think about desired initial states of program executions.
Look blocks like costume or backdrop setter statements being present in \hatblock{when green flag clicked} scripts are reported by this finder. This might indicate that learners tried to solve a subtask of the \textit{defining a start state} problem. The presence of this and the next pattern is used by Seiter and Foreman~\cite{computationalThinking} to measure computational thinking skills of students.

\paragraph{{\Large$\clubsuit$}\xspace Initialisation of Positions:}
This perfume finder reports position setter statements being present in \hatblock{when green flag clicked} scripts possibly indicating that learners tried to solve another subtask of the \textit{defining a start state} problem.

\paragraph{{\Large$\heartsuit$}\xspace List Usage:}
The existence of list-statements in \textsc{Scratch}\xspace programs might be a sign of an effort to hold and process a number of values efficiently.

\paragraph{{\Large$\spadesuit$}\xspace Loop Sensing:}
Continuously checking for touch or key events inside a \controlblock{forever} or \controlblock{repeat until} loop is a useful pattern to implement event processing in \textsc{Scratch}\xspace.
This perfume is inspired by a possible fix of the bug pattern \textit{Missing Loop Sensing} \cite{fraedrich2020}.

\paragraph{{\Large$\spadesuit$}\xspace Matching Parameter:}
Properly implemented custom blocks consist at least of a signature containing a complete parameter list: all parameters, that are used inside a custom block, are to be present in the list.
This perfume finder is inspired by fixes of the \textit{Orphaned Parameter} bug pattern \cite{fraedrich2020}: It detects whether all parameters used are also declared in the custom block.

\paragraph{{\Large$\diamondsuit$}\xspace Mouse Follower:}
Sprite movement can be controlled by mouse input.
This behaviour can be implemented in \textsc{Scratch}\xspace by a loop containing either a \motionblock{go to mouse-pointer} statement or a combination of \motionblock{point towards mouse-pointer} and \motionblock{move steps} statements \cite{programmingPatterns}.

\paragraph{{\Large$\spadesuit$}\xspace Movement In Loop:} To avoid \textit{Stuttering Movement} \cite{fraedrich2020} when controlling sprites by keyboard input it is recommended to use a loop with a conditional containing a \sensingblock{key pressed?} expression and appropriate actions.

\paragraph{{\Large$\heartsuit$}\xspace Nested Conditional Checks:} Nested conditional checks (i.e., nested \controlblock{if then} and \controlblock{if else} blocks) can be seen as advanced code structures~\cite{programmingPatterns, elementarypatterns}

\paragraph{{\Large$\spadesuit$}\xspace Nested Loops:} The presence of nested loops, where the inner one is accompanied by other blocks preceding or following it to not have a \textit{Nested Loop} smell \cite{Litterbox}, might be indicative for attempts to implement advanced control flow \cite{programmingPatterns}.

\paragraph{{\Large$\diamondsuit$}\xspace Object Follower:}
In some games or animations one sprite follows another for at least a certain time \cite{programmingPatterns}. This can be implemented using
a loop containing a \motionblock{point towards} statement targeting the other sprite, followed by a \motionblock{move steps} statement.

\paragraph{{\Large$\clubsuit$}\xspace Parallelisation:}
 The presence of two scripts with the same hat block can be indicative of attempts to implement independent subtasks more clearly and readably \cite{computationalThinking}.

\paragraph{{\Large$\diamondsuit$}\xspace Say Sound Synchronisation:} A nice way to enhance interaction between program and player is to use both \looksblock{say} and \soundblock{play sound} blocks in a synchronous way to let sprites talk. However, this say sound synchronisation is not straightforward in \textsc{Scratch}\xspace. It can be implemented by placing a \soundblock{play sound file} block, playing a message, right after the \looksblock{say} block that shows the message in a speech bubble. As soon as the sound file ends, the speech bubble must be cleared by using an empty \looksblock{say} block afterwards \cite{boe2013}.

\paragraph{{\Large$\diamondsuit$}\xspace Timer:}
Timing durations is a useful subtask in many \textsc{Scratch}\xspace programming problems.
This finder reports the usage of a variable that is changed repeatedly (inside, e.g., a \controlblock{forever} loop) by a fixed value in combination with a \controlblock{wait seconds} statement.
\cite{programmingPatterns, modelforMeasurement}.

\paragraph{{\Large$\spadesuit$}\xspace Useful Position Check:}
Checking position and distance values can be quite error-prone since floating point values are used and have to be compared. A bigger-than or less-than operator to compare values can be a fix to the \textit{Position Equals Check} bug pattern~\cite{fraedrich2020}.

\paragraph{{\Large$\spadesuit$}\xspace Valid Termination Condition}: The \controlblock{repeat until} statement requires a termination condition, otherwise the loop will run forever and code following the loop will never be executed. This perfume is inspired by a possible fix of the \textit{Missing Termination Condition} bug pattern \cite{fraedrich2020}.

}

\section{Code Perfumes}\label{sec:perfumes}

\subsection{What is a Code Perfume?}

Source code that contains quality problems is typically considered to be ``smelly''. A code smell is not necessarily a bug per se, but it may easily lead to bugs after further modifications.

\begin{definition}[Code Smell] A code smell is a code idiom that increases the likelihood of bugs in a program~\cite{fowler1999,fraedrich2020}.
\end{definition}

Based on the metaphor of smelly code, we consider code that is good to also smell good---it is \emph{perfumed}. Therefore, we introduce \emph{code perfumes} as the counterpart to code smells.
We define code perfumes as follows:

\begin{definition}[Code Perfume]
A code perfume is a code idiom that is indicative of the correct application of a programming concept or pattern.
\end{definition}

Just like with code smells, the question whether a program implements the desired functionality is orthogonal---one can implement the wrong functionality using correctly applied programming concepts, and one can implement the right functionality using smelly code.
The number of code perfume instances can furthermore be easily increased by using many good code parts that do not contribute to the functionality, so code perfumes are not intended to be a single device for automated grading of student solutions.

\subsection{Sources of Code Perfumes}

\label{sec:perfume_sources}

Desirable programming concepts and patterns will differ for programming paradigms and programming languages. In this paper, we focus on perfumes that are suitable for the block based, event driven nature of \textsc{Scratch}\xspace.
To define concrete coding patterns that qualify as code perfumes a number of different approaches are presented in this subsection.

\subsubsection{Solution Patterns:}

\begin{figure*}[t]
	\centering
	\subfloat[\label{fig:example-shared}Shared code.]{\includegraphics[width=0.27\textwidth]{figures/scriptReceivingMessage.pdf}}\hfill
	\subfloat[\label{fig:example-bugpattern}Buggy Version.]{\includegraphics[width=0.34\textwidth]{figures/scriptNotSendingMessage.pdf}}\hfill
	\subfloat[\label{fig:example-perfume_fix}Perfumed version.]{\includegraphics[width=0.34\textwidth]{figures/scriptSendingMessage.pdf}}
	\vspace{-0.5em}
	\caption{Script showing \textit{Message Never Sent} bug pattern that can not start the shared code compared to a script with the corresponding \textit{Correct Broadcast} code perfume with the correct behaviour.}
	\vspace{-1em}
\end{figure*}

Bug patterns in \textsc{Scratch}\xspace are defined as compositions of blocks typical of defective code, or common erroneous deviations of a correct code idiom~\cite{fraedrich2020}. When bug patterns are defined as deviations of  correct code idioms, then these underlying correct code idioms represent correct ways of implementing certain behaviour, and can thus be considered perfumed.
As an example consider the bug pattern \textit{Message Never Sent} depicted in Figures~\ref{fig:example-shared} and \ref{fig:example-bugpattern}: The two scripts with the \hatblock{When I receive Let's start!} event handler will never be executed by the buggy version (Figure~\ref{fig:example-bugpattern}), as there is no \controlblock{broadcast Let's start!} block. The use of a broadcast-block in this scenario (Figure~\ref{fig:example-perfume_fix}) represents a correct solution pattern, which in turn provides an opportunity to identify code perfumes. In a similar manner, solution patterns can be defined as counterpieces of many bug patterns.

However, not all bug patterns imply solution patterns. For example, the \textit{Terminated Loop} bug pattern~\cite{Litterbox} checks if there are loops that stop during the first iteration due to a \controlblock{stop} block without guarding condition. The absence of a \controlblock{stop} block in a loop would already be sufficient to avoid the bug pattern, but it hardly justifies positive feedback, as that would simply commend the absence of bugs and not the presence of a solution pattern.

For those cases where we can match a bug pattern with a solution pattern there is the potential to further improve feedback. In particular, if a project contains both the bug pattern and the corresponding solution pattern, then negative and positive feedback could even be linked together, for example:  \emph{``There is a bug here, but you already know how to do that correctly: ... ''}, so that users can learn from their own good code.

In order to discern perfumes that were inspired by this approach, we annotate corresponding descriptions with a~{\Large$\spadesuit$}\xspace symbol.

\subsubsection{Elementary Patterns:}

Amanullah and Bell~\cite{elementarypatterns} suggest that already the use of certain language features implies an understanding of control flow structures and indicates problem solving and logical thinking skills~\cite{elementarypatterns}. For evaluating \textsc{Scratch}\xspace programs they therefore provide a list of various command blocks and features, and so called \emph{elementary patterns}, that can indicate such understanding. They provide possible solutions for a number of common (\textsc{Scratch}\xspace specific) problems that can help students avoid bad programming style and show a range of good coding techniques. The list of elementary patterns consists of two categories: Loop- and Selection Patterns. Loop patterns, such as the ``Process All Items'' pattern, mainly work on a collection, which is provided as a list in \textsc{Scratch}\xspace. Selection patterns refer to conditional constructs with (nested) \controlblock{if then} and \controlblock{if else} blocks. Examples are the ``Whether Or Not'' pattern, consisting of only an \controlblock{if then} statement or the ``Independent Choice'' pattern that contains nested \controlblock{if then} statements when one action depends on several, independent factors.

While these features and patterns have been found
empirically~\cite{elementarypatterns} to be important for developing logical
and computational thinking, they are extremely
under-used~\cite{elementarypatterns}. Indeed code does not have to be
smell free to be worth positive feedback, and simply the correct usage of
specific code structures and concepts can be used for positive feedback as it
indicates development of computational skills.

Code perfumes originating from this category are annotated with a~{\Large$\heartsuit$}\xspace symbol.

\subsubsection{Evidence Variables:}

The Progression of Early Computational Thinking (PECT) model~\cite{computationalThinking} aims to find evidence for computational thinking skills in \textsc{Scratch}\xspace programs by measuring the presence and level of concrete computational aspects, which are essentially more specific versions of the aforementioned elementary patterns~\cite{elementarypatterns} in a program, through the use of so called \emph{Evidence Variables}.  These variables roughly represent the very basic components of programming and are based on the \textsc{Scratch}\xspace block categories. The model focuses on the traditional story-telling and gaming perspective of \textsc{Scratch}\xspace, thus Seiter and Foreman~\cite{computationalThinking} propose the following set of Evidence Variables:

\vspace{0.4em}

\multicolersatz{Looks}{Conditionals}

\multicolersatz{Sound}{Coordination}

\multicolersatz{Motion}{User Interface Event}

\multicolersatz{Variables}{Boolean Expression}

\multicolersatz{Sequence \& Looping}{Operators}

\multicolersatz{Initialise Location}{Initialise Looks}

\mbox{\hbox to 0.6\columnwidth{\phantom{xxxx}$\bullet$ Parallelisation\hfill}}

The first ten Evidence Variables of this list are assigned values of 0
(absent), 1 (basic), 2 (developing) and 3 (proficient), based on the presence
and level of proficiency of the respective construct in a user program. For
example, for \emph{Sequence \& Looping} the levels 1 - 3 are defined as
follows: 1 = Sequence, 2 = Repeat, Forever, 3 = Forever If, Repeat
Until~\cite{computationalThinking}. This categorisation by levels of
sophistication might not be necessary for a linter in our context: Level 0 or 1
represent absent concepts or basic skills and are not particularly worthy of praise, but developing and proficient (level 2 and level 3) implementations of
Evidence Variables can indicate high computational thinking skills and the
correct use of a programming concept, and might therefore qualify as code
perfumes.
The last three Evidence Variables are Initialise Location, Initialise Looks and Parallelisation. They have binary semantics, and as such directly qualify as code perfumes.

Code perfumes inspired by this approach are annotated with a~{\Large$\clubsuit$}\xspace symbol.

\subsubsection{Game Programming Patterns:}

One central characteristic feature of \textsc{Scratch}\xspace is that it easily allows the creation of animated stories and games of all kinds~\cite{maloney2010}. Introducing programming to children in a more entertaining and playful way can not only lead to higher motivation for children, but can also increase their programming knowledge and computational thinking skills~\cite{modelforMeasurement}. Whether or not common game behaviour is implemented correctly gives indication of a student's learning and engagement in computational thinking.
The Game Computational Sophistication (GCS) model~\cite{modelforMeasurement}
aims to measure this based on the code constructs (patterns) found in the
source code of an analysed game. As an example, the GCS 2.0
model~\cite{modelforMeasurement} comes with an expanded set of common game
programming patterns such as Key/Mouse Control Movement, User-Usability and
Counter. Many of these patterns also fit into the \textsc{Scratch}\xspace context or can at
least be adapted accordingly. Consequently, considering the game design aspect
of \textsc{Scratch}\xspace these patterns can be considered good practices and a source of
code perfumes. The resulting code perfumes focus on common implementation
choices for classic game behaviour that can help to improve user experience and
functionality

The game programming perfumes are annotated with a~{\Large$\diamondsuit$}\xspace symbol.

\input{content/perfumedescription}

\subsection{Analysing Code for Code Perfumes}

\begin{figure}[tb]
  \centering
	\includegraphics[width=0.8\columnwidth]{figures/ast.pdf}
	\caption{\label{fig:example_ast} Perfume pattern in the abstract syntax tree.}
\end{figure}

The process of finding code perfumes in a given program is similar to how linters typically find issues. First, we build an Abstract Syntax Tree (AST) from the source code, which encodes the structure of the program as well as the type and relation of its elements in an easily traversable tree datastructure. For each component of the \textsc{Scratch}\xspace program (i.e., blocks and drop down menus) there is a distinct representation as node in this AST. For example, Figure~\ref{fig:example_ast} shows the AST constructed from the example \textsc{Scratch}\xspace program in Figure~\ref{fig:example_good_practice}.

Each code perfume represents a pattern specifying a combination of nodes in the AST, which together construct a correct implementation of a programming concept. Finding instances of code perfumes therefore is a matter of matching these patterns on the AST. For example, to check whether the AST in Figure~\ref{fig:example_ast} contains an instance of the \emph{Loop Sensing} code perfume, the pattern describes a \controlblock{forever} statement which includes an \controlblock{if then} statement that uses a \emph{sensing} block as Boolean expression. As highlighted in Figure~\ref{fig:example_ast}, the AST contains all of these nodes in the required arrangement, and thus represents an instance of the \emph{Loop Sensing} code perfume.

For each of the code perfumes defined in Section~\ref{sec:perfume_descriptions} we specified a similar pattern of statements and implemented it as an AST-visitor.

\section{Introduction}\label{sec:intro}

\textsc{Scratch}\xspace is a block-based programming language for novice programmers, especially designed to meet the needs and interests of children and young students. The use of visual blocks, the single-window user interface layout,  and the minimal command set reduce complexity and help to overcome initial difficulties like language syntax learning~\cite{maloney2010}.
While these features and the community helped \textsc{Scratch}\xspace to become widely used amongst programming novices and teachers \cite{mcgill2020}, the reduced complexity can neither ensure correctness nor good code quality~\cite{fraedrich2020, hermans2016a, techapalokul2017a}. It can be challenging for young learners to detect and correct bugs and code smells in their programs, and the resulting bad practices can negatively affect their coding habits and computational thinking skills~\cite{hermans2016b}.

To address this problem, program analysis tools such as \textsc{LitterBox}\xspace~\cite{Litterbox}, \textsc{Hairball}\xspace\cite{boe2013} and \textsc{Quality Hound}\xspace\cite{techapaloku2017b} can automatically detect bug patterns and code smells. By identifying and pointing out bugs and code smells in learners' programs such tools can provide support for young programmers during their learning process. When the feedback is provided with explanations and hints it may also help to avoid the same problems in the future. Analysis tools are also helpful to support teachers in analysing their students' current skills and showing deficits that have to be tackled in future lessons. Overall, however, the automated feedback tools entirely rely on pointing out negative aspects of  programs.

While corrective feedback is proven to be very useful in terms of acquiring further cognitive skills~\cite{wisniewski2020power}, \emph{positive} feedback is considered to have better effects on motivational aspects than negative feedback---especially on the task level \cite{hattie2008visible}.
In contrast, purely negative feedback may harm self-efficacy and autonomy and therefore decrease intrinsic motivation~\cite{wisniewski2020power,ryan2000intrinsic}. A decreased intrinsic motivation in turn might affect dealing with feedback in a negative way: Learners process feedback better when they are motivated and positive feedback activates and motivates learners more than negative feedback~\cite{feedbackLearning}. Therefore, effective learning should include informative feedback about errors as well as correct behaviour to address both cognitive and motivational aspects.

\begin{figure}[tb]
	\centering
	\subfloat[\label{fig:example-perfume}``Perfumed'' code.]{\includegraphics[scale=0.6]{figures/intro_example_2_annotated}}\hfill
	\subfloat[\label{fig:example-bug}Incomplete code.]{\includegraphics[scale=0.6]{figures/intro_example_2_bug}}
	\caption{\label{fig:example_good_practice} Good code practice in a \textsc{Scratch}\xspace project: The script continuously \ding{192} checks \ding{193} the mouse down status \ding{194}. A frequent mistake it to omit the loop \ding{192}, in which case the code will not work.}
\end{figure}

In this paper, we introduce the idea of \emph{code perfumes} as a counterpiece to code smells to enable automated program analysis tools to also provide positive feedback. Code perfumes are patterns of code that are considered as good programming practices. For example, consider  Figure~\ref{fig:example_good_practice}: The version of the script in Figure~\ref{fig:example-perfume} continuously \ding{192} checks \ding{193} the mouse down status \ding{194}, which is a common and good pattern of handling repeated events---it is a code perfume. Figure~\ref{fig:example-bug} shows a common failed attempt at achieving the same which lacks the code perfume: Since there is no \controlblock{forever} loop, the check is executed only once, instead of continuously.
Code perfumes make it possible to allow automated program analysis tools to  inform the user not only about bug patterns and code smells in the given program, but also about implementations of good ideas and good coding practices occurring in it.

\begin{figure}[tb]
	\centering
	\includegraphics[width=\columnwidth]{figures/positive_feedback_big_multi_n_cropped_3}
	\caption{\label{fig:example_feedback}Positive feedback given for correctly implementing a continuous check for an event.}
	\vspace{-1em}
\end{figure}

Figure~\ref{fig:example_feedback} shows feedback commending the learner for applying a code perfume and correctly using the check continuously in a loop.
This potentially has several beneficial effects: The
positive feedback serves as encouragement for young learners and helps teachers
in providing better individual feedback. Furthermore, given information about
positive aspects of student solutions, teachers may be able to ask
contextualised questions that address individual needs and potentials alike,
much more than just knowing what their students did wrong. Finally, learners may be more willing to accept the help from automated feedback tools if these do not just criticise.

In detail, the contributions of this paper are as follows:
\begin{itemize}
\item We introduce the notion of code perfumes as a means to complement bug and code smell finders in automated program analysis tools.
\item We describe and implement a catalogue of 25 code perfumes, covering a wide range of aspects of \textsc{Scratch}\xspace programs.
\item We empirically evaluate how frequently these code perfumes occur in practice by analysing a dataset of 74,907\xspace publicly shared \textsc{Scratch}\xspace programs.
\item We empirically evaluate how the occurrence of code perfumes relates to correctness of the programs.
\end{itemize}

Our investigation shows that the proposed code perfumes occur frequently in practice, and we find that the number of code perfumes in a program is correlated to how correct the program is. These encouraging findings suggest that code perfumes are a practical means to complement the feedback on errors that existing automated program analysis tools can provide to learners with positive feedback, and to provide teachers with insights into the learning progress of their students.

redpajama_set_name: RedPajamaArXiv


These beautiful chunky hand made glass dread beads are the perfect adornment for your locks be they synthetic or natural alike.
Amethyst: a lovely deep purple transparent shade.
Ruby: a delicious hot red .
Amber: a vibrant marmalade orange .
The beads measure roughly 12 mm tall, 15 mm wide and have a 5-6 mm hole .
Sold as single pieces so you can add as many or as few to your hair as you like.


New scientific analysis using laser technology on the tibias of the crew of Henry VIII's Mary Rose suggests many of the sailors had rickets from an early age, suffering bone disease caused by the poor diet many people had during the 16th century.
Raman spectroscopy – a non-destructive technique described as "pioneering" by experts from the Royal National Orthopaedic Hospital in north London – showed that the abnormally-shaped bones, which were compared with anatomically healthy remains from the 1545 shipwreck, carried metabolic diseases and chemical abnormalities typical of rickets.
"This is the first time that this laser technology has been used to study bone disease in archaeological human bone," says Dr Jemma Kerns, a Clinical Study Manager at the hospital and University College London.
"We have identified chemical changes in the bones without damaging them.
Experts hope to use Raman as a tool for understanding the prevalence of metabolic bone disease in ancient populations such as the 400 men aboard the Mary Rose, which sank in a summertime battle on the Solent, where the silt environment kept their bodies in remarkable condition.
The technique could be used to detect current conditions after a Faculty of Public Health leader suggested diseases usually associated with the Tudor era are becoming more common due to poverty and malnutrition.
"The Mary Rose Trust has the responsibility for the remains of over 179 individuals who perished with the ship," says Alex Hildred, the trust's Curator of Human Remains.
"Their provenance is absolute; they represent the crew of an English warship in July 1545.
"The human remains have potential to make a contribution to the public through research, education, display and interpretation.
The results of the study, which was funded as part of a £1.7 million grant by the Engineering and Physical Sciences Research Council, have been published in the Journal of Archaeological Science.


text:
Yale Hockey Academy forward Jesse Lansdell committed to the University of Notre Dame's NCAA Division I program
Lansdell lands in Notre Dame
The Grade 11 student said the decision to attend the university was easy once he visited earlier this year.
Jul. 19, 2015 8:00 a.m.
Yale Hockey Academy forward Jesse Lansdell has committed to the University of Notre Dame's NCAA Division I program, though he won't suit up for the Fighting Irish until the 2016-17 season.
The Grade 11 Sardis Secondary student who currently billets with an Abbotsford family said the decision to attend the famous university was easy once he visited earlier this year.
"It's a beautiful campus and the facilities were [redone] a few years ago," said Lansdell, alluding to Notre Dame's Compton Family Ice Arena, which went up in the fall of 2011.
The arena, located on campus, seats 5,022.
Lansdell said his academic interest is in business, but key in his decision was how welcoming the coaching staff were.
"They knew the kind of player I was," said Lansdell, who described himself as a 200-foot player, who likes to use his body and size. "I'm more a playmaker."
The 16-year-old spent the 2014-15 season with the Yale Hockey Academy prep team, with whom he registered 55 points and 106 penalty minutes in 25 games.
"Playing for Yale this past season has definitely made me a more rounded player," said Landsell.
He is the fifth player from the 2014-15 prep team to have committed to an NCAA program, and will join teammate Alec Capstick at Notre Dame.
Lansdell also played seven regular season games with the Chilliwack Chiefs of the British Columbia Hockey League last season, netting one assist and seven penalty minutes and made four post-season appearances with the club.
Sign up for a free account today, and receive top headlines in you inbox Monday to Saturday.
Daisy the golden Lab in the care of BC SPCA after being run over by car
Ledgeview Ladies' Amateur
Marshall with rally saving kick in Pan Am opener
MCC BC and MDS team up to battle Fraser Valley flooding damage

redpajama_set_name: RedPajamaCommonCrawl


text:
Los Tupamaros de Berlín Oeste ( Tupamaros West-Berlín óTW por sus siglas en inglés) fueron una pequeña guerrilla marxista alemana que llevó a cabo una serie de atentados e incendios provocados a finales de la década de 1960.  En 1969, Dieter Kunzelmann, Georg von Rauch y algunos otros viajaron a Jordania para entrenar en un campamento de Fatah, formando los Tupamaros a su regreso a Alemania. El grupo tomó su nombre de los Tupamaros uruguayos. El TW un total de 15 guerrilleros.

Historia
Su primera acción fue un intento de bombardear el Centro Comunitario Judío de Berlín Occidental el 9 de noviembre de 1969 (el aniversario de la Kristallnacht ); la bomba, suministrada por el agente encubierto del gobierno Peter Urbach, no explotó.   A esto le siguió en el otoño de 1969 una serie de atentados con bomba e incendios provocados contra policías, jueces y objetivos estadounidenses e israelíes. El TW se atribuyó la responsabilidad de estos ataques bajo una variedad de nombres diferentes para exagerar el tamaño de su movimiento. Los Tupamaros formaron parte de una red personal y política informal e informal que se ha denominaban "Blues".

El grupo estaba dirigido por Kunzelmann y von Rauch, y se disolvió después de que el primero fuera arrestado en 1970 y el segundo huyó cuando se proclamó la sentencia el 8 de julio de 1971, von Rauch huyó de la corte en Berlín-Moabit cambiando roles con Weisbecker (quien fue liberado de todos los cargos). Un acto que nunca fue completamente explicado. El 5 de diciembre del mismo año, von Rauch fue capturado en Berlín-Schöneberg por policías vestidos de civil. Se produjo un tiroteo, durante el cual von Rauch resultó herido de muerte. asesinado por la policía en 1971. Sus miembros principales luego formaron el Movimiento 2 de junio, mientras que algunos otros se unieron a la Facción del Ejército Rojo.

El atentado al Centro Comunitario Judío
El libro de 2005 Die Bombe im Jüdischen Gemeindehaus, el historiador Wolfgang Kraushaar habla sobre el intento de atentado con bomba de los tupamaros en el Centro Comunitario Judío de Berlín Occidental desató un debate sobre el antisemitismo en el movimiento estudiantil alemán. El bombardeo supuestamente fue planeado por Kunzelmann y la bomba en sí colocada por Albert Fichter, hermano del entonces presidente de la Sozialistischer Deutscher Studentenbund, Tilman Fichter. En la fecha del intento de atentado, más de 200 personas se habían reunido en el centro comunitario para conmemorar la Kristallnacht.

Los Tupamaros Múnich
Alrededor de la época de la creación de TW, Fritz Teufel formó un grupo similar en Munich, los Tupamaros Munich (TM). Brigitte Mohnhaupt, quien más tarde una figura importante en la segunda generación de la RAF, fue miembro.

Referencias

Fracción del Ejército Rojo
Movimiento de Liberación Nacional-Tupamaros
Oposición extraparlamentaria
Organizaciones terroristas en Alemania
Política de Berlín
Terrorismo en Alemania
Terrorismo de extrema izquierda

redpajama_set_name: RedPajamaWikipedia


text:
Posted on November 22, 2020 November 22, 2020 by GRBalme
One Crazy Summer (1986)
In the 80s were launched all these kids having a great time films that served to remind us of the sort of lives my friends and I were not living, though, this film set nearby us on a fairly obscure but locally famous beach resort island seemed like a local story to a degree. I was 21 when this film was available to us, but I rarely found myself at the beach, instead I was working in a lace mill and a fast food restaurant not far away from places I'd never been to, featured, possibly, in this story. It's got features redolent of beach blanket bingo films, a commonality of which would be trying to save some piece of real-estate from being sold to careless developers who, in this case, would snatch it from the soft, guitar-strumming, hands of Demi Moore.
And so our intrepid band of brothers, including Billy Murray's youngest sibling Joel, John Cusack a forlorn loveless sap and 80s stalwart Curtis Armstrong (Better off Dead and Revenge of the Nerds) along with a slew of comic side actors from Rich Hall to Joe Flaherty to Bobcat Goldthwait as Egg Stork (who has to be exhausted all the time), chase the cuties, take part in a beachbag's worth of childish gags (Murray's youngest buried in sand under a chair with a fat kid sitting on it eating chili level stuff) and a lot of weirdly violent and nightmarish cartoon goofiness that Cusack is meant to be feeling out his future with on paper. The most obvious help he could have given Demi's little singing act would have been to design her some decent flyers. Instead the fellows decide to try to win a ridiculous yacht race with a montage built boat with a sports car engine somehow chainsawed into it.
At some point in this film Goldthwait ends up in a Godzilla costume and manages to attack a miniature model beach resort being sold to William Hickey while dozens of screaming people run aimlessly around with their arms in the air. There's also a rabid dolphin mechanism being used for a film being shot that manages to attack an antagonist with a crossbow, and you really get the feeling that Savage Steve Holland who created this circus of silliness really just did so spontaneously over a lot of coke. It's not a bad film, it's just a remarkably silly one, but then so are a slew of similar teen films going back into the 50s. At least this one isn't really attempting to modify any behavior, it's mostly, ultimately about camaraderie and the chance that within the enemy's midst are good hearted people who recognize their compatriots are actually shitty.
This runs about 3 bucks on Prime and is fun for a glimpse at the 35 year old past for so many of these cute actors. Aspects of this film feel like Cheech and Chong should have been in it.
Previous Article The Suspicious Death of a Minor (1975)
Next Article Saturday the 14th (1981)


text:
Revision as of 05:43, 28 January 2008 by MartyAcks (talk | contribs) (New page: * Harry forms his four piece band with childhood friend John Wallace on bass, Ron Palmer on guitar, and Tim Scott on cello. * First studio album Heads and Tales is released...)
Harry forms his four piece band with childhood friend John Wallace on bass, Ron Palmer on guitar, and Tim Scott on cello.
First studio album Heads and Tales is released.
Second studio album Sniper and Other Love Songs is released.
Retrieved from "https://anyoldkindofday.com/index.php?title=1972&oldid=9"


1. The customer installed SystemReporter on a Microsoft Windows 2008R2 English version with German package. Also the customer registered the 5500V3 storage to SystemReporter and Collect switch was on.
2. The version of 5500V3 storage and Systemreporter are both V300R003C00.
3. But most of the performance statistics graph displayed as "No date".
Only LUN PRIORITY statistics graph has data.
1. Check and find that the performance Monitoring function is enabled on storage. Also the real-time performance statistics graph can displayed normally.
2. Check the configuration of SystemReporter is all okay as Issue description.
3. Try to restart SystemReporter, but not work.
4. Collect SystemReporter logs and temporary performance data files from the Windows server. The procedure: Go to the disk partition which installed SystemReporter and find the directory named as "Runtime". Then collect logs including: ./logs; ./TomcatXXX/logs; ./LegoRuntime/logs; ./LegoRuntime/TempPerf.
5. Check the temporary performance data files (in LegoRuntime/TempPerf) and find many of them was lost. Each of the file named as "save_XXXX-realtimedata.sql" represent a performance statistics item. As below, we can find there're just 5 kinds of items.
6. Since some of the performance statistics data can be analyzed correctly, we need to analyze ISM logs(in LegoRuntime/ISM).
We can find many error messages as below(search the critical words as "ERROR: extra data after").
So, we can confirm that the performance data was lost because SystemReporter can't analyze the performance data correctly. There's extra unexpected column in data files.
1. SystemReporter get the performance statistics data files from storage and import it into his own database. Since the database of storage and SystemReporter are different. So, SystemReporter need to analyze these performance data and write to temporary excel file(.CSV) in TempPerf directory, then import into (Guass)database in SystemReporter.
2. Usually, CSV files use comma(,) as separator. In the meanwhile, sometimes, performance statistics data like average IO size need to transfer from Byte to KB for the uniformdisplay. So, The original value need to be divided as 1000 and reserve 3 decimal points. SystemReporter calls DecimalFormat of JDK to implement this transformation.
3. Unfortunately, DecimalFormat will configure the transfer format according to the language of operating system. And, In European language operating systems, the decimal point should save as comma(,) instead of dot(.). For example,value like 1.234 will be stored as 1,234. This may obviously impact SystemReporter import data from CSV files. For example, we expected as 10 colums but we get 11 or even more colums from CSV file. In this case, SystemReporter can't successfully import these data into database and display "No data" in portal.
1. Login the Windows server which install SystemReporter, then open Regedit in command line.
2. Open item "HKEY_LOCAL_MACHINE->SOFTWARE->Wow6432Node->Apache Software Foundation->Procrun 2.0->LEGOService->Parameters->Java->Options" as below. Then, add a new line of "-Duser.language=en".
3. Shutdown SystemReporter and start it again.
1. SystemReporter has many deployment restrictions, please refer to product document carefully.
2. We still recommend to check storage performance statistics first when you encounter issue of SystemReporter like this case.


Have you ever wanted to go on a mission/humanitarian trip, offering a "hand up" to those less fortunate?
If so, why not join David and Brenda as they once again travel to the African nation of Uganda, to offer a "hand up" as well as a serving opportunity. This mission/humanitarian trip will stretch you in many ways and out of your regular comfort zone, that is enjoyed here in Canada.
This outreach opportunity begins with a flight from North America to Amsterdam, The Netherlands.
Arrive Amsterdam with connecting flight into Entebbe, Uganda. Evening arrival and transfer to hotel for the night.
Travel to the Jinga Region. Jinja is a town in southern Uganda, on the shore of Lake Victoria, the source of the Nile. Various serving projects including hands-on projects such as school projects, water projects, agricultural projects and much more.
Travel across the Equator and into Masaka for the next 5 nights. Masaka District is a district in Central Uganda, situated about 37 kms away from the equator towards the south. Various serving projects including hands-on projects such as school projects, water projects, agricultural projects and much more.
Travel back to Entebbe for the evening flight into Amsterdam.
Arrive Amsterdam with connecting flight back to North America.
For more information, contact David and/or Brenda Layden.


So Saturday. I had a blast, the kids had a blast and Becca was on fire! This shoot was all about bringing to life Becca's dream to open a non-profit urban horse ranch for kids.
Becca and I headed up to the ranch where she keeps her white arabian stallion. This horse is STUNNING. We rolled past the large gate, through the individual pastures full of statuesque horses and up the dirt driveway to the main barn. The property is manicured to perfection. Tall trees surrounded the outskirts, each pasture had acres of lush green grass and little yellow flowers between wooden fences. My 8 year old self was doing flips I was so excited to be there. I've always had an unjustified obsession with horses. My parents can attest.
On the other hand Rebecca Durr has been riding for 32 years. Her mom and her come up to Gig Harbor every weekend to spend time with their stallion who won countless competitions in his day. He's retired now at the ripe age of 23, but still looks flawless (the mares on the property still go WILD when he walks by, WILD). On top of being an equestrian, Becca has been volunteering with children for the last 8 years. One particular relationship with a little girl in the community has inspired to do more. She's working toward opening an urban horse camp to provide healing and mentorship to kids. She's named it Hello Heaven Ranch. Her hope is through fund raising, the greater Seattle and Bellevue community will sponsor children in need to spend time engaging with the horses and benefiting from a 1:1 mentorship program. I've known Becca for over 5 years and witnessing her around the kids on Saturday made it so abundantly clear to me this is what she was born to do.
If you are interested in supporting her mission, she has a Go Fund Me account here. As a biased friend I recommend you check it out. Even to just spread the word!


Because the banking sector appears to be doing just fine after the financial crisis of the late aughts.
Wall Street's bonus pool climbed 3% to a staggering $28.5 billion in 2014, despite profits falling 4.5% to $16 billion. Those bonuses amount to nearly double the total income earned by Americans working for minimum wage or less, according to some estimates.
Though it's never been a bad look if you can get it, 2014 was a particularly good year to work on Wall Street. The New York State Comptroller's office revealed that the total bonus pool for Wall Street employees rose 3% to $28.5 billion, or an average of $172,860 for each of 167,800 employees. The news comes despite the fact that profits from broker-dealer operations of the New York Stock Exchange member firms fell 4.5% to just ("just") $16 billion.
The disparity may have you scratching your head, but the numbers themselves don't tell the full story. The banking industry is doing well, having added 2,300 jobs in New York City (the industry's first expansion since 2011). While banks appear as adept at making money as ever, settlements from the 2008 financial crisis are what's undermining profits. Bank of America alone is on the hook for $16.7 billion as a result of the boondoggle, while Wall Street stalwart Goldman Sachs agreed to buy back $3.15 billion worth of mortgage-backed securities.
Despite that, trading and investment banking aren't the revenue generators they once were, thanks to imposed limits on how much banks can use leverage to fund operations. Basically, they can't gamble with (quite as much) borrowed money the way they did a decade ago. As a result, JPMorgan Chase & Co. saw trading revenue decline by 8% last year, along with other banks. They've made up for it by reducing staff and cutting costs.
To get an idea of just how much money $28.5 billion is, a report from the Institute for Policy Studies estimates that the total income earned by workers paid minimum wage or less is somewhere around $14 billion - less than half of the Wall Street bonus pool.
Large bonuses have long been a compensation model for Wall Street firms. It's a good way to attract talent from tech and management consulting firms, who typically offer a higher, more stable base salary with little (if any) incentive pay. Still, when the amount of play money paid to the ibanker set is more than double what the lowest-earning workers in America made combined, something ain't right.
Ask The Big Question: Isn't it about time we had a serious conversation about raising the minimum wage?
Disrupt Your Feed: I have no problem with those who generate the most revenue receiving the highest compensation.
Drop This Fact: For every job the financial sector adds, two more are created in other industries.
How Much Does The Average CEO Make Compared To The Average American?


text:
New Hawaiian land snail species discovered
Posted on July 28, 2020 by petrel41
From the Florida Museum of Natural History in the USA:
New native Hawaiian land snail species discovered, first in 60 years
Summary: Auriculella gagneorum, a small candy-striped snail from Oahu's Waianae Mountains, represents the first new species of a living Hawaiian land snail described in 60 years.
Scientists have described a new native Hawaiian land snail species, sounding a rare, hopeful note in a story rife with extinction.
Pacific island land snails are among the world's most imperiled wildlife, with more recorded extinctions since 1600 than any other group of animals. Hawaii's once-teeming land snail scene of more than 750 species has shrunk by more than half, ravaged by habitat loss and invasive species such as rats, Jackson's chameleons and the carnivorous rosy wolf snail.
Auriculella gagneorum, a small candy-striped snail from Oahu's Waianae Mountains, represents the first new species of a living Hawaiian land snail described in 60 years. The species "brings that little glimmer of hope that this isn't all a depressing story," said the study's lead author Norine Yeung, malacology curator at the Bishop Museum.
A team of researchers found A. gagneorum during a large-scale, decade-long survey of land snails that spanned 1,000 sites throughout the Hawaiian Islands. They then used the Bishop Museum's collection of land snails to match individuals collected during the survey to unidentified specimens from the 1940s.
"This is a happy story where we discovered a snail that is still around," Yeung said. "There are so many things in our collection that we can no longer find in the wild. But in this snail's case, we can finally put a name to it and describe it, which is huge for the conservation of this species."
The tree-dwelling snail shows pronounced variation in coloring, from burnished tiger's-eye patterning to dramatic sable and white stripes. At less than two-tenths of an inch long, "you might be able to fit a dozen on your fingernail," said study co-author John Slapcinsky, collection manager of invertebrate zoology at the Florida Museum of Natural History.
Land snails play a crucial role as decomposers and fungivores in Hawaii's ecosystems, essentially "our first recyclers," Yeung said.
The researchers deposited a selection of A. gagneorum snails in Hawaii's captive breeding program, with the goal of increasing their numbers and returning them to the wild. They named the species in honor of the late Hawaiian naturalists Betsy and Wayne Gagne, who were "powerhouses for conservation," Yeung said. "They cared about the whole ecosystem, whether it was a tiny little bug or plants or one of Hawaii's charismatic, beautiful forest birds."
The team's survey also produced new records of three snail species last documented in the 1950s and others feared extinct, as well as nearly 30 new species. The researchers failed to find two species, A. auricula and A. minuta, whose populations may have died out.
But while the status of Hawaii's land snails is dire, it's too early to despair, said Slapcinsky, who gamely struggled through skin-ripping raspberry thickets and nearly slid off a cliff while sieving for snails.
"People used to think it wasn't even worth studying Hawaiian land snails because they were all extinct. Now we know they're not," he said. "If we work at it, there's still a chance to do something about it. That's why it's important to be out there surveying, finding the remaining populations of these species."
Yeung said previous reports estimated that 90% of Hawaii's land snails were extinct, but the team's survey shows that about 300 species still survive in remote, isolated parts of the Hawaiian Islands.
"The challenge now is trying to identify all of these because we have lost a lot of experts, and a lot of these snails are super tiny," she said. "If you're not a trained malacologist, the small brown snails might all look the same to you. But when you take a closer look at their shells, bodies and genetics, these little things are all different and can be tied to different valleys and ridges. When one species turns out to be three, we can run into problems with conservation."
The researchers used a combination of physical characteristics and DNA to describe the new species. While its shell size and shape mimic A. perpusilla snails from the Koolau Range on east Oahu, molecular evidence shows A. gagneorum is more closely related to A. tenella, a slender, high-spired snail from the Waianae Range in the west.
A. gagneorum belongs to a long-overlooked group of snails known as Auriculellinae. The majority of attention and conservation efforts have focused on the larger, more colorful snails in the subfamily Achatinellinae, Lonesome George, the last known snail of its species, being the most famous example. While an entire genus of Achatinellinae is listed under the Endangered Species Act, the smaller, less obvious snails in the subfamily Auriculellinae remain understudied and unprotected, Slapcinsky said.
"We're not bemoaning that Achatinellinae are getting attention. They do need help," he said. "What we're concerned about is that these other things are getting ignored."
Meanwhile, the team pushes forward in its analysis of a decade's worth of data and many new species descriptions. Afterwards, the researchers can turn their attention to the evolution and ecology of Hawaii's land snails, traditionally considered by native Hawaiians as important symbols and good omens that represent change, romance and song.
"The diversity is amazing, the species are amazing, and there are so many evolutionary stories you could tell," Yeung said, describing malacology as a "wide-open frontier."
"But first we have to identify these snails. If you ask about their habitat and life history, it's like, I wish I could tell you. Right now, I can just tell you this is a different species and put a name on it. It's hard work, but it's so gratifying."
The researchers published their findings in ZooKeys.
This entry was posted in Biology, Invertebrates and tagged Hawaii by petrel41. Bookmark the permalink.


text:
Сделано в России:
 «Сделано в России» — маркировка продукции, изготовленной в России.
 «Сделано в России» — альбом группы «Ария».
 «Сделано в России» — песня российского рэпера Oxxxymiron.


text:
AirFest, if it happens, will be in August
Feb 27, 2009 at 12:01 AM Feb 27, 2009 at 3:32 PM
Chicago Rockford International Airport officials are "90 percent confident" they'll host an AirFest this year, Executive Director Bob O'Brien said. If so, it will be in mid- to late August and just two days long.
The decision to host the annual festival likely hinges on whether the airport gets a headlining military performer. Officials are in talks with a performer, not the Blue Angels or Thunderbirds, and believe they're close to confirmation. A decision could happen in March or early April.
Airport officials are budgeting for only a Saturday and Sunday show, eliminating the Friday night performances because of the recession. Still, if weather cooperates, they say turnout could be at least as much as last year's 75,000 to 100,000 attendance figure.


Living in Central Florida gives use three growing seasons. The growing seasons for us are Spring, Fall, and Winter. The Summer is just too hot for most vegetables to grow but we still get tropical fruits and Avocados during Summer. Right now we have our Fall season vegetables growing. We still have persimmons ripening and two bunches of bananas growing.
We have 30 heirloom tomato plants growing right now in different parts of the garden.
As well as Kale seedlings.
Happy gardening to all of you.


Boasting unspoilt, unbleached coral reefs teeming with marine life, diving in Diani is a macro lover's dream.
If you're an advanced diver, you can enjoy plunging to depths of 18 metres at Msambweni dive site – camera in tow – to witness a staggering array of aquatic life parading past.
If you're hoping to catch a shot of one or two rarer fish, you're in for a treat at Galu reef. Suitable for all levels of diving experience, Galu reef is home to attractive corals and rarer finds from elusive sea horses to ghost pipe fish, frog fish, flying gurnards, ghost morays and delicate leaf fish.
One of the top dive sites in Kenya, Funguo wreck is an unmissable experience with a rich variety of exotic marine life from batfish and barracuda to nudibranch, frogfish grouper and Scorpion fish.
Get the Go-Pro ready, charge the camera and stand in awe of Kenya's incredible marine life.


The security services of the Interior Ministry have continued to deploy in Cairo and the other governorates as part of a larger plan to secure the New Year and Christmas celebrations.
Security forces have imposed security barriers around churches, set up roadblocks in the streets leading to them, and tightened inspection procedures for visitors and pedestrians in coordination with the administrative security of each church.
The forces also checked on the activation of metal detector gates and CCTV cameras at churches.
The security services have deployed patrols at traffic axes, highways and public squares to be able to immediately intervene in case any emergency occurs. They have also set up security checkpoints near tourist destinations, public parks, hotels and malls.
Security leaders within the ministry supervised the security plans in the field, where all security directors and their assistants conducted inspection tours in their governorates to ensure the implementation of security plans.
The public security and national security sectors have formed working groups at various levels to implement security plans, which include the deployment of secret police in gathering places to monitor saboteurs before committing any crime and counter any attempts to disturb citizens.
Firefighters, bomb squads, traffic police, public and national security services, and criminal investigation units are deployed in front of churches, places of worship, streets leading to them, embassies, consulates and all vital places in order to secure a safe environment for citizens during the New Year and Christmas celebrations.
In Luxor, the security forces intensified their readiness in the vicinity of churches and tourist areas to implement plans to secure tourist and archaeological areas, places of worship, roads, and public squares.
Undersecretary of the Health Ministry in Luxor al-Sayed Abdel Gawad reviewed the necessary preparations in emergency clinics and medical staff to receive emergency cases.
In Minya, the security services deployed checkpoints in the archaeological and tourist areas, churches, and hotels, which have witnessed high demand of tourists to celebrate the New Year.
In Sohag, the security services completed their preparations to secure churches and public facilities in the various cities of the governorate. They also intensified their presence in a number of important streets in Sohag.
The security director of Sohag, Hisham al-Shafei, said that the forces were alerted to take the necessary measures towards stopping cars, motorcycles or vehicles next to churches and monasteries, and to notify supervisors if any suspicious cars or foreign objects are seen.
In 6th of October City in Giza, the security services have tightened their procedures in the vicinity of the Media Production City by means of explosive detection devices and the use of police dogs and secret police.
In Ismailia, Assistant Interior Minister for the cities of the Suez Canal Maj. Gen. Amjad Abdel-Fattah inspected the security points along the Suez Canal and the security services stationed at churches after being combed by explosives experts.
Abdel-Fattah pointed out that he decided to tighten security measures and intensify them at a number of points, including the Ahmed Hamdy tunnel in Suez, pointing out that the Suez Canal is a red line that must remain secure. He therefore increased the number of metal detectors and bomb squads at all points to secure the waterway.