text:
\section{Introduction}

The FPGA implementation of Convolutional Neural Network (CNN) inference accelerators has become a hot topic of research as the efficiency of the inference process increasingly drives the cost of ML-based mobile and datacenter workloads \cite{hazelwood2018applied,wu2019machine}. Modern high-accuracy CNNs for vision applications have deep and complex topologies, consisting of a multitude of convolutional layers \cite{rawat2017deep}\cite{He2015}. While these deep networks have well-established advantages with regard to expressiveness and generalization \cite{zhang2018tropical,Poggio201907369}, they create difficulty for FPGA acceleration due to the large number of parameters which need to be stored and operations to be computed for each inference.

Figure \ref{fig:systolic_v_pipeline} illustrates two approaches to inference acceleration on FPGA. Most FPGA inference accelerators are based on overlay architectures (Fig. \ref{fig:systolic_v_pipeline} left) \cite{guo2017survey,abdelouahab2018accelerating}, i.e. general-purpose matrix multiplication circuits onto which compute is scheduled to execute the CNN layers in sequence. This approach is flexible, as it enables potentially any CNN topology to be executed by a single accelerator, but is not efficient: it requires frequent transfers of weights and activations (i.e. outputs of hidden layers) between FPGA on-chip scratchpad memories, and external memory (DDR/HBM), arithmetic precision is fixed, and the high execution latency of layer-by-layer compute makes real-time inference difficult.

\begin{figure}[]
\centering
\includegraphics[width=0.45\textwidth]{graphics/systolic_v_pipeline.png}
\caption{FPGA Inference Accelerator Architectures}
\vspace{-0.25cm}
\label{fig:systolic_v_pipeline}
\end{figure}

An alternative FPGA accelerator architecture is custom dataflow (Fig. \ref{fig:systolic_v_pipeline} right), whereby the structure of the FPGA-implemented logic mirrors the topological structure of the CNN, creating a pipeline of smaller compute units, each performing the computation corresponding to one specific CNN layer using weights stored in On-Chip Memory (OCM) and the arithmetic of processing elements is tailored to the precision requirements of each layer. As weights and activations never move off-chip, latency and power dissipation are reduced. Custom dataflow for CNN inference has achieved the lowest latency, highest throughput, and lowest power dissipation for image classification and related tasks up to CIFAR-10 complexity \cite{finn_trets}. However, this accelerator architecture cannot scale to arbitrarily large CNNs, as it is fundamentally limited by available on-chip resources - LUTs and DSP blocks - required to implement compute units for each CNN layers, and critically, the size of OCM required to store the weights. Furthermore, due to mismatches between the sizes of weight buffers and of FPGA OCM blocks, a significant part of the available OCM cannot be utilized for storing weights, further limiting the size of networks which can be accelerated in custom dataflow.

In this work we approach this problem and propose a method to make more of the FPGA OCM available for weight storage in custom pipeline dataflow (onwards denoted simply as dataflow). We present the largest and deepest CNNs implemented to date in single-chip dataflow on FPGA. Using quantization techniques, we develop high-accuracy CNN image classification models based on the ResNet-50 topology, utilizing binary (1-bit) and ternary (2-bit) weights respectively, thus enabling their implementation in existing FPGAs.

Furthermore, we alleviate the OCM bottleneck of dataflow acceleration as follows. We first modify the popular FINN dataflow accelerator architecture\cite{finn_trets} by utilizing a producer-consumer, Globally Asynchronous Locally Synchronous (GALS) approach for weight storage, whereby memory resources operate at a faster frequency than the compute logic. By leveraging the memory to compute frequency ratio $R_F$, we can multiplex the two available RAM ports on Block RAMs (BRAMs) in Xilinx FPGAs to expose $2R_F$ virtual RAM ports to the compute logic. We subsequently utilize a bin packing algorithm to pack parameter memories in groups of size up to $2R_F$, such that each group optimally fills one BRAM, and each member of the group can be read in every compute cycle. This design methodology, which we call Frequency Compensated Memory Packing (FCMP), improves the OCM utilization with minimal reduction in inference throughput and no modifications to the physical structure of the FPGA fabric.

