text:
\section{Introduction}
Trichomoniasis (or ``trich''), caused by infection with a motile, flagellated protozoan parasite called Trichomonas vaginalis (TV), is likely the most common, non-viral sexually transmitted infection (STI) worldwide.
According to statistics, there are more than 160 million new cases of trichomoniasis in the world each year, with a similar probability of males and females~\cite{harp2011trichomoniasis,vos2016global}.
A number of studies have shown that Trichomonas vaginalis infection is associated with an increased risk of infection with several other STIs, including human papillomavirus (HPV) and human immunodeficiency virus (HIV)~\cite{workowski2012sexually}. The high prevalence of Trichomonas vaginalis infection globally and the frequency of co-infection with other STIs make trichomoniasis a compelling public health concern.

Automatic Trichomonas vaginalis segmentation (TVS) is crucial to the diagnosis of Trichomoniasis.
Recently, deep learning methods have been widely used for medical image segmentation~\cite{hesamian2019deep} and made significant progress, such as brain region and tumor segmentation~\cite{havaei2017brain,zhao2018deep}, liver and tumor segmentation~\cite{zhou2018unet++,tang2020two}, polyp segmentation~\cite{brandao2017fully,fan2020pra,ji2021progressively}, lung infection segmentation~\cite{fan2020inf,liu2021covid} and cell segmentation~\cite{ronneberger2015u,li2021mvdi25k,zhang2021multi}.
Most of these methods are based on the encoder-decoder framework, such as U-Net\cite{ronneberger2015u} and its variants~\cite{siddique2021u} (\textit{e.g.}, U-Net++~\cite{zhou2018unet++}, Unet 3+~\cite{huang2020unet}), and PraNet~\cite{fan2020pra}, or are inspired by some commonly-used natural image segmentation models, \textit{e.g.}, fully convolutional networks (FCN)~\cite{zhao2018deep} and DeepLab~\cite{tang2020two}.
These works have shown great potentials in the segmentation of various organs and lesions from different medical imaging modalities.
To our knowledge, however, deep learning techniques have not yet been well-studied and applied for TVS in microscope images, due to three key factors:
1) The large variation in morphology (\textit{e.g.}, size, appearance and shape) of the Trichomonas is challenging for detection. Besides, Trichomonas are often captured out of focus (blurred appearance) or under occlusion due to their motility, which aggregates the difficulty of accurate segmentation.
2) The high appearance similarity between Trichomonas and other cells (\textit{e.g.}, leukocyte) makes them easily confused with complex surroundings.
Most importantly, 3) the lack of large-scale annotated data restricts the performance of deep models that rely on sufficient training data, thereby hindering further research in this field.
It is worth noting that the above factors also reflect the clear differences in object segmentation between the microscope images of Trichomonas in our work and conventional cells (\textit{e.g.}, HeLa cells~\cite{ronneberger2015u} and blood cells~\cite{li2021robust}).
Furthermore, we noted that recently Wang et al.~\cite{wang2021trichomonas} proposed a two-stage model for video-based Trichomonas vaginalis detection, which utilizes video motion cues (\textit{e.g.}, optical flow) to greatly reduce the detection difficulty. The difference is that this work focuses on image-based Trichomonas vaginalis detection, without motion information, which increases the difficulty of detection. As we know, no one has set foot on this field so far.
Hence, accurate TV segmentation remains a challenging and under-explored task.