To validate our methodology, we apply it to BNN-Pynq\footnote{https://github.com/Xilinx/BNN-PYNQ}, a collection of FINN-generated medium-sized CIFAR-10 inference accelerators for binarized neural networks, targeting Zynq FPGA devices, as well as ResNet-50 targeting Alveo accelerator cards. Our specific contributions are:

\begin{itemize}
    \item We describe two quantized ResNet-50 CNN models, trained for binary and ternary weights and optimized for FPGA dataflow execution, which achieve 87.64\% and 89.38\% ImageNet Top-5 accuracy respectively, and the highest compute density to date for models amenable to dataflow execution on a single FPGA. We demonstrate over 2700 FPS and under 2ms latency for the binary-weight ResNet-50 on Alveo U250.
    \item We describe modifications to the FINN dataflow architecture and an accelerator design methodology, which utilizes FCMP to maximize the efficiency of OCM utilization for CNN dataflow accelerators at small or large scales.
    \item We apply the previously described methodology to the BNN-Pynq and ResNet accelerators and achieve up to 30\% OCM reduction with a 5\% LUT utilization overhead, and at most 32\% decrease in top frequency. This reduction in OCM utilization opens up opportunities for implementing the accelerators in smaller devices than previously possible. The technique enables us to implement the binary ResNet50 in Alveo U280 at the same folding factors used on Alveo U250, and shifts the design bottleneck of the ternary ResNet-50 from OCM to LUTs.
\end{itemize}

We provide background on FPGA dataflow inference and OCM optimization techniques in the following section and describe our dataflow accelerators for ResNets in Section \ref{sec:resnet}. We describe our frequency compensated memory packing methodology in Section \ref{sec:Packing}, and evaluate it in Section \ref{sec:Evaluation}.

\section{Background and Previous Work}

\subsection{FPGA Dataflow Inference of Quantized CNNs}

Recent work on techniques for neural network binarization \cite{courbariaux2016binarized, zhou2016dorefa} has reduced the computational and memory requirements of NN inference, enabling the implementation of multiple dataflow accelerators and accelerator frameworks \cite{finn_fpga17, finn_trets, ghasemzadeh2018rebnet} for binarized and quantized NNs (QNNs) in FPGA. However, most dataflow accelerators described in previous work target relatively small binarized CNNs which achieve acceptable accuracy on simple image and text processing tasks, e.g. classification for MNIST, CIFAR-10, SVHN datasets in \cite{finn_fpga17} and character recognition in \cite{rybalkin2018finn}. Dataflow-style FPGA-accelerated binarized CNNs for the ImageNet \cite{deng2009imagenet} 1000-class classification problem have been developed utilizing the FINN \cite{finn_trets} and ReBNet \cite{ghasemzadeh2018rebnet} accelerator frameworks, but have limited Top-1 accuracy in the range of 40-50\%. Recent work in \cite{customjpegresidual} increases Top-1 accuracy of dataflow accelerators to 70\%, but is still lower compared to equivalent GPU and CPU inference solutions and even overlay-style FPGA inference.

To date, achieving state of the art accuracy with dataflow accelerators in FPGA remains a challenge. While approaches such as utilizing higher weight precision, e.g. 2-bit ternary quantization \cite{li2016ternary}, or deeper NNs such as ResNet-50 \cite{He2015} have the potential to increase achievable accuracy, they also significantly increase the size of the required weight storage, making dataflow acceleration difficult.

\subsection{Memory Efficiency in Dataflow FPGA Inference of CNNs}

Modern FPGA devices advertise large amounts of OCM but most of it is implemented as RAM blocks embedded within the fabric, of a fixed shape and number of ports with typically narrow and deep aspect ratio, e.g. 18 Kb (18b wide and 1024-deep) 2-port memories in Xilinx FPGAs. Efficiently mapping the arbitrarily shaped weight memories of a CNN dataflow accelerator to block RAM resources on FPGA is challenging, due to mis-matches between desired and available memory shapes. Often, most of the Block RAMs (BRAM) are not utilized to their full capacity, and therefore, the actual usable OCM is much less than the device maximum. As a result, OCM is often the bottleneck in dataflow acceleration, as illustrated in Table \ref{tab:bnnpynq_bottleneck} for the accelerators in the BNN-Pynq collection. Note how the BRAM utilization is highest of all resource types.

\begin{table}[]
\small
\caption{\label{tab:bnnpynq_bottleneck}Resource Utilization of FINN Dataflow Accelerators (BNN-Pynq) on Zynq 7020}
\centering
\begin{tabular}{ccccc}
\toprule
\textbf{Accelerator} & \textbf{\makecell{BRAM\\(\%)}} & \textbf{\makecell{LUT\\(\%)}} & \textbf{\makecell{DSP\\(\%)}} \\\midrule
CNV-W1A1        & 88    & 49       &  11  \\
CNV-W1A2        & 94    & 76       &  12  \\
CNV-W2A2        & 100   & 70       &  15  \\
LFC-W1A1        & 78    & 53       &  2  \\
LFC-W1A2        & 79    & 92       &  2  \\
\end{tabular}
\end{table}

We can distinguish three causes for the inefficient use of FPGA OCM: accelerator folding, convolution kernel sizes, and pruning.

\paragraph{Throughput Requirements}
For FINN-style accelerators in particular, the computational throughput can be scaled by folding, i.e allocating a variable number of vector Processing Elements (PEs) to each layer, and scaling the SIMD vector length of the PE. Previous work  has demonstrated this approach enables FINN accelerators to scale to various sizes of FPGA. However, the folding factor not only affects compute logic but also determines shapes (widths, depths) on the parameter memory, in order to achieve parameter readback at the same rate as the compute. Figure \ref{fig:efficiency_v_simd} illustrates this effect - as we double or quadruple the compute capability, we utilize more BRAMs and fewer words of each BRAM. Therefore, despite the total number of parameters being constant, the number of block RAMs scales proportionally to the compute resources of the accelerator.

\begin{figure}[]
\centering
\includegraphics[width=0.3\textwidth, trim={9cm, 4.5cm, 10cm, 4cm}, clip=true]{graphics/buffer_unfold.pdf}
\caption{Efficiency Decreases with Increased Parallelism}
\vspace{-0.25cm}
\label{fig:efficiency_v_simd}
\end{figure}

\begin{equation}\label{eq:efficiency}
E=\frac{N_{p}\cdot W}{N_{RAM}\cdot C_{RAM}}
\end{equation}

We define the physical RAM mapping efficiency as in Equation \ref{eq:efficiency}, where W is the bitwidth of the NN weights, and $N_{p}$ is the number of parameters. $C_{RAM}$ is the total capacity of the RAM blocks required to implement the weight buffer, which depends on the memory width given by the product of $N_{PE}$ and $N_{SIMD}$, the parallelism parameters of the accelerator, and the depth of the parameter memory (see \cite{kroes2020pack} for an exact analytic expression). As parallelism increases, memory depth is reduced, width is increased, increasing $N_{RAM}$ and decreasing efficiency.

\paragraph{Convolution Kernel Sizes}
Odd-sized convolutional kernels are ubiquitous in deep learning, especially 3x3 kernels (K=3), but also 5x5 (K=5) and larger.
In FINN accelerators, weight buffer depth is proportional to the square of the kernel dimension. We therefore arrive at buffer depths which are multiples of $K^2$, with the resulting efficiency being at most $K^2/2^{ceil(log2(K^2))}$. This measure is lowest for the very popular 3x3 kernel utilized in all modern CNN topologies, and highest for the 1x1 (pointwise) convolution.

\paragraph{Filter Pruning}
Filter pruning techniques \cite{pruning2019gate} eliminate redundant filters from a CNN thereby reducing the total compute required for inference as well as the total number of weights. For FPGA dataflow inference, this reduction in the number of filters for a given layer reduces the depth of the weight buffer. In most cases, this will only lead to an increase in OCM utilization inefficiency, instead of an actual reduction in BRAM utilization. Therefore, the benefits of pruning cannot be fully utilized.

\subsection{Buffer to BRAM Packing}
The problem of efficient mapping of logical buffers to block RAMs has been approached in MPack \cite{chow_mempack} and MemPacker \cite{karchmer1994pack}. MemPacker is based on a branch-and-bound algorithm, while MPack utilizes a simulated annealing approach to discover a good mapping of multiple logical buffers in a single block RAM. MPack supports both vertical co-location (a word from each buffer are concatenated into a physical RAM word) or horizontal (the first buffer occupies the lower addresses, then subsequent buffers start at the next address after the previous buffer ends). MPack is demonstrated on relatively small examples compared to modern inference accelerators, while MemPacker has a high worst-case time complexity. An alternative packing methodology is described in \cite{kroes2020pack} based on genetic algorithms, which is able to perform the packing in a matter of seconds for FINN-style FPGA dataflow inference accelerators up to and beyond the size of the ResNet-50 under analysis in our work.

While the results in \cite{kroes2020pack} indicate an over 30\% increase in OCM mapping efficiency is possible for ResNet-like topologies using the FINN dataflow architecture, their proposed methodology, as well as that in \cite{chow_mempack}, suffer from an associated reduction in the perceived readback throughput, proportional to the maximum number of logical buffers sharing a BRAM port. For example, each of 4 buffers packed into a dual-port RAM is read back once every 2 cycles, compared to packing 2 buffers into the same RAM, which allows readback of each buffer in every cycle. A potential solution is described in \cite{ullah2018efficient} wherein a Block RAM is overclocked relative to the surrounding computation logic, allowing its ports to be shared without loss of throughput. Our approach is a combination of these techniques and in the remaining sections we evaluate the feasibility of its application to dataflow CNN acceleration as well as the costs associated with it in terms of resource utilization and achievable frequencies.

\section{ResNet-50 Dataflow Inference on FPGA}\label{sec:resnet}

ResNet-50 \cite{He2015} is a deep CNN which achieves high classification accuracy on the ImageNet \cite{deng2009imagenet} benchmark. Unlike previously dataflow-acclerated CNNs, ResNet-50 has a non-linear topology consisting of branch-and-join structures called Residual Blocks (ResBlocks) of 2 types, consisting of 3 or 4 convolutions respectively, with 3 convolutions on one branch and one convolution optionally present on the second branch. In each ResBlock, one convolution utilizes a 3x3 kernel while the others are 1x1 kernels. The entire ResNet-50 consists of 16 such daisy-chained ResBlocks and additional layers at the top (input) and bottom (output) of the network.
In 4 of the 16 ResBlocks, a doubling of the feature map channels also occurs, resulting in an increase from 64 to 1024 feature map channels in the ResBlock sequence.
Consequently, this results in an increase in parameter memory size and overall memory requirement for ResBlocks in the bottom part of the NN compared to the ones at the top.

\subsection{ResNet-50 Quantization}

To enable the FINN-compatible quantization of the network, we reimplemented the original ResNet-50 v1.5 topology in PyTorch \cite{ketkar2017introduction} utilizing quantized convolutions and replacing ReLU activation layers with quantized activation layers from the Brevitas\footnote{https://github.com/Xilinx/brevitas} quantization-aware training library. The weights of the first and last layers were quantized to signed 8 bit integers. We developed two quantized ResNet50 versions, with weights of convolutions within ResBlocks quantized to either 1 bit (binary) or 2 bits (ternary) respectively. In both models, activations leading into and out of the elementwise addition are quantized to 4 bits signed integers, and all other activations are quantized to 2 bits signed integer. Floating-point batch normalization layers are added before every quantized activation layer.
The floating-point scale factors utilized by each activation layer are learned during the quantization-aware training process, using the technique proposed by Esser~et~al.~\cite{esser2019learned} and Jain~et~al.~\cite{jain2019trained}, while making sure to maintain the same scaling factor on all inputs to each elementwise addition.

This particular configuration of the topology achieves a Top-1/Top-5 accuracy of 67.27/87.64 percent for binary weights and 69.85/89.38 percent for ternary weights, and allows the resulting quantized model to be streamlined using FINN.

\begin{figure}[]
\centering
\includegraphics[trim={5cm, 0.5cm, 5cm, 1cm}, clip=true, width=0.45\textwidth]{graphics/resblocks.pdf}
\caption{Residual Block Structure}
\vspace{-0.25cm}
\label{fig:resblock_structure}
\end{figure}

\subsection{ResNet-50 Dataflow Implementation}

In the FINN streamlining process, batch normalization and quantized activation functions are merged into thresholding operations, which are subsequently merged with quantized convolutions into FINN Matrix-Vector-Activation (MVAU) components which can be implemented in FPGA. The streamlined ResBlocks are illustrated in Figure \ref{fig:resblock_structure}. Utilizing the MVAU resource usage modelling described in \cite{finn_trets}, we developed a folding solution (i.e. values for PE and SIMD parameters for each MVAU) for the binary ResNet-50 which maximizes throughput within the resource limitations of the Alveo U250 FPGA, the largest currently available Xilinx FPGA accelerator card. This modelling exercise indicates that the OCM utilization efficiency for both ResNet-50 models is slightly above 50\%, and OCM is the implementation bottleneck, as expected from dataflow CNN accelerators in the literature.

We utilize  the FINN HLS library\footnote{https://github.com/Xilinx/finn-hlslib} to implement the resblock convolutions as MVAU dataflow blocks, illustrated in Figure \ref{fig:resblock_structure} in black. Other components were implemented in custom C++ code for stand-alone thresholding, stream duplication and elementwise addition, then added to the FINN HLS library. A relatively deep FIFO is required on the bypass path of the resblock to store activations temporarily. The C++ implementation allows setting the precision of stored weights, as well as the values of the PE and SIMD parallelism parameters of the FINN MVAU. This enables the same code-base to support both the binary and ternary variants of the ResNet-50, as well as multiple folding solutions.

\begin{figure}[]
\centering
\includegraphics[width=0.475\textwidth]{graphics/resnet_resblock_utilization.pdf}
\caption{ResNet-50 Resource Utilization per ResBlock}
\vspace{-0.25cm}
\label{fig:resblock_utilization}
\end{figure}

\begin{figure}[]
\centering
\includegraphics[trim={1cm 2.5cm 1cm 2.5cm}, clip=true, width=0.475\textwidth]{graphics/rn50-florp.pdf}
\caption{ResNet-50 Floorplan on Alveo U250}

\label{fig:resnet_floorplan_u250}
\end{figure}

\begin{table*}[]
\caption{Comparison of Selected FPGA Dataflow Accelerators for ImageNet\label{tab:acc_comparison}}
\centering
\begin{tabular}{ccccccccccc}
\toprule
\textbf{Accelerator} & \textbf{\makecell{Acc. \\ (Top-1 \%)}} & \textbf{TOp/s} & \textbf{\makecell{FPGA \\ Platform}} & \textbf{\makecell{$F_{max}$ \\ (MHz)}} & \textbf{kLUTs} & \textbf{BRAM18s} & \textbf{DSPs} & \textbf{\makecell{Max \\FPS}} & \textbf{\makecell{Min \\ Latency (ms)}} & \textbf{\makecell{Max \\ Power (W)}} \\ \midrule
DoReFaNet-DF\cite{finn_trets}               & 50                  & 11.4           & AWS F1                 & 155           & 477     & 1332      & N/A      & 5241 & N/A & N/A   \\
ReBNet Arch3\cite{ghasemzadeh2018rebnet}    & 41                  & N/A           & VCU108          & 200           & 188     & 3125      & 768      & 170-520 & N/A & N/A   \\
ShuffleNetV2-W1A8\cite{customjpegresidual}    & 70.8                  & 2.42           & AWS F1          & 300           & 274     & 2746      & 2370      & 3321 & N/A & 75   \\
RN50-W1A2 (ours)                       & 67.3                  & 18.3           & Alveo U250             & 195           & 1027     & 3870      & 1611     & 2703  & 1.9 & 71  \\\bottomrule
\end{tabular}
\end{table*}

We synthesized the residual blocks individually with Vitis 2019.2 to evaluate resource usage when targeting Xilinx UltraScale+ FPGAs and to validate the folding solution. Figure \ref{fig:resblock_utilization} indicates that LUT utilization is approximately constant for all ResBlocks but memory utilization increases dramatically towards the output of the network, proportionally with the number of channels. The unbalanced memory utilization creates placement and routing difficulties - the floorplan for the ResNet-50 on Alveo U250 in Figure \ref{fig:resnet_floorplan_u250} is required to fit the accelerator into the device at the chosen folding solution. In our implementation we utilize mostly BlockRAM for weight storage and UltraRAM for activation storage, FIFOs and weights of the final fully connected layer in the ResNet50 topology.

Table \ref{tab:acc_comparison} presents a comparison between the binary ResNet-50 accelerator implemented on Alveo U250 and dataflow FPGA accelerators in previous work targeting ImageNet classification. Throughout the remainder of this paper we utilize the RN50 prefix to denote ResNet-50 accelerators and a suffix of form WxAy to denote an accelerator which utilizes x-bit weights and y-bit activations. Compared to previous FINN-based work, RN50-W1A2 has a 17\% higher Top-1 accuracy on ImageNet. The resource utilization is higher for our accelerator and the FPS lower compared to DoReFaNet-DF, a fact  explained partially by the difference in total work required (18 TOp/s for RN50-W1A2 vs 11 TOp/s for DoReFaNet-DF), and partially by the additional complexity of the Resnet topology. Compared to \cite{customjpegresidual}, our ResNet designs have slightly lower inference accuracy and throughput, slightly lower power, and a 25\% higher FPS/MHz, perhaps due to being implemented in a larger FPGA card. A variation of the RN50-W1A2 design is available online\footnote{https://github.com/Xilinx/ResNet50-PYNQ}.

LUT-wise, the binary ResNet-50 is small enough to implement in the Alveo U280, the next smallest card in the Xilinx range, but at the default OCM efficiency it requires too many RAMs. Using additional folding, the same network is able to fit the U280 at a 2x throughput penalty. Similarly, the ternary ResNet-50 LUT count is within the capacity of the U250, but its memory requirements are too great, therefore it also requires 2x folding and equivalent reduction in throughput according to the FINN model. This raises the possibility that an increase in OCM utilization efficiency would enable the implementation of the binary ResNet-50 on the smaller Alveo U280 and the ternary on U250 without requiring additional folding of the networks and the associated loss of throughput. In effect, for these two designs and their target FPGAs, an increase in OCM efficiency results in up to 2x increase in throughput. The next section proposes a methodology for increasing this efficiency.
\section{Frequency Compensated Memory Packing}\label{sec:Packing}

Our guiding insight is that in low-precision FPGA dataflow accelerators, unlike overlay accelerators, the computational logic is typically clocked at relatively low frequencies, in the range of 100 to 300 MHz. This is partly because the complex computation logic is implemented in LUTs rather than DSP tiles, and also because unlike overlays, dataflow accelerators are not usually hand-optimized, but rather are compiled directly from C++ by FPGA design tools. Conversely, memory resources utilize Block or Ultra RAM fabric primitives which are specified for operation at much higher speeds, over 600 MHz. We therefore conjecture that in most dataflow accelerator designs, memory resources are capable of significantly higher maximum frequency than compute logic. Since this higher memory speed cannot increase accelerator throughput, which is limited by the compute speed, we aim to utilize the speed differential to increase efficiency in storing CNN parameters to FPGA OCM.

The proposed clustering methodology consists of two complementary aspects. First, we employ asynchronous logic design techniques to maximize the read throughput of FPGA OCM, from the perspective of the compute logic. Secondly, we utilize a bin packing algorithm to discover optimal allocations of parameter memories to physical BRAMs, maximizing mapping efficiency, such as the one in \cite{kroes2020pack}.

To enable packing a number of partitions greater than the number of physical ports in each BRAM, we make two modifications to the FINN dataflow architecture. First, we separate each MVAU into two blocks: a weight storage block, which also reads the weights in a specific schedule to generate a stream of weight values, and a computational block, which performs the matrix-vector multiplication and activation. We further partition the design into two globally asynchronous but locally synchronous (GALS) islands, corresponding to the weight storage and compute respectively. Weights are transported from the memory storage clock domain to the compute clock domain through AXI Stream interfaces and corresponding asynchronous FIFOs. The original MVAU design as well as the GALS MVAU are illustrated in Figure \ref{fig:partitioned_design}.

\begin{figure}[]
\centering
\includegraphics[trim={1cm, 0.5cm, 1cm, 2cm}, clip=true, width=0.5\textwidth]{graphics/mem_arch.pdf}
\caption{GALS Design with Overclocked Memory}
\label{fig:partitioned_design}
\end{figure}

Given the lower complexity of the memory read logic compared to the computation logic, we assume we can clock the memory domain at higher frequency than the compute domain and multiplex the physical memory ports at run-time to read out more than 2 buffers from each physical RAM. The relationship between the number of buffers we can allocate to each physical BRAM without affecting throughput is given by Equation \ref{eq:bin_height}, and we denote the frequency ratio as $R_F$.

\begin{equation}\label{eq:bin_height}
H_B\leq N_{ports}\cdot\frac{F_{memory}}{F_{compute}}
\end{equation}

Figure \ref{fig:streamer_sym} illustrates two examples of multiple buffers co-located in a physical BRAM and accessed through port multiplexing in round-robin fashion. In the simplest case we can co-locate an even number $N_b$ of buffers in a BRAM, half of which are served by port A and the other half by port B. This use-case allows for integer frequency ratios $R_F$. At run-time, each of the co-located buffers is read $2/N_b$ times per clock cycle. From the compute logic's perspective, each of the buffers is read $2R_F/N_b$ times per clock cycle. To maintain the compute throughput, we require $R_F \geq N_b/2$. This case is exemplified in Figure \ref{fig:integer_stream}, for a scenario with 4 buffers packed into one BRAM.

\begin{figure}[]
\centering
\subfloat[][Example Packing for $R_F=2$]{
\includegraphics[trim={10cm, 2cm, 10cm, 2cm}, clip=true, width=0.23\textwidth]{graphics/streamer_sym.pdf}\label{fig:integer_stream}}
\hfill
\subfloat[][Example Packing for $R_F=1.5$]{
\includegraphics[trim={10cm, 0.75cm, 10cm, 2cm}, clip=true, width=0.23\textwidth]{graphics/streamer_asym2.pdf}\label{fig:fractional_stream}}
\caption{Streamers with round-robin Port Multiplexing}
\label{fig:streamer_sym}
\vspace{-0.25cm}
\end{figure}

Because $R_F=2$ might be difficult to achieve for some designs, we can also support fractional frequency ratios through the more complex use-case in Figure \ref{fig:fractional_stream}, where DWC denotes a data width converter. Here we want to co-locate an odd number of buffers and read them back through the 2 ports in a balanced way such that we can clock the memory at $R_F=N_b/2$ times the compute frequency. To achieve this, we split, for example, buffer 1 into two smaller buffers 1 (ODD) and 1 (EVEN) containing the odd and even addresses of the original buffer respectively, resulting in $N_b+1$ total buffers. Crucially, buffers 1 (ODD) and 1 (EVEN) must be allocated to different BRAM ports for readback.
In operation and without any backpressure applied to any stream, each buffer is read $2/(N_b+1)$ times in each memory cycle except buffer~1, which is being read through both ports and thus gets twice the throughput at $4/(N_b+1)$ reads per memory cycle and $2N_b/(N_b+1)$ reads per compute cycle when $R_F=N_b/2$. Since this value is greater than 1, the compute logic will apply backpressure to stream~1. If the memory streamer has adaptive read slot allocation, it will redistribute the cycles not utilized by stream~1 to other streams, enabling them to meet their throughput requirements as well. Figure \ref{fig:fractional_stream} exemplifies this approach for $N_b=3$. This approach is more complex because it requires additional logic for data width conversion.

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

We evaluate our OCM packing approach on two classes of inference accelerator: embedded-class CNN inference accelerators targeting Xilinx Zynq devices, denoted CNV, as well as Resnet-50, denoted RN50. CNV-W1A1 and CNV-W2A2 belong to the BNN-Pynq suite of binarized inference accelerators and target image classification, achieving an accuracy of 79.54\% and 84.8\% respectively on the CIFAR-10 benchmark.

To support the implementation of our methodology, we modified the FINN HLS Library by adding C++ functions describing the MVAU with streaming weights. To enable the more complex use-cases described in Section \ref{sec:Packing}, we also developed an adaptive weight streamer in Verilog RTL, packaged as a Vivado IP and available on GitHub\footnote{https://github.com/Xilinx/finn/tree/dev/finn-rtllib/memstream}.

We apply the methodology described in \cite{kroes2020pack} to each baseline accelerator to obtain a buffer packing configuration that minimizes OCM requirements. We utilize the same packing algorithm hyperparameters from \cite{kroes2020pack} listed in Table \ref{tab:hyperparams} for each accelerator respectively, where $H_b$ denotes the maximum allowed number of weight buffers packed into each BRAM, $N_p$ denotes the population size of the genetic algorithm, $N_t$ denotes the tournament selection group size, and the remaining parameters are probabilities affecting genetic mutation. For each accelerator, we develop an inter-layer packing solution, where buffers from different resblock convolutional layers are allowed to be packed together into a single BRAM, but in the case of Alveo, only for layers located on the same SLR. Therefore, the packing is floorplan-specific on Alveo devices. We exclude the top and bottom layers from the packing, since the first layer weights are small in size, while the last fully connected layer weight memory is stored in URAM, HBM or DDR, depending on the availability of each resource on the target FPGA platform. The maximum bin height is set to 3 or 4 in our experiments, requiring a memory frequency equal to 1.5x or 2x the compute frequency respectively to maintain the inference throughput.

\begin{table}[]
\small
\caption{\label{tab:hyperparams}Packing GA Hyperparameters}
\centering
\begin{tabular}{ccccccc}
\toprule
\textbf{Accelerator} & $H_B$ & $N_p$ & $N_{t}$ & $P_{adm}^{w}$ & $P_{adm}^{h}$ & $P_{mut}$ \\\midrule
CNV        & 3/4     & 50    & 5       &  0            & 0.1           & 0.3       \\
RN50    & 3/4    & 75    & 5       &  0            & 0.1           & 0.4       \\\bottomrule
\end{tabular}
\end{table}

Table \ref{tab:mem_subsystems} presents the resource utilization characteristics of original and packed memory subsystems of each accelerator. Packed memory subsystems are denoted by the suffix P3 and P4 depending on the maximum bin height allowed in each experiment. For ResNet accelerators which target multiple Alveo cards, an additional suffix indicates the target Alveo device. We observe approximately 20\% increase in OCM utilization efficiency for the CNV-W1A1 from FCMP, while the initial efficiency of CNV-W2A2 is higher and therefore the increase is less. Each of these pays a moderate cost in logic overhead of a few thousand LUTs. For ResNet accelerators, the efficiency gain is more dramatic, from close to 50\% to over 90\% but the LUT overhead is also greater in absolute terms, due to the much larger number of FIFOs required for clock domain crossing, as well as streamer addressing logic. In all cases we observe that using the smaller bin height of 3 yields less OCM efficiency (approximately 5-10\% less than for bin height of 4) but also more logic overhead, due to the more complex weight streamer structure as illustrated in Figure \ref{fig:streamer_sym}. However, the required memory frequency is 25\% lower for bin height 3 compared to bin height of 4, and therefore this style of memory packing may be more suitable for designs which have a relatively high compute frequency.

\begin{table}[t]
\caption{Packed Memory Subsystems\label{tab:mem_subsystems}}
\centering
\begin{tabular}{cccc}
\toprule
\textbf{\makecell{Accelerator}} & \textbf{\makecell{Logic \\ (kLUT)}} & \textbf{\makecell{BRAMs}} & \textbf{\makecell{E \\ (\%)}} \\ \midrule
\makecell{CNV-W1A1}        &               & 126           &  67.6     \\
\makecell{CNV-W1A1-P3}        & 4.8            & 108           &  78.8     \\
\makecell{CNV-W1A1-P4}        & 3.9            & 96           &  88.7     \\\midrule
\makecell{CNV-W2A2}        &               &  208         &  79.9        \\
\makecell{CNV-W2A2-P3}        & 6.7           &  194         &  85.6        \\
\makecell{CNV-W2A2-P4}        & 1.8           &  188         &  88.4        \\\midrule
\makecell{RN50-W1A2-U250} &                & 2320           &  52.9         \\
\makecell{RN50-W1A2-U250-P3} & 64.9          & 1804           &  68.0         \\
\makecell{RN50-W1A2-U250-P4} & 51.9          & 1632           &  75.3         \\
\makecell{RN50-W1A2-U280-P4} & 38.8          & 1327          &  92.6         \\
\makecell{RN50-W2A2-U250-P4} & 66.5          & 2642           & 92.6       \\\bottomrule
\end{tabular}
\end{table}

We next implement memory-packed as well as folded accelerators in their target platforms to evaluate and compare any loss of throughput. We opt to utilize packing with bin height of 4 for the highest density and lowest LUT overhead. Table \ref{tab:hw_packed} presents the results of implementation for each accelerator and target FPGA combination, where $\delta_{FPS}$ indicates relative throughput reduction from baseline and is defined as $min(F_c,F_m/2)$ divided by the original compute frequency of the baseline, non-packed accelerator. For CNV, we see no problem meeting the frequency requirement for the memory subsystem on the Zynq 7020. Furthermore, we were able to successfully port the CNV-W1A1-P4 accelerator to a smaller Zynq device, the 7012S, without any loss of throughput.

\begin{table}[]
\caption{\label{tab:hw_packed}Comparison of Packed and Folded Accelerators}
\centering
\begin{tabular}{cccccc}
\toprule
\multirow{2}{*}{Accelerator} & \multicolumn{2}{c}{Utilization (\%)} & \multicolumn{2}{c}{Frequency (MHz)} & \multirow{2}{*}{\makecell{$\delta_{FPS}$ \\ (\%)}}\\
                             & LUT              & BRAM              & $F_c$            & $F_m$            &          \\\midrule
CNV-W1A1-7020-P4               & 58               & 50                & 100              & 200              & 0   \\
CNV-W1A1-7012S-P4              & 90               & 97                & 100              & 200              & 0    \\\midrule
RN50-W1A2-U250-P4            & 63               & 62                & 183              & 363            & 12       \\
RN50-W1A2-U280-P4            & 99               & 59                & 138              & 373              & 32     \\
RN50-W2A2-U250-P4            & 94               & 75                & N/A              & N/A              & N/A              \\\midrule
RN50-W1A2-U280-F2            & 61               & 64                & 191              & -              & 51         \\
\bottomrule
\end{tabular}
\end{table}

For RN50 accelerators, timing closure with packed memory subsystems proved to be challenging at the target 200 MHz compute frequency and 400 MHz memory frequency. RN50-W1A2-U250-P4 achieved $R_F=2$ but both clocks failed their targets by approximately 12\%, with a corresponding decrease in inference throughput. RN50-W1A2-U280-P4 almost achieved timing closure for the memory clocks but the compute clock frequency decreased by 32\%. This is likely caused by the very dense design, utilizing 99\% of all LUTs on the U280. As an alternative method of OCM efficiency increase, we also include a folded version of the binary ResNet50 accelerator targeting the Alveo U280 with half the parallelism compared to the baseline, denoted RN50-W1A2-U280-F2. This acclerator achieves similar compute frequency on U280 to the baseline U250 accelerator, but has half the per-cycle throughput and is therefore 51\% slower than the baseline. We can therefore determine that the FCMP approach is 38\% faster than the folding approach for this design and platform combination. Finally, RN50-W2A2-U250-P4 synthesized within the resource limits of the U250, with LUTs becoming the bottleneck, but failed to be placed. This accelerator will require a combination of folding and packing to achieve a working implementation on U250, but crucially, OCM is no longer a bottleneck after memory packing.
\section{Conclusion}

The FCMP methodology presented in this work enables increased memory resource utilization efficiency in modern FPGAs. Our approach is general, i.e. can be applied to any digital circuit utilizing large parameter memories that are read in predictable fashion at run-time. In the specific context of dataflow CNN inference accelerators, where memory resource availability is often a design bottleneck, our technique can enable a specific accelerator design to target more devices by becoming more efficient in its block RAM usage. Furthermore, FCMP allows a more fine-grained resource-throughput trade-off compared to other alternatives such as accelerator folding. However, our experiments have shown that achieving timing closure at the desired frequency multiples for the memory subsystem is not always trivial, although in practice it is easier than initially expected, especially for monolithic FPGA devices. For multi-die FPGAs, the design process is complicated by the requirement for explicit floorplanning, and future work could focus on integrating the memory packing approach into a design space exploration framework to perform automatic floorplanning or partitioning of a design in the context of either multi-SLR or multi-FPGA systems. An alternative avenue for future work is to extend the concepts presented here to increase the OCM utilization efficiency of other parts of dataflow CNN accelerators, such as activation storage.

redpajama_set_name: RedPajamaArXiv


text:
Who are your people? We know it's important to be connected, but it's hard to build lasting friendships. What if taking one simple step changed everything?
God did not design us to go through life alone. He designed us to be in relationship with one another. LIFE Groups are the best way to help you go from just attending a service to connecting with others and developing a deeper relationship with Christ.
At Celebrate, we're trying to make it easier for you to find people who share your interests. We know that when you get together with people and have fun, you'll begin to grow into a strong community that serves and grows together.
LIFE Group F.A.Q.
What is a LIFE Group?
LIFE Groups are groups of 3-12 people who gather together weekly for purpose of fellowship and growth in Christ. We also like to say that LIFE Groups are how we "do life together". Others may call their groups 'Bible studies', 'community groups' or 'small groups'.
Is childcare provided?
Options are available for childcare. Some Groups may want to share the responsibility of watching the kids, split the cost for a sitter, or make other arrangements. Let us know if you would like to join a Group with a childcare option.
When and where do LIFE Groups meet?
Groups can meet on different days and times throughout the week. Groups can meet in homes, in coffee shops, or anywhere three or more can gather!
What kind of LIFE Groups are available?
We have four categories for LIFE Groups:
Women's Groups
Couples' Groups
Everybody Groups (Groups that are not specific to men or women, but are open for anyone to join)!
What if none of the days/times currently listed work for me?
Consider hosting a group on a day/time that works for you! When it comes starting a group think: You plus two. Who are two people you know that you would be able to meet together on a weekly basis? We will provide you with all the materials you will need. All you need to do is show up, and love on people. If you'd like to start hosting a group, contact us!
Monday 10-11:30am
Contact Liza for location details
Liza Sandoval
EMAIL Liza
Tuesday 6:30-8pm
500 E. 9th St,
Yankton, SD 57078
Alane Todd
EMAIL Alane
Tuesday 7-8pm
HyVee
2100 N. Broadway, Yankton, SD 57078
Jeff Todd
EMAIL Jeff
Thursdays 6:30-8pm
Everybody's Group
1004 E. 16th
Fred and Kathy Dehring
EMAIL Kathy
Let us help you find a Group!

redpajama_set_name: RedPajamaCommonCrawl


text:
Blown transformer leaves 130 Naperville households without power for hours Sunday
By Erin Hegarty
| Naperville Sun |
A blown transformer left 130 households in the Timber Creek subdivision in south Naperville without electricity Sunday — some for up to eight hours.
A equipment serving the subdivision, located near 95th Street and Plainfield-Naperville Road, failed just after 2:30 p.m.
Power was restored to 20 of the households by 3:38 p.m., 51 more by 7:45 p.m., another 78 by 8 p.m. and the remaining six by 10:35 p.m., said Linda LaCloche, spokeswoman for the city of Naperville.
Crews installed a new transformer to replace the one that went down, LaCloche said.
Transformers can fail due to several reasons, she said.
"Damage to wires or equipment elsewhere in the electrical grid can also cause too much electricity to flow into the transformer, causing it to blow," LaCloche said. "In addition, wear and corrosion over time can weaken the wire insulation, or other transformer components, increasing the possibility of a failure."
Temperatures during the time some residents were without power ranged from 92 degrees with 60 percent humidity to 82 degrees with 89 percent humidity, according to the National Weather Service.


text:
Could police have taken down the Las Vegas gunman Stephen Paddock sooner?
"By engaging the shooter ahead of time during this event, it could've saved a lot of heartache," a professor and former New York City police sergeant said.
By Michael BalsamoThe Associated Press
Tue., Oct. 10, 2017timer4 min. read
The revised timeline given by investigators for the Las Vegas massacre raises questions about whether better communication might have allowed police to respond more quickly and take out the gunman before he could kill and wound so many people.
On Monday, Sheriff Joe Lombardo said Stephen Paddock shot and wounded a Mandalay Bay hotel security guard outside his door and sprayed 200 shots down the hall six minutes before he opened fire Oct. 1 from his high-rise suite on a crowd at a country music festival below.
That was a different account from the one police gave last week: that Paddock shot the unarmed guard, Jesus Campos, after unleashing his barrage of fire on the crowd, where 58 people were killed and hundreds injured.
Late Tuesday, a spokesperson for Mandalay Bay questioned the latest timeline of events provided by police.
"We cannot be certain about the most recent timeline that has been communicated publicly, and we believe what is currently being expressed may not be accurate," said Debra DeShong, a spokesperson for MGM Resorts International, which owns the Mandalay Bay hotel casino.
The sheriff had previously hailed Campos as a "hero" whose arrival in the hallway may have led Paddock to stop firing. But on Monday, Lombardo said he didn't know what prompted Paddock to end the gunfire and take his own life.
How crucial were the minutes that elapsed before the massacre began?
"This changes everything," said Joseph Giacalone, a professor at John Jay College of Criminal Justice and a former New York City police sergeant. "There absolutely was an opportunity in that time frame that some of this could've been mitigated."
Las Vegas gunman aimed at fuel tanks, had protective gear as part of escape plan, sheriff says
Las Vegas gunman Stephen Paddock left behind trail of carnage and clues, but no clear answers
First firefighters on scene at Las Vegas shooting came across it by chance
Giacalone added: "By engaging the shooter ahead of time during this event, it could've saved a lot of heartache."
Campos reported to hotel security dispatchers that he was shot before Paddock opened fire on the crowd, Assistant Sheriff Tom Roberts told The Los Angeles Times. Campos ran down the hall, away from Paddock's room, after he was shot and may have used both his radio and a hallway phone to call for help, he said.
It wasn't clear exactly what time Campos called for help or if the hotel had relayed the information about the shooting to police. Las Vegas police did not respond to questions from The Associated Press about whether hotel security or anyone else in the hotel called 911 to report the hallway shooting.
A representative for Campos' union didn't immediately respond to a message seeking comment.
"Our officers got there as fast as they possibly could and they did what they were trained to do," another Las Vegas assistant sheriff, Todd Fasulo, said Tuesday.
But the sheriff has said that Las Vegas police officers searching the hotel for the gunman during the attack did not learn the guard had been shot until they got off the elevator on the 32nd floor and met him in the hallway.
Nicole Rapp, whose mother was knocked to the ground and trampled by panicked concertgoers as bullets rained from above, said she's "having a hard time wrapping my head around" why police changed the timeline of the shooting.
"It's very confusing to me that they are just discovering this a week later," she said. "How did we not know this before? It's traumatic for the victims and their families not to be sure of what happened."
Fasulo explained the change in the timeline by saying that dozens of investigators have been using different sources of information — including surveillance video, computers, police body cameras, cellphones and interviews — and that not all clocks were in sync.
Last week, police said Paddock had shot at concertgoers for 10 minutes and stopped firing around 10:15 p.m. The first officers arrived on the 32nd floor at 10:17 p.m. and encountered the wounded guard at the elevator bank about a minute later, police said.
The security guard had been responding to a door alarm on the floor when he heard an odd drilling sound, Undersheriff Kevin McMahill told KNPR on Tuesday. That was when Paddock fired hundreds of rounds at the guard and a maintenance man, McMahill said.
Paddock had power tools and was trying to drill a hole in a wall, perhaps to mount another of the security cameras he set up around him, or to point a rifle through, but he never completed the work, Lombardo said. He also drilled holes and bolted a metal bar to try to prevent the opening of an emergency exit door near his room.
The six minutes that transpired between the hallway shooting and the start of the gunman's fusillade wouldn't have been enough time for officers to stop the attack, said Ron Hosko, a former FBI assistant director who has worked on SWAT teams. Rather than rush in without a game plan, police would have been formulating the best response to the barricaded gunman, he said.
"Maybe that's enough time to get the first patrolman onto the floor but the first patrolman is not going to go knock on that customer's door and say 'What's going on with 200 holes in the door?'" Hosko said.
McMahill defended the hotel and said the encounter that night between Paddock and the security guard and maintenance man disrupted the gunman's plans. Paddock fired more than 1,000 shots and had more than 1,000 rounds left in his room, the under-sheriff said.
"I can tell you I'm confident that he was not able to fully execute his heinous plan and it certainly had everything to do with being disrupted," McMahill said. He added: "I don't think the hotel dropped the ball."


Majumdar, Pinaki and Krishnamurthy, HR (1995) Reentrant insulator-metal transition in the half-filled Hubbard model. In: Physical Review B: Condensed Matter, 52 (18). R5479-R5482.
Using the d=infinity or local-approximation approach to the half-filled Hubbard model on a compressible lattice, we present a detailed study of the transport and structural properties near the paramagnetic metal-insulator transition. The results describe qualitatively most of the observed data in V2O3, including the metal-insulator-metal crossover [Kuwamoto et al., Phys. Rev. B 22, 2626 (1980)]. In addition, we discuss an interesting and intrinsic reentrance feature in the resistivity of the half-filled Hubbard model at high temperatures.


Published 04/18/2019 06:34:08 am at 04/18/2019 06:34:08 am in Frog Cube.
frog cube little frog ring sling azure cube cuban frog noise.
frog cube blast,cuban frog pictures,froglube degreaser,dog ice cube trays,frog cube aquariums,cube world frogman,juvenile cuban frogs,froglube extreme,cyberfrog toys,frog ice cube tray,cuban frog invasive species.


There are consumers who don't fancy Hofer, mainly because they don't know much about Hofer brands and products. So we decided for a new strategy: if they're not convinced to visit us, it's only fair that we visit them. In collaboration with Jezeršek Culinary Academy and two young chefs we created the first and most fair Slovenian food truck project – FerFud. Together we turned Hofer products into traditional dishes with modern twist and serve them on the streets across the country under fair price (pay with social or pay as you wish) giving all income to Botrstvo v Sloveniji.


text:
package com.orientechnologies.orient.server.network.http;

import com.orientechnologies.orient.core.record.impl.ODocument;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.IOException;

/**
 * Test HTTP "query" command.
 *
 * @author Luca Garulli (l.garulli--at-orientechnologies.com)
 */
@Test
public class HttpDocumentTest extends BaseHttpDatabaseTest {
  public void create() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:99, \"@version\":100}", CONTENT.JSON).exec();

    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);

    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.getVersion(), 1);
    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 99);
    Assert.assertEquals(created.getVersion(), 1);
  }

  public void read() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:99}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 99);
    Assert.assertEquals(created.getVersion(), 1);

    get("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 200);
    final ODocument updated = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(updated.field("name"), "Jay");
    Assert.assertEquals(updated.field("surname"), "Miner");
    Assert.assertEquals(updated.field("age"), 99);
    Assert.assertEquals(updated.getVersion(), 1);
  }

  public void updateFull() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:0}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 0);
    Assert.assertEquals(created.getVersion(), 1);

    created.field("name", "Jay2");
    created.field("surname", "Miner2");
    created.field("age", 1);

    put("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).payload(created.toJSON(),
        CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 200);
    final ODocument updated = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(updated.field("name"), "Jay2");
    Assert.assertEquals(updated.field("surname"), "Miner2");
    Assert.assertEquals(updated.field("age"), 1);
    Assert.assertEquals(updated.getVersion(), 2);
  }

  public void updateFullNoVersion() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:0}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 0);
    Assert.assertEquals(created.getVersion(), 1);

    put("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).payload(
        "{name:'Jay2', surname:'Miner2',age:1}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 200);
    final ODocument updated = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(updated.field("name"), "Jay2");
    Assert.assertEquals(updated.field("surname"), "Miner2");
    Assert.assertEquals(updated.field("age"), 1);
    Assert.assertEquals(updated.getVersion(), 2);
  }

  public void updateFullBadVersion() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:0}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 0);
    Assert.assertEquals(created.getVersion(), 1);

    put("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).payload(
        "{name:'Jay2', surname:'Miner2',age:1, @version: 2}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 409);
  }

  public void updatePartial() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:0}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 0);
    Assert.assertEquals(created.getVersion(), 1);

    put("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1) + "?updateMode=partial").payload(
        "{age:1}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 200);
    final ODocument updated = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(updated.field("name"), "Jay");
    Assert.assertEquals(updated.field("surname"), "Miner");
    Assert.assertEquals(updated.field("age"), 1);
    Assert.assertEquals(updated.getVersion(), 2);
  }

  public void deleteByRid() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:0}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 0);
    Assert.assertEquals(created.getVersion(), 1);

    delete("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 204);

    get("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 404);
  }

  public void deleteWithMVCC() throws IOException {
    post("document/" + getDatabaseName()).payload("{name:'Jay', surname:'Miner',age:0}", CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 201);
    final ODocument created = new ODocument().fromJSON(getResponse().getEntity().getContent());

    Assert.assertEquals(created.field("name"), "Jay");
    Assert.assertEquals(created.field("surname"), "Miner");
    Assert.assertEquals(created.field("age"), 0);
    Assert.assertEquals(created.getVersion(), 1);

    delete("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).payload(created.toJSON(),
        CONTENT.JSON).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 204);

    get("document/" + getDatabaseName() + "/" + created.getIdentity().toString().substring(1)).exec();
    Assert.assertEquals(getResponse().getStatusLine().getStatusCode(), 404);
  }

  @Override
  public String getDatabaseName() {
    return "httpdocument";
  }
}

redpajama_set_name: RedPajamaGithub


Does anyone know of a good source port that runs with NT 4.0??
AFAIK, all of the recent windows-based ports should work fine. I use XP, and have had no significant problems with zdoom, zdoomgl, jdoom, legacy, eternity or prboom/glboom.


text:
Keyword Search of ncks
BTAA e-School
Conference Travel Fund
Curriculum Module Grant
Visiting Scholar Application Procedures
Asia Library Travel Grants
Visiting Fellow Application Procedures
Korea Foundation Postdoctoral Fellow Application Procedures
Experiential Teaching Kits
Educator Funding
K-14 Student Programs
Educator Workshops & Conferences
Nam Center Associates Program
Sang-Yong Nam Memorial Lecture
Signature Artist Residency
Archived Events | 2007-15
Virtual Chuseok Dae Party
Nam Center Colloquium Series | Migrant Conversions: Money, Religion, and Global Projects of Peruvians in South Korea
Erica Vogel, Professor, Anthropology, Saddleback College
Room 1010 Weiser Hall Map
Tweet Google iCal Email
Please note: This session is planned to be held both in-person and virtually EST through Zoom. This webinar is free and open to the public, but registration is required. Once you've registered, the joining information will be sent to your email.
Register at: https://myumi.ch/rq4en
Peruvian migrant workers began arriving in South Korea in large numbers in the mid-1990s, eventually becoming one of the largest groups of non-Asians in the country. Migrant Conversions shows how despite facing unstable income and legal exclusion, migrants have come to see Korea as an ideal destination, sometimes even as part of their divine destiny. Faced with a forced end to their residence in Korea, Peruvians have developed strategies to transform themselves from economic migrants into heads of successful transnational families, influential church leaders, and cosmopolitan travelers. Set against the backdrop of the 2008 global financial crisis, Migrant Conversions explores the intersections of three types of conversions—monetary, religious, and cosmopolitan—to argue that migrants use conversions to negotiate the meaning of their lives in a constantly changing transnational context. As Peruvians carve out social spaces, they create complex and uneven connections between Peru and Korea that challenge a global hierarchy of nations and migrants. Exploring how migrants, churches, and nations change through processes of conversion reveals how globalization continues to impact people's lives and ideas about their futures and pasts long after they have stopped moving or after a particular global moment has come to an end.
Erica Vogel is Professor of Anthropology at Saddleback College in Mission Viejo, California. She is a cultural anthropologist who conducts fieldwork primarily in South Korea, Peru, and Mexico looking at issues of globalization, migration, religious conversion, and transnational flows between Asia and Latin America. Her book Migrant Conversions: Transforming Connections Between Peru and South Korea was published by the UC Press in 2020 and is based on 24 months of fieldwork in Peru and South Korea with migrants and their families, their religious leaders, and government officials. Her current research project is funded by a grant from Mellon/ACLS and is called "K-Pop in Mexico: Creating and Consuming Globalization through La Ola Coreana." She received her PhD in anthropology from the University of California, Irvine and held a Korea Foundation Postdoctoral Fellowship at the University of Illinois Urbana–Champaign.
2020 Migrant Conversions: Transforming Connections Between Peru and South Korea. Berkeley: University of California Press, 2020.
Link to the Free Open Access Version: https://www.luminosoa.org/site/books/m/10.1525/luminos.86/
2019 "K-pop in Mexico: Flash Mobs, Media Stunts, and the Momentum of Global Mutual Recognition" IN Pop Empires: Transnational and Diasporic Flows of India and Korea. Edited by Sharon Heijin Lee, Monika Mehta, and Robert Ji-Song Ku. University of Hawaii Press. https://uhpress.hawaii.edu/product/pop-empires-transnational-and-diasporic-flows-of-india-and-korea/
2016 "Ongoing Endings: Migration, Love, and Ethnography" Journal of Contemporary Ethnography. http://jce.sagepub.com/content/early/2016/06/24/0891241616654542.abstract
2016 "Migrant Narratives and Ethnographic Tropes: Navigating Tragedy, Creating Possibilities" Introduction to Special Issue with Susan Coutin. Journal of Contemporary Ethnography http://jce.sagepub.com/content/early/2016/06/24/0891241616652193.abstract
2014 "Predestined Migrations: Undocumented Peruvians in South Korean Churches" City & Society 26(3): 331 351.
http://onlinelibrary.wiley.com/doi/10.1111/ciso.12046/abstract
Faculty Profile: https://www.saddleback.edu/evogel
If there is anything we can do to make this event accessible to you, please contact us. Please be aware that advance notice is necessary as some accommodations may require more time for the university to arrange.
Weiser Hall
Lecture / Discussion
Asia, Korea, Latin America
Happening @ Michigan from Nam Center for Korean Studies, International Institute, Asian Languages and Cultures
Nam Center for Korean Studies
500 Church Street, Suite 400
ncks.info@umich.edu
A member of the International Institute
LSA News & Events
LSA Dates and Deadlines
LSA Today Newsletter