To address above issues, we first elaborately construct a novel large-scale microscope images dataset exclusively designed for Trichomonas Vaginalis segmentation, named \textit{TVMI3K}.
Moreover, we develop a simple but effective deep neural network, termed \textit{TVNet}, for TVS.
In a nutshell, our main contributions are threefold: (1) We carefully collect \textbf{\textit{TVMI3K}, a large-scale dataset for TVS}, which consists of 3,158 microscopic images covering Trichomonas of various appearances in diverse backgrounds, with high-quality annotations of object-level labels, object boundaries and challenging attributes. To our knowledge, this is the first large-scale dataset for TVS that can serve as a catalyst for promoting further research in this field in the deep learning era. (2) We proposed \textbf{a novel deep neural network, termed \textit{TVNet}}, which enhances high-level feature representations with edge cues in a high-resolution fusion (HRF) module and then excavates object-critical semantics based on foreground-background attention (FBA) module under the guidance of coarse location map for accurate prediction. (3) Extensive experiments show that our method achieves superior performance and outperforms various cutting-edge segmentation models both quantitatively and qualitatively, making it a promising solution to the TVS task.
The dataset, results and models will be publicly available at: \href{https://github.com/CellRecog/cellRecog}{https://github.com/CellRecog/cellRecog}.

\begin{figure}[t]
    \centering
    \includegraphics[width=.95\textwidth]{./Imgs/sample02.pdf}
    \caption{Various examples of our proposed \textit{TVMI3K}. We provide different annotations, including object-level masks, object edges and challenging attributes. We use red boxes to mark Trichomonas and green boxes to mark leukocyte on images for better visualization. Leukocyte shows high similarity with Trichomonas.}
    \label{sample02}
\end{figure}

\section{Proposed Dataset}

To facilitate the research of TVS in deep learning era, we develop the \textit{TVMI3K} dataset, which is carefully collected to cover TV of various appearances in diverse challenging surroundings, \textit{e.g.}, large morphological variation, occlusion and background distractions. Examples can be seen in Fig.~\ref{sample02}.

\subsection{Data Collection}

To construct the dataset, we first collect 80 videos of Trichomonas samples with resolution 3088$\times$2064 from more than 20 cases over seven months. The phase-contrast microscopy is adopted for video collection, which captures samples clearly, even unstained cells, making it more suitable for sample imaging and microscopy evaluation than ordinary light microscopy. We then extract images from these videos to build our \textit{TVMI3K} dataset, which finally contains 3,158 microscopic images (2,524 Trichomonas and 634 background images).
We find that videos are more beneficial for data annotation, because objects can be identified and annotated accurately according to the motion of Trichomonas. Thus, even unfocused objects can also be labeled accurately.
Besides, to avoid data selection bias, we collect 634 background images to enhance generalization ability of models.
It should be noted that images are collected by the microscope devices independently, and we do not collect any patient information, thus the dataset is free from copyright and loyalties.

High-quality annotations are critical for deep model training~\cite{li2021systematic}. During the labeling process, 5 professional annotators are divided into two groups for annotation and cross-validation is conducted between each group to guarantee the quality of annotation. We label each image with accurately object-level masks, object edges and challenging attributes, \textit{e.g.}, occlusions and complex shapes.
Attribute descriptions are shown in Tab.~\ref{Tab:Att}.

\begin{table}[t]
\caption{Attribute Descriptions of Our \textit{TVMI3K}~Dataset}
\centering
\label{Tab:Att}
\begin{tabular}{cp{1.3cm}<{\centering}l}
\toprule
 & Attr.  &Descriptions  \\
\midrule

\multirow{3}*{
\rotatebox{90}{Image-}}
\multirow{3}*{
\rotatebox{90}{level}}
& \textbf{MO} & \textit{Multiple Objects}. Number of objects in each image $\geq$ 2 \\
& \textbf{SO} & \textit{Small Objects}. The ratio of object area to image area $\leq$ 0.1 \\
& \textbf{OV} & \textit{Out of view}. Incomplete objects clipped by image boundary \\

\hline

\multirow{4}*{
\rotatebox{90}{Object-}}
\multirow{4}*{
\rotatebox{90}{level}}
& \textbf{CS} & \textit{Complex Shape}. In diverse shapes with tiny parts (\textit{e.g.}, flagella)  \\
& \textbf{OC} & \textit{Occlusions}. Object is partially obscured by surroundings \\
& \textbf{OF} & \textit{Out-of-focus}. Ghosting due to poor focus \\
& \textbf{SQ} & \textit{Squeeze}. The object appearance changes when squeezed \\

\bottomrule
\end{tabular}
\end{table}

\subsection{Dataset Features}

~~~~~$\bullet$ \emph{Image-level Attributes.} As listed in Tab.~\ref{Tab:Att}, our data is collected with several image-level attributes, \textit{i.e.}, multiple objects (MO), small object (SO) and out-of-view (OV), which are mostly caused by Trichomonas size, shooting distance and range.
According to statistics, each image contains $3$ objects averagely, up to $17$ objects. The size distribution ranges from $0.029\%$ to $1.179\%$, with an average of $0.188\%$, indicating that it belongs to a dataset for tiny object detection.

$\bullet$ \emph{Object-level Attributes.} Trichomonas objects show various attributes, including complex shapes (CS), occlusions (OC), out-of-focus (OF) and squeeze (SQ), which are mainly caused by the growth and motion of trichomonas, highly background distraction (\textit{e.g}. other cells) and the shaking of acquisition devices.
These attributes lead to large morphological differences in Trichomonas, which increase the difficulty of detection. In addition, there is a high similarity in appearance between Trichomonas and leukocyte, which can easily confuse the detectors to make false detections. Examples and the details of object-level attributes are shown in Fig.~\ref{sample02} and Tab.~\ref{Tab:Att} respectively.

$\bullet$ \emph{Dataset Splits.} To provide a large amount of training data for deep models, we select 60\% of videos as training set and 40\% as test set. In order to be consistent with practical applications, we select data according to the chronological order of the sample videos from each case instead of random selection, that is, the data collected first for each case is used as the training set, and the data collected later is used as the test set.
Thus, the dataset is finally split into 2,305 images for training and 853 images for testing respectively. Note that 290 background images in the test set are not included in our test experiments.

\section{Method}
\label{method}

\begin{figure}[t]
    \centering
    \includegraphics[width=0.95\textwidth]{./Imgs/tvnet.png}
     \caption{Overview of our proposed \emph{TVNet}, which consists of high-resolution fusion (HRF) module and foreground-background attention (FBA) module. See $\S$~\ref{method} for details.}
    \label{net12}
\end{figure}

\subsection{Overview}
Fig.~\ref{net12} illustrates the overall architecture of the proposed \emph{TVNet}.
Specifically, for an input Trichomonas image $I$, the backbone network Res2Net~\cite{gao2019res2net} is adopted to extract five levels of features $\{f_i\}_{i=1}^5$. Then we further explore the high-level features (\textit{i.e.}, $f_3\sim f_5$ in our model) to effectively learn object feature representation and produce object prediction. As shown in Fig.~\ref{net12}, we first design a high-resolution fusion (HRF) module to enhance feature representation by integrating high-resolution edge features and get three refined features ($\{f_i^{'}\}_{i=3}^5$).
Next, we introduce the neighbor connection decoder (NCD)~\cite{fan2021concealed}, a new cutting-edge decoder component which improves the partial decoder component~\cite{wu2019cascaded} with neighbor connection, to aggregate these three refined features and generate the initial prediction map $P_6$. It can capture the relatively coarse location of objects so as to guide the following object prediction. Specially, $\{P_i\}_{i=3}^5$ represents the prediction map of the $i$ layer, which corresponds to the $i$-layer in $\{f_i^{'}\}_{i=3}^5$.
Finally, we propose a foreground-background attention (FBA) module to excavate object critical cues by exploring semantic differences between foreground and background and then accurately predict object masks in a progressive manner.

\subsection{High-resolution Fusion Module}

With the deepening of the neural network, local features, such as textures and edges, are gradually diluted, which may reduce the model's capability to learn the object structure and boundaries.
Considering too small receptive field and too much redundant information of $f_1$ feature, in this paper, we design a high-resolution fusion (HRF) module which adopts the the low-level $f_2$ feature to supplement local details for high-level semantic features and boost feature extraction for segmentation. To force the model to focus more on the object edge information, we first feed feature $f_2$ into a $3\times 3$ convolutional layer to explicitly model object boundaries with the ground-truth edge supervision.
Then we integrate the low-level feature $f_2$ with the high-level features ($f_3\sim f_5$) to enhance representation with channel and spatial attention operations~\cite{woo2018cbam,chen2017sca}, denoted as:
\begin{equation}
\left\{
\begin{aligned}
\Tilde{f}_i & = f_i + \mathcal{G} \left( Cat(f_i;~ \mathcal{G}(\delta_\downarrow^2 (f_2))) \right), i\in \{3,...,5\}, \\
\Tilde{f}_i^{'} & = M_c(\Tilde{f}_i) \otimes \Tilde{f}_i, \\
f_i^{'} & = M_s(\Tilde{f}_i^{'}) \otimes \Tilde{f}_i^{'},
\end{aligned}
\right.
\end{equation}
where $\delta_\downarrow^2(\cdot)$ denotes $\times 2$ down-sampling operation. $\mathcal{G}(\cdot)$ is a $3\times 3$ convolution layer, and $Cat$ is concatenation operation. $M_c(\cdot)$ and $M_s(\cdot)$ represent channel attention and spatial attention respectively. $\otimes$ is the element-wise multiplication operation. After that, a 1$\times$1 convolution is used to adjust the number of channels to ensure the consistent output of each HRF.

\subsection{Foreground-Background Attention Module}
To produce accurate prediction from the fused feature ($f_3^{'}\sim f_5^{'}$) progressively in the decoder, we devise a foreground-background attention (FBA) module to filtrate and enhance object related features using region sensitive map derived from the coarse prediction of the previous layer.
For the fused feature $\{f_i^{'}\}_{i=3}^5$, we first decompose the previous initial prediction $P_{i+1}$ into three regions, \textit{i.e.}, strong foreground region ($\mathcal{F}_{i+1}^{1}$), weak foreground region ($\mathcal{F}_{i+1}^{2}$) and background region ($\mathcal{F}_{i+1}^3$). The decomposition process can refer to~\cite{sun2021deep}. Then each region is normalized into [0,1] as a region sensitive map to extract the corresponding features from $f_i^{'}$.
Noted that $\mathcal{F}^{1}$ provides the location information, and $\mathcal{F}^{2}$ contains the object edge/boundary information. The $\mathcal{F}^3$ denotes the remaining region.

After that, the region sensitive features can be extracted from the fused feature by an element-wise multiplication operation with up-sampled region sensitive maps followed by a 3$\times$3 convolution layer. Next, these features are aggregated by an element-wise summation operation with a residual connection. It can be denoted as:
\begin{equation}
f_{i}^{out} = \sum\nolimits_{k=1}^{3}
\mathcal{G} (\delta_\uparrow^2 (\mathcal{F}_{i+1}^{k}) \otimes f_i^{'}) + f_i^{'}
\end{equation}
where $\delta_\uparrow^2(\cdot)$ denotes $\times 2$ up-sampling operation.
Inspired by~\cite{fan2021concealed}, FBA can also be cascaded multiple times to gradually refine the prediction. For more details please refer to the \textit{Supp.} In this way, FBA can differentially handle regions with different properties and explore region-sensitive features, thereby strengthening foreground features and reducing background distractions.

\section{Experiments and Results}

\subsection{Experimental Settings}

\textbf{Baselines and Metrics.} We compare our \emph{TVNet}~with 9 state-of-the-art medical/natural image segmentation methods, including U-Net++~\cite{zhou2019unetplusplus}, SCRN~\cite{9010954}, U$^2$Net~\cite{qin2020u2}, F$^3$Net~\cite{f3net}, PraNet~\cite{fan2020pra}, SINet~\cite{SINet}, MSNet~\cite{MSNet}, SANet~\cite{wei2021shallow} and SINet-v2~\cite{fan2021concealed}. We collect the source codes of these models and re-train them on our proposed dataset.
We adopt 7 metrics for quantitative evaluation using the toolboxes provided by~\cite{fan2020pra} and~\cite{wei2021shallow}, including structural similarity measure ($S_\alpha$, $\alpha$ = $0.5$)~\cite{fan2017structure}, enhanced alignment measure ($E_\phi^{max}$)~\cite{fan2018enhanced}, $F_\beta$ measure ($F_\beta^w$ and $F_\beta^{mean}$)~\cite{margolin2014evaluate}, mean absolute error (MAE, $\mathcal{M}$)~\cite{perazzi2012saliency}, Sorensen-Dice coefficient (mean Dice, mDice) and intersection-over-union (mean IoU, mIoU)~\cite{fan2020pra}.

\noindent\textbf{Training Protocols.}
We adopt the standard binary cross entropy (BCE) loss for edge supervision, and the weighted IoU loss~\cite{f3net} and the weighted BCE loss~\cite{f3net} for object mask supervision.
During the training stage, the batch size is set to 20. The network parameters are optimized by Adam optimizer~\cite{kingma2014adam} with an initial learning rate of 0.05, a momentum of 0.9 and a weight decay of 5e-4.
Each image is resized to 352$\times$352 for network input. The whole training time is about 2 hours for 50 epochs on a NVIDIA GeForce RTX 2080Ti GPU.

\begin{table*}[t
\caption{Quantitative comparison on our \textit{TVMI3K}~dataset. ``$\uparrow$'' indicates the higher the score the better. ``$\downarrow$'' denotes the lower the score the better.}
\centering
\label{tbl1}
\begin{tabular}{l|c||c|c|c|c|c|c|c}
  \toprule
  \rowcolor{gray!25}
   Methods & Pub.
               &$S_\alpha\uparrow$
              &$E_\phi^{max}\uparrow$
              &~~$F_\beta^w\uparrow$~~
              &$F_\beta^{mean}\uparrow$
              &$\mathcal{M}\downarrow$
              &mDice$\uparrow$
              &mIoU$\uparrow$
               \\
  \midrule
     UNet++~\cite{zhou2019unetplusplus} & TMI19
         &0.524
         &0.731
         &0.069
         &0.053
         &0.006
         &0.004
         &0.003
        \\

     SCRN~\cite{9010954} &ICCV19
         &0.567
         &0.789
         &0.145
         &0.254
         &0.011
         &0.201
         &0.135
         \\

     U$^2$Net~\cite{qin2020u2} &PR20
         &0.607
         &0.845
         &0.209
         &0.332
         &0.013
         &0.301
         &0.209
         \\

     F$^3$Net~\cite{f3net}  &AAAI20
         &\textbf{0.637}
         &0.809
         &0.320
         &0.377
         &0.005
         &0.369
         &0.265
         \\

     PraNet~\cite{fan2020pra} &MICCAI20
         &0.623
         &0.792
         &0.300
         &0.369
         &0.006
          &0.328
          &0.230
          \\

     SINet~\cite{SINet}  &CVPR20
         &0.492
         &0.752
         &0.010
         &0.113
         &0.104
         &0.095
        &0.061
        \\
     MSNet~\cite{MSNet} &MICCAI21
         &0.626
         &0.786
         &0.321
         &0.378
         &0.005
         &0.366
         &0.268
        \\
     SANet~\cite{wei2021shallow}  &MICCAI21
         &0.612
         &0.800
         &0.289
         &0.361
         &0.006
         &0.338
         &0.225
        \\

  SINet-v2~\cite{fan2021concealed}  &PAMI21
         &0.621
         &0.842
         &0.309
         &0.375
         &0.005
         &0.348
         &0.245
         \\
         \midrule
  \textbf{Ours} &-
         &0.635
         &\textbf{0.851}
         &\textbf{0.343 }
         &\textbf{0.401}
         &\textbf{0.004}
         &\textbf{0.376}
         &\textbf{0.276}
         \\
    \toprule
    \end{tabular}
\end{table*}

\subsection{Comparison with State-of-the-art}
\textbf{Quantitative comparison.}
Tab.~\ref{tbl1} shows the quantitative comparison between our proposed model and other competitors on our \textit{TVMI3K} dataset. It can be seen that our TVNet significantly outperforms all other competing methods on all metrics except $S_\alpha$ which is also on par with the best one.
Particularly, our method achieves a performance gain of 2.2\% and 2.3\% in terms of $F_\beta^w$ and {\footnotesize $F_\beta^{mean}$}, respectively.
This suggests that our model is a strong baseline for TVS.

\noindent\textbf{Qualitative comparison.} Fig.~\ref{netresult02} shows some representative visual results of different methods. From those results, we can observe that TVNet can accurately locate and segment Trichomonas objects under various challenging scenarios, including cluttered distraction objects, occlusion, varied shape and similarity with other cells.
In contrast, other methods often provide results with a considerable number of missed or false detection, or even failed detection.

\begin{figure}[t]
\centering
    \includegraphics[width=0.95\textwidth]{./Imgs/results.pdf}
     \caption{Visual comparison of different methods. Obviously, our method provides more accurate predictions than other competitors in various challenging scenarios.}
    \label{netresult02}
\end{figure}

\begin{table*}[t]
	\centering
	\caption{Ablation study for TVNet on the proposed \textit{TVMI3K}~datasets.}
	\label{Tab:ablation}
	\setlength\tabcolsep{4pt}
		\begin{tabular}{cccc||cccccc}
			\toprule
			\rowcolor{gray!25}
			No. & Backbone & HRF &FBA
			&$S_\alpha\uparrow$
              &~~$F_\beta^w\uparrow$~~
              &$F_\beta^{mean}\uparrow$
              &$\mathcal{M}\downarrow$
              &mDice
              &mIoU\\
			\midrule
			a
			& \checkmark& &
			&0.593
			&0.234
			&0.302
			&0.005
			&0.251
			&0.163
			\\
			\hline
			b& \checkmark &\checkmark&
			&0.619
			&0.291
			&0.357
			&0.005
			&0.328
			&0.228
			\\
			\hline

			c& \checkmark&&\checkmark
			&0.623
			&0.258
			&0.330
			&\textbf{0.004}
			&0.271
			&0.185
			\\
			\hline

		 d& \checkmark&\checkmark&\checkmark
		 &\textbf{0.635}
         &\textbf{0.343}
         &\textbf{0.401}
         &\textbf{0.004}
         &\textbf{0.376}
		&\textbf{0.276}\\

		\bottomrule
		\end{tabular}
\end{table*}

\subsection{Ablation Study}

\noindent\textbf{Effectiveness of HRF}. From Tab.~\ref{Tab:ablation}, we observe that the HRF module outperforms the baseline model with significant improvement, \textit{e.g.}, 2.6\%, 5.7\%, 5.7\%, 7.7\% and 6.5\% performance improvement in $S_\alpha$, $F_\beta^w$ $F_\beta^{mean}$, $mDice$ and $mIoU$ metrics, respectively. This shows the fusion of local features is beneficial for object boundary localization and segmentation. Note that the adopted explicit edge supervision facilitates the model to focus more on object boundaries and enhance the details of predictions.

\noindent\textbf{Effectiveness of FBA}. We further investigate the contribution of the FBA module. As can be seen in Tab.~\ref{Tab:ablation}, FBA improves the segmentation performance by 3\%, 2.4\% and 2.8\% in $S_\alpha$, $F_\beta^w$ and $F_\beta^{mean}$, respectively. FBA enables our model to excavate object-critical features and reduce background distractions, thus distinguishing TV objects accurately.

\noindent\textbf{Effectiveness of HRF \& FBA}. From Tab.~\ref{Tab:ablation}, the integration of HRF and FBA is generally better than other settings (a$\sim $c). Compared with the baseline, the performance gains are 1.2\%, 5.2\% and 4.4\% in $S_\alpha$, $F_\beta^w$ and $F_\beta^{mean}$ respectively. Besides, our \textit{TVNet} outperforms other recently proposed models, making it an effective framework that can help boost future research in TVS.

\noindent\textbf{Model Complexity}. We observe that the number of parameters and FLOPs of the proposed model are $\sim$155M and $\sim$98GMac, respectively, indicating that there is room for further improvement, which is the focus of our future work.

\section{Conclusion}
This paper provides the first investigation for the segmentation of Trichomonas vaginalis in microscope images based on deep neural networks. To this end, we collect a novel large-scale, challenging microscope image dataset of TV called \textit{TVMI3K}.
Then, we propose a simple but effective baseline, \emph{TVNet}, for accurately segmenting Trichomonas from microscope images.
Extensive experiments demonstrate that our \emph{TVNet}~outperforms other approaches.
We hope our study will offer the community an opportunity to explore more in this field.

\bibliographystyle{splncs04}

redpajama_set_name: RedPajamaArXiv


text:
using json = nlohmann::json;
using namespace std;
using namespace aaesim::open_source;

log4cplus::Logger ThreeDOFDynamics::m_logger = log4cplus::Logger::getInstance(LOG4CPLUS_TEXT("ThreeDOFDynamics"));

ThreeDOFDynamics::ThreeDOFDynamics() {
   m_max_thrust_percent = 1.0;
   m_min_thrust_percent = 1.0;
   m_wind_velocity_east = Units::MetersPerSecondSpeed(0.0);
   m_wind_velocity_north = Units::MetersPerSecondSpeed(0.0);
   m_dynamics_state.flap_configuration = aaesim::open_source::bada_utils::FlapConfiguration::UNDEFINED;
}

AircraftState ThreeDOFDynamics::Update(const Guidance &guidance,
                                       const shared_ptr<AircraftControl> &aircraft_control) {
   return Integrate(guidance, aircraft_control);
}

AircraftState ThreeDOFDynamics::Integrate(const Guidance &guidance,
                                          const shared_ptr<AircraftControl> &aircraft_control) {
   const Units::SecondsTime dt = SimulationTime::get_simulation_time_step();

   Units::Frequency dVwx_dh, dVwy_dh;
   CalculateEnvironmentalWind(m_true_weather.east_west, m_true_weather.north_south, dVwx_dh, dVwy_dh);

   ControlCommands control_commands = aircraft_control->CalculateControlCommands(guidance,
                                                                                m_equations_of_motion_state,
                                                                                m_true_weather);

   bool perform_takeoff_roll_logic = control_commands.getFlapMode()==bada_utils::TAKEOFF &&
                                     control_commands.getTrueAirspeed() < m_bada_calculator->GetAerodynamicsInformation().take_off.V_stall;
   EquationsOfMotionStateDeriv state_deriv;
   if (perform_takeoff_roll_logic) {
      state_deriv = StatePropagationOnRunway(control_commands, guidance);
   } else {
      // First-order derivative of the state calculated by the EOM
      state_deriv = StatePropagation(dVwx_dh,
                                     dVwy_dh,
                                     aircraft_control->GetGammaGain(),
                                     aircraft_control->GetThrustGain(),
                                     aircraft_control->GetPhiGain(),
                                     aircraft_control->GetSpeedBrakeGain(),
                                     control_commands);
   }

   //Integrate the state
   m_equations_of_motion_state.enu_x += state_deriv.enu_velocity_x * dt;
   m_equations_of_motion_state.enu_y += state_deriv.enu_velocity_y * dt;
   m_equations_of_motion_state.altitude_msl += state_deriv.enu_velocity_z * dt;
   m_equations_of_motion_state.true_airspeed += state_deriv.true_airspeed_deriv * dt;
   m_equations_of_motion_state.gamma += state_deriv.gamma_deriv * dt;
   m_equations_of_motion_state.psi_enu += state_deriv.heading_deriv * dt;
   m_equations_of_motion_state.thrust += state_deriv.thrust_deriv * dt;
   m_equations_of_motion_state.phi += state_deriv.roll_rate * dt;
   m_equations_of_motion_state.speedBrake += state_deriv.speed_brake_deriv * dt.value();
   m_equations_of_motion_state.flapConfig = state_deriv.flap_configuration;

   // States
   m_dynamics_state.x = m_equations_of_motion_state.enu_x;
   m_dynamics_state.y = m_equations_of_motion_state.enu_y;
   m_dynamics_state.h = m_equations_of_motion_state.altitude_msl;
   m_dynamics_state.v_true_airspeed = m_equations_of_motion_state.true_airspeed;
   m_dynamics_state.gamma = m_equations_of_motion_state.gamma; // flight-path angle NOTE: for gamma, down is positive; up is negative
   m_dynamics_state.psi = m_equations_of_motion_state.psi_enu; // heading angle measured from east counter-clockwise (rad)
   m_dynamics_state.thrust = m_equations_of_motion_state.thrust;
   m_dynamics_state.phi = m_equations_of_motion_state.phi;
   m_dynamics_state.speed_brake = m_equations_of_motion_state.speedBrake;      // speed brake (% of deployment)
   m_dynamics_state.flap_configuration = m_equations_of_motion_state.flapConfig;
   m_equations_of_motion_state_derivative = state_deriv;

   // Use xdot and ydot from Dynamics to ensure winds are used
   Units::Speed xdot = state_deriv.enu_velocity_x;  //ground speed (m/s)
   Units::Speed ydot = state_deriv.enu_velocity_y;  //ground speed (m/s)

   m_dynamics_state.xd = xdot;
   m_dynamics_state.yd = ydot;

   // Check Thrust Limits and Limit Appropriately
   m_dynamics_state.v_indicated_airspeed = m_true_weather.getAtmosphere()->TAS2CAS(Units::MetersPerSecondSpeed(m_dynamics_state.v_true_airspeed),
                                                                                Units::MetersLength(m_dynamics_state.h));

   aaesim::open_source::bada_utils::FlapConfiguration mode = m_bada_calculator->GetCurrentFlapConfiguration();

   Units::Force max_thrust, min_thrust;
   switch (mode) {
      case aaesim::open_source::bada_utils::FlapConfiguration::CRUISE:
      case aaesim::open_source::bada_utils::FlapConfiguration::APPROACH:
      case aaesim::open_source::bada_utils::FlapConfiguration::LANDING:
      case aaesim::open_source::bada_utils::FlapConfiguration::GEAR_DOWN:
         max_thrust = Units::NewtonsForce(
            m_bada_calculator->GetMaxThrust(Units::MetersLength(m_dynamics_state.h), mode, aaesim::open_source::bada_utils::EngineThrustMode::MAXIMUM_CRUISE, Units::ZERO_CELSIUS));
         break;

      case aaesim::open_source::bada_utils::FlapConfiguration::TAKEOFF:
      case aaesim::open_source::bada_utils::FlapConfiguration::INITIAL_CLIMB:
         max_thrust = Units::NewtonsForce(
            m_bada_calculator->GetMaxThrust(Units::MetersLength(m_dynamics_state.h), mode, aaesim::open_source::bada_utils::EngineThrustMode::MAXIMUM_CLIMB, Units::ZERO_CELSIUS));
         break;

      case aaesim::open_source::bada_utils::FlapConfiguration::UNDEFINED:
      default:
         throw std::logic_error("Design Error: should never get here");
   }
   min_thrust = Units::NewtonsForce(
      m_bada_calculator->GetMaxThrust(Units::MetersLength(m_dynamics_state.h), mode, aaesim::open_source::bada_utils::EngineThrustMode::DESCENT, Units::ZERO_CELSIUS));

   if (m_dynamics_state.thrust > max_thrust) {
      m_dynamics_state.thrust = max_thrust;
   } else if (m_dynamics_state.thrust < min_thrust) {
      m_dynamics_state.thrust = min_thrust;
   }

   if (m_dynamics_state.speed_brake > 0.5) {
      m_dynamics_state.speed_brake = 0.5;
   } else if (m_dynamics_state.speed_brake < 0.0) {
      m_dynamics_state.speed_brake = 0.0;
   }

   // Update wind values for output
   Units::Angle trk = Units::RadiansAngle(m_dynamics_state.psi);
   Units::Speed Vw_para = m_wind_velocity_east * cos(trk) + m_wind_velocity_north * sin(trk);
   Units::Speed Vw_perp = -m_wind_velocity_east * sin(trk) + m_wind_velocity_north * cos(trk);

   // assign return values
   AircraftState result_state;
   result_state.m_x = Units::FeetLength(m_dynamics_state.x).value() ;
   result_state.m_y = Units::FeetLength(m_dynamics_state.y).value();
   result_state.m_z = Units::FeetLength(m_dynamics_state.h).value();
   result_state.SetPsi(m_dynamics_state.psi);
   result_state.m_xd = Units::FeetPerSecondSpeed(xdot).value();
   result_state.m_yd = Units::FeetPerSecondSpeed(ydot).value();
   result_state.SetZd(-Units::FeetPerSecondSpeed(m_dynamics_state.v_true_airspeed).value() * sin(m_dynamics_state.gamma));
   result_state.m_gamma = Units::RadiansAngle(m_dynamics_state.gamma).value();
   result_state.m_Vwx = Units::MetersPerSecondSpeed(m_wind_velocity_east).value();
   result_state.m_Vwy = Units::MetersPerSecondSpeed(m_wind_velocity_north).value();
   result_state.m_Vw_para = Units::MetersPerSecondSpeed(Vw_para).value();
   result_state.m_Vw_perp = Units::MetersPerSecondSpeed(Vw_perp).value();
   result_state.m_Vwx_dh = dVwx_dh;
   result_state.m_Vwy_dh = dVwy_dh;
   result_state.m_sensed_temperature = m_true_weather.GetTemperature();
   result_state.m_sensed_density = m_true_weather.GetDensity();
   result_state.m_sensed_pressure = m_true_weather.GetPressure();
   result_state.m_dynamics_state = m_dynamics_state;

   return result_state;
}

EquationsOfMotionStateDeriv ThreeDOFDynamics::StatePropagation(Units::Frequency dVwx_dh,
                                                               Units::Frequency dVwy_dh,
                                                               Units::Frequency k_gamma,
                                                               Units::Frequency k_t,
                                                               Units::Frequency k_phi,
                                                               double k_speedBrake,
                                                               ControlCommands commands) {
   // Aircraft Configuration
   const Units::Mass ac_mass = m_bada_calculator->GetAircraftMass();

   // States
   const Units::Speed true_airspeed = m_equations_of_motion_state.true_airspeed;
   const Units::Angle gamma = m_equations_of_motion_state.gamma;     // flight-path angle
   const Units::Angle psi = m_equations_of_motion_state.psi_enu;         // heading angle measured from east counter-clockwise
   const Units::Force thrust = m_equations_of_motion_state.thrust;
   const Units::Angle phi = m_equations_of_motion_state.phi;         // roll angle
   const double speedBrake = m_equations_of_motion_state.speedBrake; // speed brake (% of deployment)

   Units::Force drag, lift;
   CalculateKineticForces(lift, drag);

   // calculate the first-order derivative of the state vector
   EquationsOfMotionStateDeriv dX;
   dX.enu_velocity_x = Units::MetersPerSecondSpeed(true_airspeed * cos(gamma) * cos(psi) + m_wind_velocity_east);
   dX.enu_velocity_y = Units::MetersPerSecondSpeed(true_airspeed * cos(gamma) * sin(psi) + m_wind_velocity_north);
   dX.enu_velocity_z = Units::MetersPerSecondSpeed(-true_airspeed * sin(gamma));
   dX.true_airspeed_deriv = (thrust - drag) / ac_mass + Units::ONE_G_ACCELERATION * sin(gamma)
                            + true_airspeed * (dVwx_dh * cos(psi) + dVwy_dh * sin(psi))
                              * sin(gamma) * cos(gamma);
   dX.gamma_deriv = k_gamma * (commands.getGamma() - gamma) -
                    (dVwx_dh * cos(psi) + dVwy_dh * sin(psi)) * pow(sin(gamma), 2) * Units::ONE_RADIAN_ANGLE;
   dX.heading_deriv = (-lift * sin(phi) / (ac_mass * true_airspeed * cos(gamma)) -
                       (dVwx_dh * sin(psi) - dVwy_dh * cos(psi)) * tan(gamma)) * Units::ONE_RADIAN_ANGLE;
   dX.thrust_deriv = k_t * (commands.getThrust() - thrust);
   dX.roll_rate = k_phi * (commands.getPhi() - phi);
   dX.speed_brake_deriv = k_speedBrake * (commands.getSpeedBrake() - speedBrake);
   dX.flap_configuration = commands.getFlapMode();

   return dX;
}

void ThreeDOFDynamics::CalculateKineticForces(Units::Force &lift,
                                              Units::Force &drag) {
   // Aircraft Configuration
   const Units::Mass ac_mass = m_bada_calculator->GetAircraftMass();
   const Units::Area wing_area = m_bada_calculator->GetAerodynamicsInformation().S;

   // States important for this method
   const Units::Length altitude_msl = m_equations_of_motion_state.altitude_msl;
   const Units::Speed true_airspeed = m_equations_of_motion_state.true_airspeed;
   const Units::Angle phi = m_equations_of_motion_state.phi; // roll angle
   const double speed_brake_setting = m_equations_of_motion_state.speedBrake;  // speed brake (% of deployment)

   // Get temp, density, and pressure
   Units::KilogramsMeterDensity rho(m_true_weather.GetDensity());
   Units::PascalsPressure pressure(m_true_weather.GetPressure());

   // Get aerodynamic configuration
   double cd0, cd2, gear;
   aaesim::open_source::bada_utils::FlapConfiguration
      updated_flap_setting = aaesim::open_source::bada_utils::FlapConfiguration::UNDEFINED;
   m_dynamics_state.v_indicated_airspeed = m_true_weather.getAtmosphere()->TAS2CAS(true_airspeed, pressure, rho);
   m_bada_calculator->GetDragCoefficients(m_dynamics_state.v_indicated_airspeed,
                                          altitude_msl,
                                          m_dynamics_state.flap_configuration,
                                          cd0,
                                          cd2,
                                          gear,
                                          updated_flap_setting);

   // Lift and Drag Coefficients
   const double cL = (2. * ac_mass * Units::ONE_G_ACCELERATION) / (rho * Units::sqr(true_airspeed) * wing_area * cos(phi));
   double cD = cd0 + gear + cd2 * pow(cL, 2);
   if (speed_brake_setting != 0.0) {
      cD = (1.0 + 0.6 * speed_brake_setting) * cD;
   }

   // Drag & Lift
   drag = 1. / 2. * rho * cD * Units::sqr(true_airspeed) * wing_area;
   lift = 1. / 2. * rho * cL * Units::sqr(true_airspeed) * wing_area;

   if (m_logger.getLogLevel() == log4cplus::TRACE_LOG_LEVEL) {
      json j;
      j["mass_kg"] = Units::KilogramsMass(ac_mass).value();
      j["altitude_msl_ft"] = Units::FeetLength(altitude_msl).value();
      j["true_airspeed_kts"] = Units::KnotsSpeed(true_airspeed).value();
      j["rho_kgm3"] = Units::KilogramsMeterDensity(rho).value();
      j["gear"] = gear;
      j["speed_brake_setting"] = speed_brake_setting;
      j["cD"] = cD;
      j["drag_newtons"] = Units::NewtonsForce(drag).value();
      j["cL"] = cL;
      j["lift_newtons"] = Units::NewtonsForce(lift).value();
      LOG4CPLUS_TRACE(m_logger, j.dump());
   }
}

Units::SignedRadiansAngle ThreeDOFDynamics::CalculateTrimmedPsiForWind(Units::SignedAngle ground_track_enu) {
   // Get wind information
   WindStack windstackx(1, 5);
   WindStack windstacky(1, 5);
   Units::Frequency dvwxdh, dvwydh;
   CalculateEnvironmentalWind(windstackx, windstacky, dvwxdh, dvwydh);

   const double gamma = Units::RadiansAngle(m_equations_of_motion_state.gamma).value();
   const double trkRad = Units::RadiansAngle(AircraftCalculations::Convert0to2Pi(ground_track_enu)).value();
   Units::MetersPerSecondSpeed vwpara = Units::MetersPerSecondSpeed(
         Units::MetersPerSecondSpeed(m_wind_velocity_east).value() * cos(trkRad) +
         Units::MetersPerSecondSpeed(m_wind_velocity_north).value() * sin(trkRad));
   Units::MetersPerSecondSpeed vwperp = Units::MetersPerSecondSpeed(
         -Units::MetersPerSecondSpeed(m_wind_velocity_east).value() * sin(trkRad) +
         Units::MetersPerSecondSpeed(m_wind_velocity_north).value() * cos(trkRad));

   Units::MetersPerSecondSpeed w = sqrt(Units::sqr(Units::MetersPerSecondSpeed(m_wind_velocity_east)) +
                                        Units::sqr(Units::MetersPerSecondSpeed(m_wind_velocity_north)));

   const Units::MetersPerSecondSpeed v = m_equations_of_motion_state.true_airspeed;
   Units::MetersPerSecondSpeed gs = Units::MetersPerSecondSpeed(sqrt(
         pow(v.value() * cos(gamma), 2) -
         pow(vwperp.value(), 2)) + vwpara.value());

   double numerator = (pow(v.value() * cos(gamma), 2) +
                       pow(gs.value(), 2) -
                       pow(w.value(), 2));

   double denominator = (2.0 * v.value() * cos(gamma) *
                         gs.value());

   double temp = numerator / denominator;
   if (temp > 1.0) { // Limit temp so acos function doesn't give undefined value.
      temp = 1.0;
   } else if (temp < -1.0) {
      temp = -1.0;
   }

   // Wind correction angle
   Units::Angle beta = Units::RadiansAngle(acos(temp) * -1.0 *
                                           CoreUtils::SignOfValue(vwperp.value()));

   return ground_track_enu + beta;
}
void ThreeDOFDynamics::Initialize(std::shared_ptr<const BadaPerformanceCalculator> aircraft_performance,
                                  const Waypoint &initial_waypoint,
                                  std::shared_ptr<TangentPlaneSequence> tangent_plane_sequence,
                                  Units::Length initial_altitude_msl,
                                  Units::Speed initial_true_airspeed,
                                  Units::Angle initial_ground_course_enu,
                                  double initial_mass_fraction,
                                  const WeatherTruth &true_weather) {
   m_true_weather = true_weather;
   m_bada_calculator = aircraft_performance;

   m_dynamics_state.h = initial_altitude_msl;
   m_dynamics_state.gamma = Units::RadiansAngle(0);
   m_dynamics_state.phi = Units::RadiansAngle(0);
   m_dynamics_state.v_true_airspeed = initial_true_airspeed;
   m_dynamics_state.flap_configuration = m_bada_calculator->GetCurrentFlapConfiguration();

   // Actually initialize the state
   m_equations_of_motion_state.altitude_msl = Units::MetersLength(m_dynamics_state.h); // altitude (m)
   m_equations_of_motion_state.true_airspeed = Units::MetersPerSecondSpeed(m_dynamics_state.v_true_airspeed); // true airspeed (m/s)
   m_equations_of_motion_state.gamma = Units::RadiansAngle(m_dynamics_state.gamma); // flight-path angle (rad); NOTE: for gamma, heading down is positve
   m_equations_of_motion_state.thrust = Units::NewtonsForce(0.0); // thrust (N)
   m_equations_of_motion_state.phi = Units::RadiansAngle(m_dynamics_state.phi); // roll angle (rad)
   m_equations_of_motion_state.speedBrake = 0.0; // speed brake (% of deployment)
   m_equations_of_motion_state.flapConfig = m_bada_calculator->GetCurrentFlapConfiguration();

   if (m_dynamics_state.flap_configuration == bada_utils::FlapConfiguration::TAKEOFF) {
      // On the ground. Don't trim aircraft.
      m_dynamics_state.psi = initial_ground_course_enu;
      m_equations_of_motion_state.psi_enu = m_dynamics_state.psi;
      m_dynamics_state.xd = m_dynamics_state.v_true_airspeed * cos(m_dynamics_state.psi);
      m_dynamics_state.yd = m_dynamics_state.v_true_airspeed * sin(m_dynamics_state.psi);

      Units::Force takeoff_max_thrust = m_bada_calculator->GetMaxThrust(Units::MetersLength(m_dynamics_state.h), aaesim::open_source::bada_utils::FlapConfiguration::TAKEOFF, aaesim::open_source::bada_utils::EngineThrustMode::MAXIMUM_CLIMB, Units::ZERO_CELSIUS);
      m_equations_of_motion_state.thrust = takeoff_max_thrust;
   } else {
      // Now that the initial state has been determined, still need to trim laterally for wind
      m_equations_of_motion_state.psi_enu = CalculateTrimmedPsiForWind(initial_ground_course_enu);
      m_dynamics_state.psi = m_equations_of_motion_state.psi_enu;
      m_dynamics_state.xd = m_dynamics_state.v_true_airspeed * cos(m_dynamics_state.psi) * cos(m_dynamics_state.gamma) +
         m_wind_velocity_east;
      m_dynamics_state.yd = m_dynamics_state.v_true_airspeed * sin(m_dynamics_state.psi) * cos(m_dynamics_state.gamma) +
         m_wind_velocity_north;

      // Calculate initial Aircraft Thrust
      Units::Mass ac_mass = m_bada_calculator->GetAircraftMass();
      Units::Force drag, lift;
      CalculateKineticForces(lift, drag);
      Units::Force equilibrium_thrust_required = drag - ac_mass * Units::ONE_G_ACCELERATION * sin(asin(0.0));
      const Units::Force max_thrust = m_bada_calculator->GetMaxThrust(Units::MetersLength(m_dynamics_state.h), aaesim::open_source::bada_utils::FlapConfiguration::CRUISE, aaesim::open_source::bada_utils::EngineThrustMode::MAXIMUM_CRUISE, Units::ZERO_CELSIUS);
      const Units::Force min_thrust = m_bada_calculator->GetMaxThrust(Units::MetersLength(m_dynamics_state.h), m_dynamics_state.flap_configuration, aaesim::open_source::bada_utils::EngineThrustMode::DESCENT, Units::ZERO_CELSIUS);
      if (equilibrium_thrust_required > max_thrust * m_max_thrust_percent) {
         equilibrium_thrust_required = max_thrust * m_max_thrust_percent;
      } else if (equilibrium_thrust_required < min_thrust * m_min_thrust_percent) {
         equilibrium_thrust_required = min_thrust * m_min_thrust_percent;
      }
      m_equations_of_motion_state.thrust = equilibrium_thrust_required;
   }
}

EquationsOfMotionStateDeriv ThreeDOFDynamics::StatePropagationOnRunway(ControlCommands commands, const Guidance &guidance) {
   const double wind_factor = 1.25;
   const Units::SignedAngle takeoff_roll_psi_enu = guidance.m_enu_track_angle;
   const Units::Mass ac_mass = m_bada_calculator->GetAircraftMass();
   const Units::Speed true_airspeed = m_equations_of_motion_state.true_airspeed;
   const Units::Force thrust = m_bada_calculator->GetMaxThrust(m_equations_of_motion_state.altitude_msl,commands.getFlapMode(),bada_utils::EngineThrustMode::MAXIMUM_CLIMB, Units::ZERO_CELSIUS);
   const Units::Speed wind_magnitude = Units::sqrt(Units::sqr(m_wind_velocity_east)+Units::sqr(m_wind_velocity_north));
   Units::Speed wind_east_parallel_to_track = m_wind_velocity_east * cos(takeoff_roll_psi_enu);
   Units::Speed wind_north_parallel_to_track = m_wind_velocity_north * sin(takeoff_roll_psi_enu);
   if (true_airspeed < wind_magnitude*wind_factor) {
      // ignore wind; don't allow aircraft to be blown around on runway
      wind_east_parallel_to_track = Units::zero();
      wind_north_parallel_to_track = Units::zero();
   }

   EquationsOfMotionStateDeriv dX;
   dX.enu_velocity_x = true_airspeed * cos(takeoff_roll_psi_enu) + wind_east_parallel_to_track;
   dX.enu_velocity_y = true_airspeed * sin(takeoff_roll_psi_enu) + wind_north_parallel_to_track;
   dX.enu_velocity_z = Units::zero();
   dX.true_airspeed_deriv = thrust/ac_mass;
   dX.gamma_deriv = Units::zero();
   auto derived_psi_enu = Units::arctan2(Units::MetersPerSecondSpeed(dX.enu_velocity_y).value(), Units::MetersPerSecondSpeed(dX.enu_velocity_x).value());
   auto delta_psi_enu = derived_psi_enu-m_equations_of_motion_state.psi_enu;
   dX.heading_deriv = delta_psi_enu/SimulationTime::get_simulation_time_step();
   dX.thrust_deriv = Units::zero();
   dX.roll_rate = Units::zero();
   dX.speed_brake_deriv = 0;
   dX.flap_configuration = commands.getFlapMode();
   return dX;
}

redpajama_set_name: RedPajamaGithub


text:
Q: Ryzen 7 and ASUS Rog, games randomly crash So Basically I just bought:

*

*Ryzen 7 2700x

*Asus rog b450-f gaming 2 (with the latest stable bios available)

*Dddr4-3200 corsair vengeance 2x8gb

*GTX 1070 8GB

I have run benchmarks (passmark) and memtest for over an hour without any issues.
Some games like Valhalla and Horizon Zero Down randomly crash when playing (like 1 or 2 minutes into the game).
I have tried to switch the slots of the ram and also tried one stick at time. No results.
What test can I do to understand why these games are crashing ? Note only the game crashes not the windows, I can still close the game and continue working
Temperature are fine (well below 60degress celsius pretty much all the time) and no OC ever
Edit
So probabily i found the issue: I swtiched the slot of my GPU, it was on the second slot (far from the cpu) I put the gpu on the slot near the CPU and now it seems it's working.... This is so strange: nope still crashing
Edit2
After losing my mind, I saw on a variety of forums that many people are experiencing these crash with exactly two games:

*

*Valhalla and

*Horizon zero dawn

At this point I think it's not a fault of my hardware, but it's a bug with these two games

A: So I think I believe I found the issues: the RAM.
I replaced my Corsair vengeance 2x8gb with Crucial Ballistix BL2K8G30C15U4B 3000 MHz, DDR4 and now it seems to work.
No more crash on Valhalla and Horizon

redpajama_set_name: RedPajamaStackExchange


Leads the students, faculty and staff of the Faculty of Arts. Through university-wide and community engagement, the dean manages priorities that contribute to the vision of the faculty, encourages research, champions the student experience and fosters a culture of excellence. The dean also manages policies and sustains an effective budget.
Assists the dean of the Faculty of Arts in the areas of process, policies and plans, and assists with managing human and financial resources that sustain the faculty's academic programs. The vice dean also provides leadership in the area of equity and diversity.
Provides strategic leadership and support for global initiatives and strategic partnerships that increase internationalization activities in the faculty.
Advances the faculty's research activities and oversees research, grants and graduate education in the faculty.
Oversees the Canada Research Chair program, promotes international research collaborations and identifies needs for research infrastructure.
Provides strategic leadership in areas related to faculty teaching and undergraduate student learning and engagement in the Faculty of Arts.
Oversees the undergraduate programs in the Faculty of Arts and provides leadership in the areas of curriculum review, student recruitment and advising, and enrollment management at the faculty and university levels. Is the academic director of the Arts Students' Centre.
Learn more about our senior leaders, including brief biographies and each position's terms of reference.
The dean leads the students, faculty and staff of the Faculty of Arts. Through university-wide and community engagement, the dean manages priorities that contribute to the vision of the faculty, encourages research, champions the student experience and fosters a culture of excellence. The dean also manages policies and sustains an effective budget.
Leads in the communication and implementation of the vision, priorities and strategic planning of the Faculty of Arts.
Engages faculty members and staff to choose initiatives and manages priorities that align with the vision of the faculty and the university as a whole.
Fosters and encourages a high level of research productivity within the faculty and across faculties by further enhancing and developing excellent research infrastructure and supporting faculty efforts to obtain and maintain research funding.
Oversees the implementation of frameworks, policies and initiatives that promote a culture of excellence, innovation and collaboration that impacts all aspects of the Faculty.
Develops and sustains an effective budget and organizational structure to ensure the faculty is financially sustainable, and that its educational offerings are of the highest quality.
Leads and supports the conceptualization and implementation of innovative educational programs in line with the university's overall planning objectives.
Communicates the vision to spur fund development and attracts resources from government, philanthropy, and other sources. Stewards these relationships and provides timely reporting and accountability to funders.
Nurtures a strong connection to community and demonstrates how this faculty and the university are concerned with addressing the challenges facing the people of Calgary, Alberta, and beyond.
Maintains a connectivity to and visibility with faculty, staff and students. Acts as a role model for students, staff and faculty alike.
Champions the student experience, both at the undergraduate and graduate levels.
Creates a sense of unity for the faculty and a culture that is inclusive and engaging.
Dean, Faculty of Arts and Acting Provost, University College at the University of Manitoba, and held the Duff Roblin Professorship of Government. University of New Brunswick, where he chaired the Political Science Department as was twice cited as a top teacher by Maclean's Magazine.
Interim Dean of the Faculty of Arts, University College of the Cariboo (which became Thompson Rivers University) – created the first Bachelor of Arts and Bachelor of Journalism degrees during that institution's transition to become a degree-granting university.
The politics of nationalism, specifically national identity and how it affects public policies on immigration in different countries.
As author of Jacob Burckhardt's Social and Political Thought (U of T Press, 2004), he was the first to study Swiss cultural historian Jacob Burckhardt as an influential political thinker.
Canadian political parties, leaders, and issues of multiculturalism, first nations and immigration.
The vice dean assists the dean of the Faculty of Arts in the areas of process, policies and plans. The vice dean assists with managing human and financial resources that sustain the faculty's academic programs. The vice dean provides leadership in the area of equity and diversity.
With the dean, designs, develops, and implements the faculty's academic and strategic plans. Documents, publicizes and archives processes, policies, and plans.
Assists heads and directors in managing the human and financial resources that sustain the faculty's academic programs.
With the dean, works on the promotion and tenure process, new faculty and headship searches, the merit system, study and other leaves, collective agreement and policy interpretation, and grievances.
With the Human Resources Partner, advises heads on academic searches, appointments, reviews, and workload policies.
With the Finance Partner, allocates annual funding for teaching and learning activities.
With the Associate Dean - Teaching and Learning, establishes and maintains indicators of faculty teaching performance for merit and promotion.
Is responsible for the review, revision, and approval of the faculty's teaching plan.
Chairs the faculty's Equity & Diversity Committee that leads efforts and coordinates initiatives to advance equity and diversity within the faculty.
May serve as the dean's designate for faculty members' concerns and grievances at the decanal level.
Oversees external reviews of Faculty of Arts academic programs and units in accordance with the University's Quality Assurance Process, including providing guidance to heads and directors for the self-study process.
Coordinates with the Deputy Provost with regards to review matters and the implementation of report recommendations.
Field work in Rwanda, working with mountain gorillas and in Ghana, working on black and white colobus in the community forest of Boabeng-Fiema.
Influences on female dispersal decisions and female and infant strategies against male infanticide in non-human primates.
Assists with managing human and financial resources that sustain the faculty's academic programs.
Provides leadership in the area of equity and diversity.
The Associate Dean Internationalization and Global Initiatives provides strategic leadership and support for global initiatives and strategic partnerships that increase internationalization activities in the faculty.
Oversee the management of international student and faculty experiences (such as student exchange or study abroad programs).
Promotes research and creative activity, oversees graduate studies, and fosters faculty development and career opportunities in the Faculty of Arts.
Advances the faculty's culture of scholarship, enhancing the scholarly productivity of our faculty members, promoting excellence in research and teaching, and facilitating and coordinating scholarly activities.
Manages the SSHRC mentorship program and serves as a key resource for junior faculty members and graduate students, providing assistance for the development of independent research programs.
Chairs the Committee of Graduate Chairs.
Oversees all matters relating to graduate education, including graduate enrolment planning, administration of funds to support graduate activities, graduate program development, and governance matters.
Is responsible for the faculty's role in onboarding and mentoring new faculty members.
Manages the faculty's strategy for the nomination of faculty members for external awards, and for the faculty's programs to recognize and celebrate success.
Oversee new faculty development and onboarding, and awards for members of the Faculty.
Manages and oversees the Canada Research Chair (CRC) program and support systems for large grant applications.
Coordinates post award grant management services.
Chairs the Faculty's Research and Scholarship Committee and takes the lead in strategies to increase research capacity by supporting and creating research platforms of international prominence.
Works closely with the vice dean, heads, directors and the Finance Partner to assess and oversee infrastructure needs for research and teaching and develop guidelines for efficient use of space.
Promote research and scholarly activity; oversee faculty grant applications and Canada Research Chair nominations.
The Associate Dean (Teaching, Learning and Student Engagement) (ADTLSE) provides strategic leadership in areas related to teaching, learning and student engagement in the Faculty of Arts.
Leadership activities include developing, promoting, implementing, and evaluating initiatives that advance these areas. The ADTLSE builds and maintains relationships between the Faculty of Arts and other faculties and units in the University of Calgary to develop and advance initiatives related to teaching, learning and student engagement.
The ADTLSE chairs the Teaching and Learning Committee and the Student Engagement Committee and reports directly to the Dean, Faculty of Arts.
The position is housed in the Arts Students' Centre, where the ADTLSE has an office and administrative support.
Administers faculty-level interdisciplinary academic programs, including the Arts and Science Honours Academy.
Oversees faculty-level awards, nominations, and grants to recognize effective teaching and other contributions to the learning and teaching environment .
Responsible for curriculum renewal and flexibility across departments, programs and units in the Faculty of Arts.
With Vice Dean, establishes and maintains indicators of faculty teaching performance for merit and promotion. Works closely with departments to review and evaluate existing indicators, and ensures that they are clear and transparent.
Assists Associate Dean – Undergraduate Programs and Student Affairs as needed, on matters including advising, discipline and appeals.
Stays current with pedagogical approaches, technologies, policies and ideas by attending conferences and reviewing literature.
Initiates and maintains communications (including social media) between the Arts Students' Centre, Heads, faculty, staff, and students for teaching support and consultations on issues and initiatives.
Oversees the Faculty of Arts' contributions to university-level plans and priorities for teaching and learning, including the Eyes High goals; the Academic Plan; and the Taylor Institute for Teaching and Learning.
Works with the Office of the Provost (Vice-Provost Teaching and Learning), the Teaching and Learning Centre and representatives of other faculties on teaching-related initiatives, programs, and committees outside the Faculty of Arts.
Advises the Dean on resource needs for the development, promotion, and evaluation of teaching-and-learning-related initiatives and programs.
Oversees the Faculty of Arts' Co-operative Education Program.
Collects and analyses quantitative and qualitative data on student engagement, through instruments such as NSSE surveys, workshops, focus groups, etc.
The Associate Dean, Undergraduate Programs and Student Affairs oversees the undergraduate programs in the Faculty of Arts and provides leadership in the areas of curriculum review, student recruitment and advising, and enrollment management at the faculty and university levels. The Associate Dean, Undergraduate Programs and Student Affairs is the academic director of the Arts Students' Centre.
Responsible for administration of undergraduate programs in the faculty.
Responsible for the faculty's calendar entry, including faculty and program regulations and requirements.
Chairs the Faculty of Arts Curriculum and Academic Review Committee.
Represents the Faculty of Arts on GFC's Calendar and Curriculum Subcommittee.
Academic Director of the Program Information Centre; supervises and works closely with the Administrative Director of PIC.
Responsible for all student affairs, including recruitment, admission, enrollment management, academic advising, enforcement of faculty and university regulations, academic and nonacademic misconduct cases, complaints, assessment of transfer credit, academic standing, and approval for graduation.
Leads the faculty's Strategic Enrollment Management Team.
Responsible for contact with and engagement with alumni/ae.


Since television cameras have a proclivity for more violent behavior during sporting events, perception becomes warped, says Brian Person, a service coordinator for Big Brothers and Big Sisters. Person, a father, says parents need to remind their children that this behavior remains on the sports field.
Person and the other fathers agreed that as parents, their part comes back to how they engage with their children, offer guidance and help them develop. When it comes to youth sports teams, they want to emphasize collaboration instead of competition.
This initiative is in line with the organization's mission to facilitate the involvement of fathers in their children's lives. Holly Zwerling, president and CEO of the task force, says through workshops such as this one, the group strives to empower men to be responsible fathers.
"Program topics run the gamut from raising teenagers to sharing parenting responsibilities," Zwerling said.
The workshops offer counseling from experts and support, which is what drew Jose Bolamos, a new father from Miramar, to become involved with the task force.
Zwerling says father involvement in schools is the focus of the organization's programming this year.
But the challenge is that school systems often neglect to include fathers, especially ones without primary custody.
"We are concerned that fathers have been left our of their children's education," Zwerling said.
Through a partnership with Miami-Dade schools, the task force will work to change this and claim a more active role. They have banded together to form a "reading squad," which sends dads into county schools to read to classes throughout the year.
Florida also has supported initiatives for greater father involvement. The task force partnered with Sen. Dwight Bullard Senate to pass a state Senate resolution which declared Fathers in Education Day on May 14, and Fathers in Action & Advocacy Week May 12-16. Fathers will be invited into schools to read, share their hobbies and talk about their jobs.
To prepare, the task force has nominated father ambassadors to go into schools to establish a relationship with the teachers and principals. They will work together to create "tool kits" to guide fathers for when they visit class.
To become involved, contact the Fatherhood Task Force of South Florida at 305-812-4000 or visit ftfsf.org.


School holidays roll around so fast, so anything to keep the kids busy is a blessing. Crayola is thankfully helping you maintain your sanity next school holidays by providing a huge range of Free Colouring In Pages. Check out their site to download and print the colouring in pictures.


text:
Q: Admob banner ad and scrollView inside constraint layout I have faced a problem with xml layout file, when trying to add admob banner and scrollView inside constraint layout the banner appears above scroll view please check the image bellow
this is the code I used In xml layout file for main3activity but it didn't work

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.macbookpro.Main3Activity">

    <ScrollView
        android:id="@+id/scrollview1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            >

            <TextView
                android:id="@+id/title1"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_marginLeft="2dp"
                android:layout_marginStart="12dp"
                android:layout_marginTop="55dp"
                android:text="@string/title1"
                android:textAllCaps="true"
                android:textColor="@color/colorPrimaryDark"
                android:textSize="25sp" />

            <TextView
                android:id="@+id/textView4"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/soutitle3"
                android:layout_marginEnd="12dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="12dp"
                android:layout_marginStart="15dp"
                android:layout_marginTop="10dp"
                android:text="@string/soutext3" />

            <TextView
                android:id="@+id/soutitle4"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_below="@+id/textView4"
                android:layout_marginLeft="2dp"
                android:layout_marginStart="8dp"
                android:layout_marginTop="15dp"
                android:text="@string/soutitle4"
                android:textColor="@color/colorPrimaryDark"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/textView5"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/soutitle4"
                android:layout_marginEnd="12dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="12dp"
                android:layout_marginStart="15dp"
                android:layout_marginTop="10dp"
                android:text="@string/soutext4" />
            <TextView
                android:id="@+id/soutitle5"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_below="@+id/textView5"
                android:layout_marginLeft="2dp"
                android:layout_marginStart="8dp"
                android:layout_marginTop="15dp"
                android:text="@string/soutitle5"
                android:textColor="@color/colorPrimaryDark"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/soutitle5"
                android:layout_marginEnd="12dp"
                android:layout_marginLeft="15dp"
                android:layout_marginRight="12dp"
                android:layout_marginStart="15dp"
                android:layout_marginTop="10dp"
                android:text="@string/soutext5" />

        </RelativeLayout>

    </ScrollView>

    <com.google.android.gms.ads.AdView
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="ca-apppub3940256099942544/6300978111"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

I think its against google's policies to put banner above text, so any suggestions ?
thanks

A: Perhaps ConstrainLayout is not the best tool, I think you should use a RelativeLayout and use layaout_above like this:
<com.google.android.gms.ads.AdView
    android:id="@+id/adView"
    android:layout_above="@+id/scrollview1"
    ... />

A: I solved this problem by adding android:layout_above="@+id/adView" to scrollView


text:
Q: How to execute functions with parameters in the parent scope? Sometimes it is necessary to call a function defined in the parent scope from a directive with isolated scope. To refer to functions defined in outer scope usually & is used. But it doesn't allow to send params in the function. I can make it work only with = directive data binding. Please, consider my example on plnkr and let me know if it is possible to use & and put data in a callback function.
var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope) {
  function updateNumber(number){
    $scope.randomNumber = number;
  }
  $scope.randomNumber = 0;
  $scope.updateNumber = updateNumber;
});

app.directive('randomGenerator', function(){
  return {
    scope:{
      onUpdate:'='
      ^^^^^^^^^^^^
      // I want to use '&', but cannot call onUpdate(something)
    },
    restrict: 'E',
    replace: true,
    template: '<button ng-click="update()">Random</button>',
    link: function(scope,elem,attrs){
        scope.update = function(){
          var random = Math.random();
          scope.onUpdate(random);
        };
    }
  };
});

Html

Random numbers generator

    <random-generator on-update="updateNumber"></random-generator>
    {{randomNumber}}

A: Please see here http://plnkr.co/edit/y0s43VQwpDb6Jyx3HzX9?p=preview
more info https://groups.google.com/forum/#!topic/angular/3CHdR_THaNw
HTML:

Random numbers generator

        <random-generator on-update="updateNumber(number)"></random-generator>
        {{randomNumber}}

Directive:
app.directive('randomGenerator', function() {
  return {
    scope: {
      onUpdate: '&'
    },
    restrict: 'E',
    replace: true,
    template: '<button ng-click="update()">Random</button>',
    link: function(scope, elem, attrs) {
      scope.update = function() {
        var random = Math.random();

//passing parameter should be named and the name needs to match that on in HTML [NUMBER]
        scope.onUpdate({
          number: random
        });
      };
    }
  };
});


text:
About Charles Stross
Charles Stross, 50, is a full-time science fiction writer and resident of Edinburgh, Scotland. The author of six Hugo-nominated novels and winner of the 2005, 2010, and 2015 Hugo awards for best novella, Stross's works have been translated into over twelve languages.
Like many writers, Stross has had a variety of careers, occupations, and job-shaped-catastrophes in the past, from pharmacist (he quit after the second police stake-out) to first code monkey on the team of a successful dot-com startup (with brilliant timing he tried to change employer just as the bubble burst).
Ben Aaronovitch
Arkady Martine
Benedict Jacka
qntm
Tamsyn Muir
Neal L. Asher
Derek Künsken
Richard Kadrey
Dennis E. Taylor
Yahtzee Croshaw
Greg Egan
David Conyers
P. Djèlí Clark
Nicole Galland
Eric Flint
T Kingfisher
Glynn Stewart
Vernor Vinge
Kim Stanley Robinson
Richard Fox
Larry Correia
Tade Thompson
Obligatory Hugo eligibility post
Because the novella publication date slipped into 2022, I have just one Hugo-eligible publication this year.
Obviously Invisible Sun is a no-hoper in the best novel category—it's book nine of a series in a deeply unfashionable subgenre—but it's also the last Merchant Princes book, which means the Merchant Princes series is eligible for nomination in the "best series" category.
(It's also eligible for the Sidewise Award for alternate history, but it already won that o
Brief commercial interlude
Thanks to COVID19 I'm not currently attending SF conventions in person, or traveling.
This means that for the time being there is only one source of signed copies of my books: Transreal Fiction in Edinburgh. Follow the link to order copies for mail delivery within the UK.
(You can also email for details of international postage, but be warned, Brexit has messed everything up, and we have a pandemic and a print supply chain crunch on top.)
Note that Transreal is not cur
1 week ago Read more
Oh, 2022!
Back in December of 2016 I took a look at what the next year held in store for us. It spanned three blog posts and ended happily in a nuclear barbecue to put us all out of our misery: start here, continue with this, and finale: and the Rabid Nazi Raccoons shall inherit the Earth.
It is now early 2022 and I clearly wasn't pessimistic enough.
About 15 years ago, when I was working on Halting State, I came up with a rule of thumb for predicting the near-future setting in SF. Look
Quantum of Nightmares
Enough with the pandemic and politics, the Scylla and Charybdis of 2021 on this blog: I've got a new book coming in less than three weeks, so let me tell you as much about it as I can without spoiling it for you!
Quantum of Nightmares is the second of the New Management books, a spin-off series set in the universe of the Laundry Files, and a direct follow-up to 2020's Dead Lies Dreaming. (The US edition comes out on the 11th of January, two days before the UK edition drops. If you dis
I was supposed to be in Frankfurt by now, but my winter break—the first in three years—has been cancelled (thanks, Omicron!) and I'm still at home.
Probably very few of you track Nicola Sturgeon's weekly COVID briefings to the Scottish Parliament, but I find them very useful—unlike Boris Johnson there's zero bullshit and she seems to be listening to the scientists.
Today's briefing was palpably anxious. Some key points:
99 confirmed Omicron cases in Scotland (pop. 5.6
Outage report
The blog was hacked: some arsewipe had figured out how to use it to host a bunch of links to dodgy sports videos, and in the process they messed up the permissions on the directory housing the scripts that run the blog.
All cleaned up now, everything back online. Free bonus extra: Markdown should be working in comments as well as basic HTML tags.
I plan to throw in some really major changes on the blog in the not too distant future—between April and September next year. (Hint:
An update on the revolutionary experiment
November 2021, and Brexit is still on-going. I am trying to refrain from posting wall-to-wall blog essays about how badly the on-going brexit is going, but it's been about 9-10 months since I last gnawed on the weeping sore, so here's an interim update.
(If apocalyptic political clusterfucks bore you, skip this blog entry.)
What has become most apparent this year is that Brexit is a utopian nation-building program that about 25-30% of the nation are really crazily enthusiastic
PSA: Publishing supply chain shortages
Quantum of Nightmares (UK link) comes out on January 11th in the USA and January 13th in the UK. It's the second New Management novel, and a direct sequel to Dead Lies Dreaming.
If you want to buy the ebook, you're fine, but if you want a paper edition you really ought to preorder it now.
The publishing industry is being sandbagged by horrible supply chain problems. This is a global problem: shipping costs are through the roof, there's a shortage of paper, a shortage of worker
Empire Games (and Merchant Princes): the inevitable spoiler thread!
It's launch day for Invisible Sun in the UK today, so without further ado ...
This is a comment thread for Q&A about the Merchant Princes/Empire Games series.
Ask me your questions via the comments below the huge honking cover image (it's a spoiler spacer!) and I'll try to answer them.
(Disclaimer: These books were written over a 19 year period, starting in mid-2002, and I do not remember every last aspect of the process ... or of the world-building, for I last re-
Invisible Sun: signed copies and author events
Invisible Sun comes out next week!
If you want to order signed copies, they're available from Transreal Fiction in Edinburgh: I'll be dropping in some time next week to sign them, and Mike will ship them on or after the official release date. (He's currently only quoting UK postage, but can ship overseas: the combination of Brexit and COVID19 has done a whammy on the post office, however things do appear to be moving—for now.)
I'm also doing a couple of virtual events.
Invisible Sun: Themes and Nightmares
I have a new book coming out at the end of this month: Invisible Sun is the last Merchant Princes book, #9 in a series I've been writing since 2001—alternatively, #3 in a trilogy (Empire Games) that follows on from the first Merchant Princes series.
The original series was written from 2001 to 2008; the new trilogy has been in the works since 2012: I've explained why it's taken so long previously.
Combined, the entire sequence runs to roughly a million words, making it my seco
Fossil fuels are dead (and here's why)
So, I'm going to talk about Elon Musk again, everybody's least favourite eccentric billionaire asshole and poster child for the Thomas Edison effect—get out in front of a bunch of faceless, hard-working engineers and wave that orchestra conductor's baton, while providing direction. Because I think he may be on course to become a multi-trillionaire—and it has nothing to do with cryptocurrency, NFTs, or colonizing Mars.
This we know: Musk has goals (some of them risible, some of them mu
On inappropriate reactions to COVID19
(This is a short expansion of a twitter stream-of-consciousness I horked up yesterday.)
The error almost everyone makes about COVID19 is to think of it as a virus that infects and kills people: but it's not.
COVID19 infects human (and a few other mammalian species—mink, deer) cells: it doesn't recognize or directly interact with the superorganisms made of those cells.
Defiance—a common human social response to a personal threat—is as inappropriate and pointless as it w
Crib Sheet: Dead Lies Dreaming
(Crib Sheet essays may contain spoilers for the book in question. Previously I refrained from writing them until the book was published in paperback, typically 12 months after first hardcover release. However, times are a'changing. In the UK, Orbit released the paperback of Dead Lies Dreaming only six months after the hardback. And in the USA, Tor.com is an ebook-first publisher; while they issue my books in hardcover, there will probably never be a paperback release unless for some reason th
Crib Sheet: The Labyrinth Index
This is well overdue because I kind of lost track of my irregular series of spoileriffic essays about my novels: it should have turned up in 2019, but I was dealing with a parental death, then trying to get my writing re-started (you might have noticed 2019 was The Year Without A Novel, for the first time since 2007), then COVID19 hit.
So I'm going to try and think myself back into my 2018 state of mind and brain dump whatever I can, and you can ask me fill-in questions in the comment
Titles By Charles Stross
Quantum of Nightmares (Laundry Files Book 11) Jan 11, 2022
by Charles Stross
A unique blend of espionage thrills and Lovecraftian horror, Hugo Award-winning author Charles Stross's Laundry Files continues with Quantum of Nightmares.
It's a brave new Britain under the New Management. The avuncular Prime Minister is an ancient eldritch god of unimaginable power. Crime is plummeting as almost every offense is punishable by death. And everywhere you look, there are people with strange powers, some of which they can control, and some, not so much.
Hyperorganized and formidable, Eve Starkey defeated her boss, the louche magical adept and billionaire Rupert de Montfort Bigge, in a supernatural duel to the death. Now she's in charge of the Bigge Corporation—just in time to discover the lethal trap Rupert set for her long ago.
Wendy Deere's transhuman abilities have gotten her through many a scrape. Now she's gainfully employed investigating unauthorized supernatural shenanigans. She swore to herself she wouldn't again get entangled with Eve Starkey's bohemian brother Imp and his crew of transhuman misfits. Yeah, right.
Mary Macandless has powers of her own. Right now she's pretending to be a nanny in order to kidnap the children of a pair of famous, Government-authorized superheroes. These children have powers of their own, and Mary Macandless is in way over her head.
Amanda Sullivan is the HR manager of a minor grocery chain, much oppressed by her glossy blonde boss—who is cooking up an appalling, extralegal scheme literally involving human flesh.
All of these stories will come together, with world-bending results...
"For all of Stross's genuine ability to spook and dismay, The Laundry Files are some of the most tremendously humane books I've ever read."
—Tamsyn Muir, author of Gideon the Ninth and Harrow the Ninth
At the Publisher's request, this title is being sold without Digital Rights Management Software (DRM) applied.
Other Formats: Audible Audiobook , Hardcover
Sold by: Macmillan
Dead Lies Dreaming (Laundry Files Book 10) Oct 27, 2020
When magic and superpowers emerge in the masses, Wendy Deere is contracted by the government to bag and snag supervillains in Hugo Award-winning author Charles Stross' Dead Lies Dreaming: A Laundry Files Novel.
As Wendy hunts down Imp—the cyberpunk head of a band calling themselves "The Lost Boys"— she is dragged into the schemes of louche billionaire Rupert de Montfort Bigge. Rupert has discovered that the sole surviving copy of the long-lost concordance to the one true Necronomicon is up for underground auction in London. He hires Imp's sister, Eve, to procure it by any means necessary, and in the process, he encounters Wendy Deere.
In a tale of corruption, assassination, thievery, and magic, Wendy Deere must navigate rotting mansions that lead to distant pasts, evil tycoons, corrupt government officials, lethal curses, and her own moral qualms in order to make it out of this chase alive.
Other Formats: Audible Audiobook , Hardcover , Paperback
The Atrocity Archives (Laundry Files Book 1) Jan 3, 2006
The first novel in Hugo Award-winning author Charles Stross's witty Laundry Files series.
Bob Howard is a low-level techie working for a super-secret government agency. While his colleagues are out saving the world, Bob's under a desk restoring lost data. His world was dull and safe - but then he went and got Noticed.
Now, Bob is up to his neck in spycraft, parallel universes, dimension-hopping terrorists, monstrous elder gods and the end of the world. Only one thing is certain: it will take more than a full system reboot to sort this mess out . . .
Sold by: Penguin Group (USA) LLC
Invisible Sun (Empire Games Book 3) Sep 28, 2021
The alternate timelines of Charles Stross' Empire Games trilogy have never been so entangled than in Invisible Sun—the techno-thriller follow up to Dark State—as stakes escalate in a conflict that could spell extermination for humanity across all known timelines.
An inter-timeline coup d'état gone awry.
A renegade British monarch on the run through the streets of Berlin.
And robotic alien invaders from a distant timeline flood through a wormhole, wreaking havoc in the USA.
Can disgraced worldwalker Rita and her intertemporal extraordaire agent of a mother neutralize the livewire contention before it's too late?
The Labyrinth Index (Laundry Files Book 9) Oct 30, 2018
"A bizarre yet effective yoking of the spy and horror genres." —The Washington Post Book World
The Lovecraftian Singularity has descended upon the world in The Labyrinth Index, beginning an exciting new story arc in Charles Stross' Hugo Award-winning Laundry Files series!
Since she was promoted to the head of the Lords Select Committee on Sanguinary Affairs, every workday for Mhari Murphy has been a nightmare. It doesn't help that her boss, the new Prime Minister of Britain, is a manipulative and deceptive pain in the butt. But what else can she expect when working under the thumb of none other than the elder god N'yar Lat-Hotep a.k.a the Creeping Chaos?
Mhari's most recent assignment takes her and a ragtag team of former Laundry agents across the pond into the depths of North America. The United States president has gone missing. Not that Americans are alarmed. For some mysterious reason, most of the country has forgotten the executive branch even exists. Perhaps it has to do with the Nazgûl currently occupying the government and attempting to summon Cthulhu.
It's now up to Mhari and her team to race against the Nazgûl's vampire-manned dragnet to find and, for his own protection, kidnap the president.
Who knew an egomaniacal, malevolent deity would have a soft spot for international relations?
Other Formats: Audible Audiobook , Hardcover , Paperback , Audio CD
The Jennifer Morgue (Laundry Files Book 2) Dec 18, 2008
Bob Howard, geekish demonology hacker extraordinaire for "The Laundry," must stop ruthless billionaire Ellis Billington from unleashing an eldritch horror, codenamed "Jennifer Morgue," from the ocean's depths for the purpose of ruling the world...
The Delirium Brief: A Laundry Files Novel Jul 11, 2017
*2018 LOCUS AWARD FINALIST FOR BEST FANTASY NOVEL CATEGORY*
"Smart, literate, funny." —Lev Grossman, author of The Magicians
Someone is dead set to air the spy agency's dirty laundry in The Delirium Brief, the next installment to Charles Stross' Hugo Award-winning comedic dark fantasy Laundry Files series!
Bob Howard's career in the Laundry, the secret British government agency dedicated to protecting the world from unspeakable horrors from beyond spacetime, has entailed high combat, brilliant hacking, ancient magic, and combat with indescribably repellent creatures of pure evil. It has also involved a wearying amount of paperwork and office politics, and his expense reports are still a mess.
Now, following the invasion of Yorkshire by the Host of Air and Darkness, the Laundry's existence has become public, and Bob is being trotted out on TV to answer pointed questions about elven asylum seekers. What neither Bob nor his managers have foreseen is that their organization has earned the attention of a horror far more terrifying than any demon: a British government looking for public services to privatize.
Inch by inch, Bob Howard and his managers are forced to consider the truly unthinkable: a coup against the British government itself.
Laundry Files
1. The Atrocity Archives
2. The Jennifer Morgue
3. The Fuller Memorandum
4. The Apocalypse Codex
5. The Rhesus Chart
6. The Annihilation Score
7. The Nightmare Stacks
Other Formats: Audible Audiobook , Hardcover , Paperback , Audio CD , Digital
The Fuller Memorandum (Laundry Files Book 3) Jun 30, 2010
View our feature on Charles Stross' The Fuller Memorandum.
National bestselling author Charles Stross brings back Bob Howard-"a British super spy with a long-term girlfriend, no fashion sense, and an aversion to martinis" (San Francisco Chronicle)
Bob Howard is taking a much needed break from the field to catch up on his filing in The Laundry's archives when a top secret dossier known as The Fuller Memorandum vanishes-along with his boss, who the agency's executives believe stole the file.
Determined to discover exactly what the memorandum contained, Bob runs afoul of Russian agents, ancient demons, and the apostles of a hideous faith, who have plans to raise a very unpleasant undead entity known as the Eater of Souls...
The Nightmare Stacks (Laundry Files Book 7) Jun 28, 2016
The Laundry Files' "fast-paced blend of espionage thrills, mundane office comedy and Lovecraftian horror" (SFX) continues as Hugo Award-winning author Charles Stross assigns a day trader to a permanent position on the night shift...
After stumbling upon the algorithm that turned him and his fellow merchant bankers into vampires, Alex Schwartz was drafted by the Laundry, Britain's secret counter-occult agency that's humanity's first line of defense against the forces of darkness. Dependent on his new employers for his continued existence—as Alex has no stomach for predatory blood-sucking—he has little choice but to accept his new role as an operative-in-training.
For his first assignment, Alex is dispatched to Leeds to help assess the costs of renovating a 1950s Cold War bunker for use as the Laundry's new headquarters. Unfortunately, Leeds is Alex's hometown, and the thought of breaking the news to his parents that he's left banking for the Civil Service, while hiding his undead condition, is causing him more anxiety than learning how to live as a vampire secret agent preparing to confront multiple apocalypses.
Alex's only saving grace is Cassie Brewer, a drama student appearing in the local goth festival who is inexplicably attracted to him despite his awkward personality and massive amounts of sunblock.
But Cassie has secrets of her own—secrets that make Alex's nightlife behaviors seem positively normal...
The Apocalypse Codex (Laundry Files Book 4) Jul 3, 2012
For outstanding heroism in the field (despite himself), computational demonologist Bob Howard is on the fast track for promotion to management within the Laundry, the supersecret British government agency tasked with defending the realm from occult threats. Assigned to External Assets, Bob discovers the company (unofficially) employs freelance agents to deal with sensitive situations that may embarrass Queen and Country.
So when Ray Schiller—an American televangelist with the uncanny ability to miraculously heal the ill—becomes uncomfortably close to the Prime Minister, External Assets dispatches the brilliant, beautiful, and entirely unpredictable Persephone Hazard to infiltrate the Golden Promise Ministries and discover why the preacher is so interested in British politics. And it's Bob's job to make sure Persephone doesn't cause an international incident.
But it's a supernatural incident that Bob needs to worry about—a global threat even the Laundry may be unable to clean up…
The Rhesus Chart (Laundry Files Book 5) Jul 1, 2014
The Hugo Award-winning author of The Delirium Brief reveals the secrets of The Laundry Files in an adventure of Lovecraftian horror and espionage hi-jinks...
As a newly appointed junior manager within the Laundry—the clandestine organization responsible for protecting Britain against supernatural threats—Bob Howard is expected to show some initiative to help the agency battle the forces of darkness. But shining a light on what's best left in the shadows is the last thing Bob wants to do—especially when those shadows hide an occult parasite spreading a deadly virus.
Traders employed by a merchant bank in London are showing signs of infection—an array of unusual symptoms such as super-strength and -speed, an uncanny talent for mind control, an extreme allergic reaction to sunlight, and an unquenchable thirst for blood. While his department is tangled up in bureaucratic red tape (and Buffy reruns) debating how to stop the rash of vampirism, Bob digs deeper into the bank's history—only to uncover a blood-curdling conspiracy between men and monsters...
Empire Games: A Tale of the Merchant Princes Universe Jan 17, 2017
Charles Stross builds a new series with Empire Games, expanding on the world he created in the Family Trade series, a new generation of paratime travellers walk between parallel universes.
The year is 2020. It's seventeen years since the Revolution overthrew the last king of the New British Empire, and the newly-reconstituted North American Commonwealth is developing rapidly, on course to defeat the French and bring democracy to a troubled world. But Miriam Burgeson, commissioner in charge of the shadowy Ministry of Intertemporal Research and Intelligence—the paratime espionage agency tasked with catalyzing the Commonwealth's great leap forward—has a problem. For years, she's warned everyone: "The Americans are coming." Now their drones arrive in the middle of a succession crisis.
In another timeline, the U.S. has recruited Miriam's own estranged daughter to spy across timelines in order to bring down any remaining world-walkers who might threaten national security.
Two nuclear superpowers are set on a collision course. Two increasingly desperate paratime espionage agencies try to find a solution to the first contact problem that doesn't result in a nuclear holocaust. And two women—a mother and her long-lost daughter—are about to find themselves on opposite sides of the confrontation.

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Mock the input() in the module body I've read a lot of materials, but nothing helped. I tried to write some unit tests using pytest and faced the following problem: i can mock the input() inside the function i want to test (using @mock.patch or monkeypatch.setattr for builtins.input).
This is the code in my module:
def double():
    a = input()
    return int(a) * 2

And this is my test file:
# @mock.patch('builtins.input', return_value='13')
def testing(monkeypatch):
    monkeypatch.setattr('builtins.input', lambda: "13")
    assert double() == 26

But when i have input() in the body of my module i get the error - OSError: pytest: reading from stdin while output is captured!  Consider using -s.
Example:
def double(a):
    return int(a) * 2

x = input()

I can fix this with adding if __name__ == "__main__" before x = input(), but i'm curious if i can solve this in any other way. Thank you for your help in advance!


text:
Antonio Monge Rivero dit El Planeta, gitan espagnol né aux environs de Cadix vers 1789, mort à Malaga le , est le premier chanteur (cantaor) et auteur de flamenco connu, l'un des plus anciens jamais répertorié avec Tío Luis el de la Juliana, autre précurseur historique. Il était aussi guitariste. Il serait aussi l'arrière grand-père de Manolo Caracol. On lui attribue l'invention des styles de chant polos, seguiriyas et des cañas.

Serafín Estébanez Calderón le mentionne dans son livre Scènes andalouses publié en 1847. Cet auteur précise qu'il chantait en s'accompagnant à la guitare.

Liens externes

Références

Personnalité andalouse
Chanteur hispanophone
Chanteur de flamenco
Guitariste de flamenco
Naissance en 1789
Naissance à Cadix
Décès en septembre 1856
Décès à Malaga

redpajama_set_name: RedPajamaWikipedia


So another year… And another You…or the same 'old you'? Or maybe the real you this time? Which is it to be? Everything is a choice.
So how are you feeling? Do you feel that something is different? That something has shifted? Something that you can't quite put your finger on…something imperceptible?
Do You Feel Guilty About Enjoying Yourself?
Do You Understand The Importance Of Love?