Here's a fun little quiz to help you test your knowledge about fuel efficiency.
What is the best speed to drive on the highway for optimum fuel efficiency?
55 is correct. For each 10 mph over 55, Aerodynamic drag reduces fuel efficiency by around 5 miles per gallon.
Good guess, but the correct answer is 55.
True or false? Replacing a Clogged Air Filter on Modern Cars can improve mileage.
You got it right. Replacing a Clogged Air Filter on Modern Cars Improves Performance but not mileage.
Sorry, this was a trick question. Replacing a Clogged Air Filter on Modern Cars Improves Performance but not mileage.
Correct! Remove unneeded items from your car for better fuel economy.
Accelerating and braking quickly can reduce fuel efficiency by how many mile(s) per gallon?
Correct! Accelerating and braking too fast can reduce fuel efficiency by about 3 miles per gallon.
Good guess, but the correct answer is 3.
You will overheat your engine.
You will use as much fuel as you would as if you drove one mile.
You will use gas in your reserve tank.
You will damage your clutch if you have a manual transmission.
Correct! Two minutes of idling equals one mile of driving in terms of gas used.
True or false? Cruise control helps save fuel in flat terrain but not hilly terrain.
True- If using your cruise control on hilly terrain it will cause the car to accelerate quickly, wasting fuel.
Sorry, it's actually true. If using your cruise control on hilly terrain it will cause the car to accelerate quickly, wasting fuel.
True or false: In summer, turn off A/C and roll down windows to save fuel.
Turning off the A/C does increase engine efficiency, but rolling down the windows increases drag. The rule of thumb is: roll down the windows at low speeds and use the A/C at higher speeds (over 45 mph).
Sorry, it's not true. Turning off the A/C does increase engine efficiency, but rolling down the windows increases drag. The rule of thumb is: roll down the windows at low speeds and use the A/C at higher speeds (over 45 mph).
Correct! According to fueleconomy.gov, you can improve your mileage by as much as 40 percent.
Good guess, but according to fueleconomy.gov, you can improve your mileage by as much as 40 percent.
None of the above. A tune-up has no bearing on gas mileage.
Correct! According to fueleconomy.gov, you can improve the gas mileage by an average of 4 percent.
Good guess, but according to fueleconomy.gov, you can improve the gas mileage by an average of 4 percent.
True or false, tire pressure (how much air is in your tires) can affect your gas mileage.
True! Under-inflated tires can lower gas mileage by 0.3 percent for every 1 psi drop in pressure of all four tires. Properly inflated tires are safer and last longer.
False. According to fueleconomy.gov, Under-inflated tires can lower gas mileage by 0.3 percent for every 1 psi drop in pressure of all four tires. Properly inflated tires are safer and last longer.


text:
package edu.eetac.upc.dsa.rnuevo.clasesEsencialesUnoSiete;

import java.io.*;

import javax.swing.JFileChooser;

import java.util.*;

public class Ejercicio6 {
	public static void main(String[] args) {
		File archivo = null;
		FileReader leer = null;
		BufferedReader leido = null;
		int maxBytes = 0;
		int maxCaracteres = 0;
		String ficheroBytes = null;
		String ficheroCaracteres = null;
		String palabra[] = null;
		ArrayList<String[]> lineas = new ArrayList<String[]>();
		int i=0;
		try {
			JFileChooser elegirArchivo = new JFileChooser();
			int respuesta = elegirArchivo.showOpenDialog(null);
			if (respuesta == JFileChooser.APPROVE_OPTION) {
				archivo = elegirArchivo.getSelectedFile();
			}
			leer = new FileReader(archivo);
			leido = new BufferedReader(leer);
			String linea;
			while ((linea=leido.readLine()) != null) {
				lineas.add(linea.split(" "));
			}

			for(i=0; i < lineas.size(); i++){
				palabra = lineas.get(i);
				for(int j=0; j < palabra.length-2; j++){
					if(palabra[j].toString().equals("contiene") && palabra[j+2].toString().equals("bytes")){
						if(maxBytes < Integer.valueOf(palabra[j+1])){
							maxBytes=Integer.valueOf(palabra[j+1]);
							ficheroBytes = palabra[j-1];
						}
					}
					if(palabra[j].toString().equals("contiene") && palabra[j+2].toString().equals("caracteres")){
						if(maxCaracteres < Integer.valueOf(palabra[j+1])){
							maxCaracteres=Integer.valueOf(palabra[j+1]);
							ficheroCaracteres = palabra[j-1];
						}
					}
				}
			}

			if(maxBytes > maxCaracteres){
				System.out.println("El fichero que contiene mas bytes es " + ficheroBytes + " con " + maxBytes +" bytes");
			}else if(maxBytes < maxCaracteres){
				System.out.println("El fichero que contiene mas caracteres es " + ficheroCaracteres + " con " + maxCaracteres +" caracteres");
			}else{
				System.out.println("El fichero que contiene mas bytes es " + ficheroBytes + " con " + maxBytes +" bytes" + " y el fichero que contiene mas caracteres es " + ficheroCaracteres + " con " + maxCaracteres +" caracteres");
			}

		} catch (FileNotFoundException e) {
			System.out.println("No se puede encontrar el archivo especificado: "+ e.getMessage());
		} catch (IOException e) {
			System.out.println("No se puede leer el fichero: " + e.getMessage());
		}catch (NullPointerException e){
			System.out.println("No se ha seleccionado ningun fichero ");
		}
	}
}


Elephant bath - Franklin Park Zoo.
Elephants bathing in Franklin Park.
Elephants bathing at Franklin Park Zoo.
Elephants getting a bath at Franklin Park Zoo.
Elephants - Franklin Park Zoo.
Brown bear takes a bath at Franklin Park Zoo.
Brown bears - Franklin Park.


Parenting a child brings with several decision-making moments which moulds the child life. They play an essential role in making their children self-reliant by polishing their decision-making skills.
Children, who take their own sound decisions, turn out to be great leaders tomorrow as they learn from the experiences throughout their life.
There are certain things that you should decide for their betterment but there are also things the children should decide on their own.
Parents can teach money management by giving them pocket money every month. As they don't keep money management, if you give them money whenever they ask for it.
Let it be your child's responsibility for managing expenditure on their own.
Children should be free to choose how they want to spend their free time. Do not force your decisions onto them. If he/ she enjoys doing something, then let them pursue their interests. Only make sure that what they are doing is not harmful to them.
Never try to micro-manage your child's day. Let them learn how to manage their time from an early age. Let them decide their play time and a suitable time to study. Only, just remind them of their number of pending tasks so that they can become responsible for their work.
Friends are a vital part of a child growing up and learning social skills. But, not all friends which we make turn out to be good for us. Sometimes, it is important for Children to learn the hardest ways of life.
Let your children understand better and help them to make friends on their own. As parents are the best friends of their children! and they always think about what's best for them.
Some of the parents want to see their children be the next sports superstar or a legend. But, if he/she has no interest in sports or is not motivates to pursue it, Parents should not force them at all. Because, if they are not able to succeed in the sport, it can hamper a child's self-confidence.
After exposing them to all sports, a parent should let their children decide on their own. Allow them to make their decision on how they think. Let them create their own opportunities to pursue their interest and to foster a creative expression of learning as well as other activities.
These tips are definitely helpful for children living in Boarding Schools. The main function always lies in motivation. If a student gets the motivation & freedom of choosing their field than they will surely able to deliver better results.


4 YRS Ningbo Haishu Cherish Leisure Products Co., Ltd.
3.Three times coating ensure resistant to corrosion. 5. Discounts are offered based on order quantities. We can offer you professional and efficient service.
We started the business of garden furniture since 13 years ago, and have been keep rapid development in the past years. Our QC team inspects every order before the shippment to keep the products in good quality. Our professional R&D team keep improving the design of the products and we have new products come to the market every month.
Our sales team who could reply customer requirement in time and work time adjustment according customer needs. 3.Do your company support mix order into one container9 Yes,our company totally support mix orders into one container. No matter you are first time to work with us,or you had ordered many times.
Alibaba.com offers 22,299 patio table set products. About 59% of these are garden sets, 14% are outdoor tables, and 1% are dining tables.
A wide variety of patio table set options are available to you, such as dining table, dining room set, and garden set. You can also choose from wood, metal, and glass. As well as from home furniture, outdoor furniture, and commercial furniture. And whether patio table set is no, or yes.
There are 22,299 patio table set suppliers, mainly located in Asia. The top supplying country is China (Mainland), which supply 100% of patio table set respectively.
Patio table set products are most popular in North America, Western Europe, and Northern Europe.
You can ensure product safety by selecting from certified suppliers, including 3,101 with ISO9001, 2,250 with Other, and 945 with BSCI certification.


text:
Pocatello Pioneers eager to host first home mountain biking race at 'Crazy Train' | Local
POCATELLO — The Pocatello Pioneers won't host their first ever home mountain biking meet until Oct. 2, but they're already confident that the 5-mile course they call the Crazy Train will be among the most challenging loops in their league.
Due in part to the rigorous Pocatello-area trails on which they practice, team members have developed a reputation for excelling on the steepest climbs. It's a trait that will come in handy when they race the Crazy Train, located on a private ranch within the city's east bench.
Meets are big draws, requiring expansive staging areas for the 700 to
Is Bishop Sycamore a legit high school football program? IMG Academy's ESPN opponent explained
Early in the football season, ESPN has been known to showcase some of the top high school football teams in the nation as a way of giving younger players the spotlight before the college football and NFL seasons are fully underway.
IMG Academy, a prep boarding school in Florida, is consistently one of the top programs in the nation and is always loaded with future Division I and NFL talents. Their opponent on Sunday in the Hall of Fame Classic at Canton's Hall of Fame Stadium in Ohio also was said to be loaded up with Division I players, thus
Op-Ed: 5 steps to protect football players' brains and keep the sport alive
As more and more parents in the U.S. see the connection between football and brain damage, the game we love will change. Many will tell their teenage boys, "You can play any sport you want … except tackle football." What's left will be a gladiator sport.
We now know that football is harming players through repeated trauma and long-term brain damage. From the NFL on down to Pop Warner youth leagues, the game, the training and the gear must adapt to reduce harm. Decades of data tell us what needs to change.
Having represented professional athletes since 1975, I've been
13 Best Women's Running Shorts of 2021
Whether you're logging miles on the treadmill or hitting the trails, it's important to have a clutch pair of running shorts that works for your workout. These shorts should be able to withstand the wear and tear you put them through—just like your shoes. And once you find your fave, it's hard to try out others. But if you're looking for a wardrobe refresh or have thoroughly worn out your current pairs, you're in luck. We've created a comprehensive list of the latest and greatest women's running shorts to help you out.
Features to Consider
As you shop, there are
Chris Froome invests in Factor Bikes
Chris Froome has joined a consortium injecting capital into Factor Bikes and its parts and accessories subsidiary Black Inc, with plans for the four-time Tour de France winner to use his racing and product experience to help with product development and marketing.
The two brands sponsor Froome's WorldTour team, Israel Start-Up Nation and also partners with women's team Parkhotel Valkenburg. They have secured what it said was a "substantial investment" from the group including Sam McKay, co-founder of Point King Capital, Scott Farquhar, co-founder of Skip Capital and Froome, who will be joining the Board of Directors along with McKay.
Female-only swimming sessions in Ellenbrook denied despite multicultural community's calls
Aliaa Al-Zayadi lives in Perth's north-eastern suburbs, far from the beach, and — like many in her community — she wants a place to swim.
City of Swan councillors rejected a motion for female-only swimming lessons
The mayor put up the idea after speaking to local mother Aliaa Al-Zayadi
Supporters say it would help make public swimming pools more accessible
The 37-year-old mother, who runs an Arabic school in Ellenbrook, said women from multicultural backgrounds were often forced to travel at least 30 minutes to access services due to a lack of appropriate facilities in their local area.
Player Scooby Johnson accused of rape
INDIANAPOLIS – Butler's Carlos "Scooby" Johnson, a former Mr. Basketball in Michigan, has been accused of rape.
A probable cause affidavit of seven pages was filed Thursday in Marion County in connection with a Feb. 4 incident on campus.
Johnson, 19, did not play in his freshman year at Butler after knee surgery.
He was on the bench during games for much of the season but later was absent without explanation. His name was listed on the team's roster all summer but has since been removed.
A statement by the university said Johnson was charged with rape, attempted rape
Government plans to lift football standing ban
In their 2019 general election manifesto, the Conservatives promised to work towards the introduction of safe standing areas, which have been embraced in the German Bundesliga, as well as in Scotland – where around 3,000 Celtic fans have been allowed to make use of a safe standing section since 2016.
Yahoo! SportsTwitter reacted to Eagles' legend Jason Kelce running around MetLife Stadium during a thunderstormThe Eagles are currently in North Jersey to face the New York Jets in the final preseason game of the summer. A violent thunderstorm is …13 hours ago
Yahoo! SportsTwitter reacted to Eagles' legend Jason Kelce running around MetLife
Stadium during a thunderstormThe Eagles are currently in North Jersey to face the New York Jets in the
final preseason game of the summer. A violent thunderstorm is …13 hours ago… Read More
E for easy: cycling the Swiss Alps by e-bike | Cycling holidays
'C'est magnifique!" exclaims Armand. Before us lies Switzerland's Imperial Crown, a spectacular array of five 4,000-metre peaks, with the Matterhorn looming just beyond. Armand and I have reached our magnificent viewpoint after a 1,000-metre climb on e-mountain bikes from the pretty village of Grimentz.
I'm one of a group of seven riders on the Haute Route, a week-long, 250km off-road adventure from Chamonix to Zermatt, in the charge of local guides Adrià and Vince.
The original Haute Route was first undertaken in the mid-19th century as a summer mountaineering expedition by members of the British Alpine Club; today there


text: mvn -o jetty:run -Dmaven.test.skip=true -Dmaven.findbugs.jvmargs=-Xmx512m


text:
Why Angelina Jolie's 'NYT' Reveal Is So Important
by Kadeen Griffiths
WPA Pool/Getty Images News/Getty Images
I come at this news from a strange place of partial empathy and total sympathy. Like Angelina Jolie, the women in my family have a history of cancer. Unlike Jolie, none of the women in my family that I was alive to know have ever died from the disease. So when the New York Times op-ed piece revealing that Jolie has removed the ovaries to prevent cancer came out, I read it with a mixed sense of dread and secondhand relief. This preventive surgery might seem like a severe move coming too quickly after Jolie's double mastectomy in 2013, but the emotions that the actress cycles through in her op-ed alone make it clear that she had no other choice. Not for her own peace of mind. And that is something that I deeply understand.
For most of my life, cancer has been the boogeyman that my sister and I feared. If she had a mysterious dark spot appear on her skin, it was cancer and not a beauty mark. If I had a lump anywhere — even at the site where I had just hit my knee — it was cancer and not benign. We walked the streets paranoid of carcinogens, we ate dinner paranoid of carcinogens, and we expected the worst at every physical. We still do. Cancer claims the lives of 7.6 million people each year, three in our own family, and it was not something that we would take lightly even if we hadn't known those members of the family.
Frazer Harrison/Getty Images Entertainment/Getty Images
And that's why Jolie's op-ed is so important. There is no life that this disease has left unaffected. Even if you haven't lost anyone to cancer, even if you are not at high risk for cancer yourself, it's likely that you know someone who has been personally impacted by the disease. And even if you can't even claim that much, there's not a single person out there who does not at least partially fear that diagnosis. Jolie's story provides a publicized spin on the cancer narrative. In the media, and thus in life, it seems as if you have only two options: fearing the disease and slowly dying from it in between stages of remission. Preventive surgeries aren't often explored in pop culture, despite how often they occur in the real world, and Jolie provides a real-world role model for that kind of bravery and survival instinct.
Is Jolie the first person to have ever gotten preventative treatment to avoid the cancer she is at high risk for? No. Is there still a chance, no matter how small, that she might develop cancer even after her surgeries? Sadly, yes. But, in keeping with the strong woman we have all come to know her as, she has taken her fate into her own hands. Even if she does get diagnosed with cancer, Jolie can at least face her diagnosis with the knowledge that she did all that she could to protect herself, and to prevent her family from ever having to suffer through this disease with her. Thus, it comes as no surprise that fans have been incredibly supportive of her decision to undergo this surgery — because when we read her op-ed piece, it hits us all again how easily, how suddenly, we could find ourselves in Jolie's shoes.
Of course, there are still those who neither understand why Jolie's surgery is international news nor do they understand why Jolie has gone to the extremes that she has. And those are both valid ways to feel, even if I disagree with them. The fact of the matter is, this story isn't just about Jolie's surgery. It's about opening a public discourse about cancer — that taboo disease that often feels like we can call it down upon ourselves just by saying the word — and about how one doesn't necessarily need to wait for a diagnosis in order to take steps to extend one's life. Jolie is sharing her experience to raise awareness of the many different kinds of experiences that fall under the umbrella of the "C-word." She is sharing her experience because she is a visible, beloved public figure, and she knows that her story will reach more eyes and ears than that of the average woman who has undergone preventive surgery.
In doing so, she is performing a service for women everywhere. They are not alone. This can happen to anyone, regardless of success or sociopolitical status or financial comfort. There are more options to having a genetic history of cancer than living in fear. Jolie is not the first woman to undergo such surgery, and she certainly will not be the last woman to undergo such surgery. But she told her story because she knew it would have the most impact, because it has the potential to help more people, and because, for 1000 words, women like myself no longer felt alone in living with that fear. In Jolie's own words, "I feel at ease with whatever will come, not because I am strong but because this is a part of life. It is nothing to be feared."
Twitter Is Identifying With Sally Field & Jane Fonda's Friendship In New Viral Video
The Beauty Device Kristen Bell Uses Every Single Morning
"Lavender Haze" Star Laith Ashley Breaks Down Filming With Taylor Swift
Who Is Murray Bartlett Dating? 'The Last Of Us' Star Is Extremely Private


text:
April 29-May 3, 2017	in Chicago, IL
View by Date -- Choose Date -- Saturday, April 29, 2017Sunday, April 30, 2017Monday, May 1, 2017Tuesday, May 2, 2017Wednesday, May 3, 2017
Jump to: View All • a b c d e f g h i j k l m n o p q r s t u v w x [y] z
Young African American Heart Transplant Recipients Have an Elevated Risk of Post-Transplant Mortality.
H. Maredia, M. Bowring, A. Massie, S. Oyetunji, C. Merlo, R. Higgins, D. Segev, E. Bush.


text:
Don't just give. Solve.
Published by: Grant-makers for Education. October 2017, USA. 36 pages.
Author: Lynn Jenkins.
This case study focuses on the work of the Boston Foundation, one of the USA's oldest community foundations. As the case portrays, the foundation has always been committed to educational equity and even played an important role during Boston's fractious school desegregation era. But the board knew it could do more and needed to do more – the well-being of individuals, families, communities and the city as a whole demanded it.
Accordingly, the board chose a new leader who took the foundation on a bold new path. Rather than stay "behind the scenes" as it had in the past, the Boston Foundation began commissioning rigorous research, publicising the results, and bringing people together to discuss the findings and develop strategies to address needs uncovered by the research. It also began to pursue a policy agenda aligned with its research. The foundation's new stance was riskier because it meant challenging widely shared myths, revealing unpleasant truths, and taking policy positions that were not always popular. But the foundation's leaders and staff believed that the magnitude of the equity challenge demanded nothing less.


text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleServer
{
    public class ClientHandlerList : IHandlerList<IClientPeer>
    {

        private readonly Dictionary<int, IHandler<IClientPeer>> _requestCodeHandlerList;

        public ClientHandlerList(IEnumerable<IHandler<IClientPeer>> handlers)
        {
            _requestCodeHandlerList = new Dictionary<int, IHandler<IClientPeer>>();

            foreach (var handler in handlers)
            {
                RegisterHandler(handler);
            }
        }

        public bool RegisterHandler(IHandler<IClientPeer> handler)
        {
            var registered = false;
            if ((handler.Type & MessageType.Request) == MessageType.Request)
            {
                if (!_requestCodeHandlerList.ContainsKey(handler.Code))
                {
                    _requestCodeHandlerList.Add(handler.Code, handler);
                    registered = true;
                }
            }
            return registered;
        }

        public bool HandlerMessage(IMessage message, IClientPeer peer)
        {
            bool handled = false;
            switch (message.Type)
            {
                case MessageType.Request:
                    if (_requestCodeHandlerList.ContainsKey(message.Code))
                    {
                        _requestCodeHandlerList[message.Code].HandlerMessage(message, peer);
                        handled = true;
                    }
                    break;
            }

            return handled;
        }
    }
}


This award-winning 70,000sqm iconic development brings together 6000 staff members from eleven satellite offices. The access flooring for this 5-Star Green Star SA certified building was manufactured and supplied by Pentafloor.
For the new 33,000sqm Mutual Place in Sandton, DSGN specified Pentafloor's access flooring and Shaw Contract's Dye Lab and Hexagon Citron. The carpeting products are of a superior quality, with colours and textures that are reminiscent of those found in nature.
The interior design elements of this 110,000sqm landmark corporate facility were conceptualized to simulate a healthy body and mind. Pentafloor manufactured and supplied the access flooring for the entire building from offices to data centre and server rooms.
PentaFloor is extremely proud to have sponsored the raised access flooring for the gallery areas at the Zeitz Museum of Contemporary Art Africa (Zeitz MOCAA) at the V&A Waterfront's Silo District in Cape Town.
For the FNB Contact Centre in Ferndale, Randburg, PentaFloor supplied access flooring and carpeting that contributed significantly to the project's score under the Green Star Indoor Environmental Quality Category.
For the fitout of the new Green Building Council South Africa (GBCSA) offices in Rosebank, PentaFloor stepped up with a generous contribution of supplying and installing high-end carpeting products.
Using Pentafloor's LF Range of access flooring, and located in the heart of Sandton with easy access to the Gautrain station and numerous amenities, this prominent 4-Star Green Star SA certified building forms part of Abland's larger R1-billion mixed-use Alice Lane precinct.
The iconic 5-Star Green Star SA Office v1 Design certified Standard Bank in Rosebank is on the corner of Baker Street and Oxford Road. The building, which utilises Pentafloor's LF Range of access flooring, comprises an 11 floor West Wing and a 9 floor East Wing linked by a glass atrium.
Newtown Junction accommodates a 36,000sqm shopping centre, 30,000sqm office space, six cinema theatres, a gymnasium and a basement with four levels of parking for 2400 cars.
This 23,000sqm, 4-Star Green Star SA Office v1 Design certified building, located in Sandton, utilises Pentafloor's Solid Feel access flooring.
This 4-Star Green Star SA Office v1 Design rated building is a refurbishment of heritage building located in the Tshwane CBD. It was the first government building to target a Green Star SA certification.
With a 5-Star Green Star SA Office v1 As-Built certification, Nedbank Menlyn Maine is the regional campus for Nedbank in Tshwane. In line with Nedbank's commitment to environmental sustainability, the project adopted best practice design for lights and HVAC, and installed Pentafloor's Solid Feel access flooring.
The 4-Star Green Star SA Nedbank Ridgeview in Umhlanga provides office accommodation for 600 occupants. The development, which uses Pentafloor's Solid Feel access flooring, includes a super basement which will form part of the greater office developments podium and basement.
The 5-Star Green Star SA rated Portside building totals 34 floors, including an upper- and lower-ground floor retail component, 7 parking levels, 19 floors of office space, 2 floors of dedicated plant room, and a Sky Plaza. The project team installed Pentafloor's Solid Feel access flooring.
The World Bank's design team used the Shaw Contract range of office carpet tiles for this prestigious project in Nairobi, Kenya.


text:
Q: Excel Treeview Construction Using the code shown at the bottom I and able to load the Treeview for a hierarchy as shown below, this represents the sequence in which material is consumed to ultimately make Item A.

Within the Treeview I would like to show that material is consumed at different operation numbers as shown below in the left hand table to produce the below Treeview. Is it possible to achieve this without constructing a new hierarchy as shown below right.

Sub LoadTreeView()
Dim rNodeNames As Range, rNodeName As Range, nodX As Object

Sheet2.OLEObjects("TreeView1").Object.Nodes.Clear

Set rNodeNames = Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)

For Each rNodeName In rNodeNames
    With Sheet2.OLEObjects("TreeView1").Object.Nodes
        If rNodeName.Value = "L.1" Then
            Set nodX = .Add(, , "L.1", rNodeName.Offset(, 1).Value)
        Else
            Set nodX = .Add(Left(rNodeName.Value, -1 + InStrRev(rNodeName.Value, ".")), tvwChild, rNodeName, rNodeName.Offset(, 1).Value)
        End If
        nodX.Expanded = True
   End With
Next rNodeName
End Sub

redpajama_set_name: RedPajamaStackExchange


Using boondocking matchmaking services to enjoy StressLess Boondocking in some of the most incredible places.
Using natural products to keep rodents out of RVs in storage.
The easiest way to level a travel trailer.
How to maximize the chill in your RV's refrigerator.