text:
\section{Introduction}

Lasers in the X-ray domain, with wavelengths of the order of the
atomic size, have been reported in the literature
\cite{Nat,xfe,All}. We must study the underlying physics in that unexplored
range of ultrashort wavelengths. In particular, we must analyze the
behavior of the light-matter interaction. In
order to carry out the analysis in a simple way, we shall consider a
well-known scheme, the Kapitza-Dirac effect, which can be described
with simple mathematical tools. In the Kapitza-Dirac effect a beam
of atoms or electrons is diffracted or scattered by a standing light
wave \cite{KD, Bat, Pri, Ba2,Ba3}. The effect can be extended to
two-particle systems \cite{Sa1,Sa2}.

First of all, we must derive the form of the light-atom interaction
in this regime. We shall show that the dynamics is ruled by a
lightshift potential in the dipole approximation. Being the light
wavelength comparable to the atomic size, different parts of the
atom feel different values of the field and the dipole approximation
provides an incomplete description of the problem. We must consider
higher multipole terms, in particular the quadrupole one. However,
because of the high frequency of the light field we must average the
interaction on time. The average of the higher permanent multipole
terms is zero, reducing the total interaction to the usual
lightshift potential in the dipole approximation. We shall also consider
the quadrupole induced by the electric field. The evaluation of
its actual contribution to the problem is difficult because of the
lack of reliable experimental data on quadrupole or higher order
polarizabilities. Nevertheless we shall show that if these effects
were of the same order of the lightshift potential they would not
modify the fundamental results of our paper.

In the standard atomic Kapitza-Dirac arrangement the wavelength of
the optical grating is close to an atomic transition, enhancing the
strength of the interaction. The very short wavelengths we consider
in this paper are fully detuned from the atomic transitions, making
much more weak the light-atom interaction, which is only related to
the atomic polarizability. However, considering a laser intensity of
the order of $10^{14}W/m^2$ (the values used in the observation of
the effect with electrons \cite{Ba2}) the strength of the light-atom
interaction is comparable to that in the on resonance case and we
can, in principle, observe the diffraction effects. We shall
evaluate the diffraction patterns, obtaining the same form of the
standard atomic Kapitza-Dirac arrangement (containing only even
order peaks).

The high frequency values of the light can give rise, depending on
the duration of the interaction, to the presence of large ionization
rates which would make more difficult the observation of the
diffraction effects. In these cases one must introduce some
procedure to remove the ionized atoms from the experiment.

In addition to provide an example of light-matter interaction in the
scale of very short wavelengths, our proposal is also interesting
from a fundamental point of view. There has been an increasing
interest in the study of quantum diffraction with large size
objects, for instance, with $C_{60}$ \cite{Ze1} and $C_{70}$
\cite{Ze2} molecules in solid nanostructures or structures made of
light \cite{Ze3}, and $Na_2$ molecules whose de Broglie wavelength
is smaller than their size \cite{Pr1}. However, there is yet a
fundamental question that has not been addressed, the limiting size
(relative to the spacing of the diffraction grating) of a quantum
object to observe diffraction. Our proposal can be the basis to
study quantum diffraction in the extreme regime where the
periodicity of the diffraction optical grating is similar to the
size of the diffracted system.

The plan of the paper is as follows. In Sect. 2 we present the
arrangement and evaluate the lightshift potential relevant for the
problem. In order to give a compact presentation of the main ideas
involved in the evaluation, some more technical aspects of the
treatment are discussed in Appendix 1. In Sect. 3 we derive the
diffraction patterns and consider how to eliminate the ionized
atoms. The values of the parameters involved in a realistic
experimental implementation of the arrangement are estimated in
Sect. 4. In the Discussion, we consider the potential impact of our
proposal for other physical problems, in particular, the exploration
of the limits of quantum diffraction with large size objects.
Finally, the possible effects associated with a large quadrupole
polarizability are presented in Appendix 2.

\section{The arrangement}

As usual in the Kapitza-Dirac effect our arrangement consists of a
standing light wave generated by a laser. A beam of atoms interacts
with that diffraction grating. Behind the grating we place
detectors. From the data collected at the detectors we can infer the
diffraction patterns (see Fig. 1).

Next, we consider the mathematical description of the interaction.
First of all, we note that we shall deal with high laser intensities.
Then we can resort to the semiclassical approximation, where the
electromagnetic fields can be treated classically. In Appendix 1
we estimate the intensity values for which we can safely use this
approximation in the framework of the Kapitza-Dirac effect.
\begin{figure}[H]
\center
\includegraphics[width=5cm,height=3cm]{figure1.ps}
\caption{The wavelength of the laser (green) is similar to the size
of the atom (blue). After the interaction we observe a diffraction
pattern.}
\end{figure}
The adiabatic condition plays an important role in this type of
problem. When it is fulfilled, the time dependence of the effective
optical potential experienced by the atoms is slow compared to the
internal evolution. The center of mass (CM) dynamics can be
decoupled from the internal one, and it can be described by an
optical potential, generating a phase shift as a function of
position \cite{Ada}. As we shall see later (Sect. 3), the adiabatic
condition is by far fulfilled in our case.

Once guaranteed adiabatic evolution, we can concentrate on the CM
dynamics. The phase shift of the CM wavefunction is given by the
dipole-type interaction between the electric field ${\bf E}$ and the
induced atomic dipole ${\bf d}=\alpha {\bf E}$, with $\alpha $ the
polarizability. We describe this interaction by the lightshift
potential \cite{Bat,Ze3}
\begin{equation}
U_{LS}({\bf R},t)=-\frac{1}{2} \alpha {\bf E}^2({\bf R},t)
\end{equation}
where ${\bf R}$ denotes the CM coordinate of the atom. Being the
CM timescale very different from the laser period, we must average
over that period. If we take for the electric field of the standing
wave the form
\begin{equation}
{\bf E}({\bf R},t)={\bf E}_0 \cos ({\bf k}_L \cdot {\bf R}) \cos (\omega _L t)
\end{equation}
with ${\bf k}_L$ and $\omega _L$ the wavevector and frequency of the
laser, the averaged lightshift potential takes the form
\begin{equation}
U({\bf R})= \frac{1}{T_L}\int _0^{T_L} U_{LS}dt =-\frac{1}{4} \alpha {\bf E}_0^2 \cos ^2({\bf k}_L \cdot {\bf R})
\end{equation}
with $T_L=2\pi /\omega _L$.

In the framework of the dipole approximation there is yet another
interaction channel (see Appendix 1). In addition to the
transitions between bound states that induce the atomic dipole,
there can be also transitions to the continuum. As a matter of fact,
due to the high energy of the involved photons we expect that
absorption will lead in most cases to ionization, and the ionization
rate in our problem can be large. This is not the case for the
values of the parameters we shall propose to observe the effect (see
Sect. 3). However, for other values of the parameters the ionization
rate could be large. In these cases, as we are only interested into
the diffraction properties of the non-ionized atoms, we must
consider an scheme to eliminate the ionized atoms. In the next
section we present such an scheme. Thus, due to the negligible value
of the ionization rate in some cases and to the possibility of
eliminate the ions in the rest of cases, we do not need to consider
this interaction channel.

Up to now we have restricted our considerations to the leading
dipole approximation. However, as remarked before, because the
optical wavelength is comparable to the atomic size, the dipole
approximation (which assumes no relevant variations of the field in
distances of the order of the atomic size) does not provide a
complete description of the problem. There are in the literature
several examples of how to go beyond this approximation in the
context of X-ray theory. For instance, quadrupole terms have been
used to study X-ray spectroscopy \cite{Ber}, numerical non-dipole
simulations of ionization by X-ray lasers have been presented in
\cite{Zho}, and the Bloch equations without the dipole approximation
have been derived in \cite{Zha}. In this paper we follow the
approach of considering higher multipole terms. Let us consider the
next term in the perturbative series, the permanent quadrupole term,
which has the form (see Appendix 1)
\begin{equation}
U_Q({\bf R},t)=\frac{1}{2} Q_{ij} \frac{\partial E_i}{\partial R_j}
\end{equation}
Using the form of the electric field we have that $U_Q \sim \sin
({\bf k}_L \cdot {\bf R}) \cos (\omega _L t)$. Now, when performing
the time average we have that the quadrupole interaction goes to
zero. Thus, although there is a quadrupole interaction associated
with the field variations along the atom size, its net effect
vanishes. As discussed in Appendix 1 a similar conclusion holds for
any higher order term. Thus, all the averaged multipole permanent
contributions vanish and the light-atom interaction can be described
via the dipole approximation. In Appendix 2 we shall discuss how
induced quadrupole multipoles could be present in the problem.

In conclusion, the analysis of this section shows that the light-atom interaction can be expressed in the form
\begin{equation}
U({\bf R})=U_0 \cos ^2 ({\bf k_L} \cdot {\bf R})
\end{equation}
with $U_0 = -\alpha {\bf E}_0^2/4$. This is the usual lightshift
potential used in the standard on resonance atomic Kapitza-Dirac effect.

\section{Predicted diffraction pattern}

We have shown in the previous section the existence of two
interaction channels in our arrangement. On the one hand, the large
energy of the photons in the range of frequencies considered can
lead, depending on the duration of the interaction, to a high
ionization rate. On the other hand, the atoms that are not ionized
generate a diffraction pattern. We are only interested into the
observation of these  patterns. Then in the cases where the
ionization is large we must remove the ionized atoms (and the
electrons) in order to postselect the neutral ones.

One can easily design methods able to extract the ionized atoms and
electrons from the experiment. For instance, an electric field
perpendicular to the plane where the experiment takes place
(perpendicular to the longitudinal and transversal directions) would
deviate most electrons and ions from the detectors, whereas the
evolution of the neutral atoms would be almost unaffected.

After the removal of ions and electrons we can focus on the dynamics
of the neutral atoms interacting with the lightshift potential. The
state of the CM at time $t$ of the atoms with initial wavevector
$k_0$ (at time $t=0$) can be expressed as $e^{iU(X)t /\hbar}
e^{ik_0X}$ in the Raman-Nath approximation. In this approximation we
assume that the momentum of the atoms is large compared to that of
the photons. Then the kinetic energy remains approximately constant
and may be neglected. As it is well-known, this approximation is
valid in the diffraction regime \cite{Bat}. The coordinate $X$ is
that of the CM in the direction parallel to the granting. As usual
in the Kapitza-Dirac effect we only consider the one-dimensional
problem \cite{Bat}.

Using the relation $\exp (i\xi \cos \varphi)=\sum _n i^n J_n(\xi
)\exp (in\varphi )$, with $J_n$ the n-th order Bessel function, we
have
\begin{equation}
e^{iU(X)\tau /\hbar} e^{ik_0X}= e^{iU_0\tau /2\hbar} \sum _{n=-\infty}^{\infty } i^n J_n \left( \frac{U_0 \tau }{2\hbar } \right) e^{i(2nk_L + k_o)X}
\end{equation}
with $\tau $ the interaction time.

This pattern shows the standard form in Kapitza-Dirac diffraction
(that with on resonance light-atom interaction). Only even
diffraction orders are present. The intensity of the peaks is given
by $ J_n ( U_0 \tau /2\hbar )^2$.

\section{Experimental parameters}

We analyze in this section the values of the parameters of the
problem that would lead to observable effects in an experimental
realization of the above arrangement. We shall use a wavelength
$\lambda _L \approx 5 \times 10^{-10}m$. This wavelength differs in
several orders of magnitude of those associated with atomic
transitions, giving rise to a large detuning, which guarantees the
adiabatic evolution in the problem.

First of all, in order to be in the diffraction regime the
coefficient $U /\epsilon $, with $\epsilon =\hbar ^2k_L^2/2m$ the
recoil shift of the atom by absorption of a photon, must be larger
than unity \cite{Bat}. Taking the mass of the atom as ten to twenty times the
proton mass, we have $\epsilon \approx 10^{-4} eV$, and we
must take $U \approx 10^{-3}eV$.

From this value of the potential we can deduce the intensity of the
laser beam. We use the approximate relation $U \approx \alpha E_0^2$
and the definition of intensity $I=cE_0^2/8\pi $. The atomic
polarizability values are in the range of $10^{-29}m^3$ to
$10^{-31}m^3$ \cite{Sch}. Taking an atom in the high part of the
range, $\alpha \approx 10^{-29}m^3$, we would need a laser intensity
of the order of $10^{14}W/m^2$. This can seem a very high
value when compared with the intensities in the standard atomic
Kapitza-Dirac effect ($I \approx 10^7 W/m^2$). However,  a value of
$5 \times 10^{14}W/m^2$ has been used to demonstrate the effect with
electrons \cite{Ba2}. The proposed value of $\lambda _L =5 \times
10^{-10}m$ has already been reached with beam intensities as high as
$10^{17}W/m^2$ \cite{Nat,xfe}. Note also that the proposed value, although
very high, is yet a long way from the threshold of non-linear
polarizabilities, around $I=10^{18}W/m^2$.

The condition of high visibility of the interference pattern, $U\tau
/\hbar \approx 1$ \cite{Bat}, implies a time of interaction of
around $10^{-12}s$. As the duration of the pulses in \cite{Nat,xfe}
is between $10^{-13}$ and $10^{-14}s$, a possibility to generate the
standing wave is using counter-propagating pulses slightly enlarged
on time (for instance, via dispersion of the ultrashort pulses).
Another possibility, which does not modify the pulse duration, is to
increase the velocity of the atoms. The smallest radios of the
focused spots for this range of wavelengths are around $1\mu m$
\cite{Nat}. Then $\tau \approx 10^{-12}s$ requires atom velocities
close to $10^6 ms^{-1}$, that is, an increase of three orders of
magnitude with respect to the usual values. These velocities could
be reached accelerating ions, which later would interact with free
electrons generating neutral atoms (the remaining ions should be
extracted from the beam by interaction with an electric field). In
this second scheme one cannot use counter-propagating laser beams,
which are shorter than $\tau$, and should generate the standing wave
with mirrors or other techniques.

We must also determine the fraction of atoms that are ionized during
the interaction. If a photon is absorbed the probability of
ionization is large in our arrangement. For $\lambda _L$ the energy
of one photon is $E_{ph}=\hbar \omega _L \approx 3 \times 10^2 eV$.
This energy is much larger than the ionization energy, giving rise
to a large probability of ionization in the case of photon
absorption. We estimate the number of non-ionized atoms, $N$, in the
usual way: $dN =-\Gamma N dt$ with $\Gamma $ the ionization rate,
which is assumed to be time-independent. This gives $N(\tau )=N_0
\exp (-\Gamma \tau)$ with $N_0$ the initial number of atoms in the
beam. On the other hand, for the range of intensities in our problem
the ionization rate can be expressed as $\Gamma =\sigma I/\hbar
\omega _L$ with $\sigma$ the photoionization cross section, which
depends on $\omega _L$. Values of $\sigma $ can be found in several
database. For instance for the Na atom and $\hbar \omega _L = 100eV$
we have $\sigma =5 \times 10^{-22} m^2$, which gives $\Gamma \tau
\approx 10^{-3}$. Due to the very short duration of the interaction
the fraction of ionized atoms is negligible. For the values of the
parameters here proposed it is not necessary to include the
procedure to remove the ionized atoms.

\section{Discussion}

Some coherent light sources are reaching the scale where the optical
wavelengths are comparable to the atomic sizes. Our work is one of
the first studies considering possible physical effects present in
this unexplored regime. Contrarily to a naive intuition, the
effective interaction does not depend on multipole terms beyond the
dipole one, and the evolution can be described via the usual
lightshift potential. We have shown the existence of diffraction
effects similar to those present when the light is on resonance with
atomic transitions. The main obstacle to carry out the experiment is
the  short duration of the laser pulse. For other possible
experiments with much longer durations (for instance, Bragg's
scattering with very short wavelengths) the ionization rates can be
high and a procedure to eliminate the ionized atoms should be added
to the arrangement.

In addition to the interest of our proposal in atom optics, it could
also be relevant to other fields. We shall focus on three of them.
The first one concerns to fundamental physics, in particular, to the
understanding of the wave properties of quantum systems. Our scheme
provides the first example where the periodicity of the classical
diffraction grating is similar to the size of the quantum diffracted
object. This is an extreme scenario for quantum diffraction that
extends the research presented in \cite{Ze1,Ze2,Ze3,Pr1}. Our
analysis shows that in the limit of objects of the size of the grating
periodicity, diffraction survives.

Also, from a fundamental point of view, our proposal serves to test the
theory of light-matter interactions in the scale of very short
wavelengths. This knowledge would be necessary to study, for
instance, the dispersion of this type of light by atoms. It should
be also in the basis of techniques aimed to provide images of the
spatial structure of atoms, a process in principle possible with
light of the same wavelength of the size of the illuminated object.

Finally, from a more practical point of view, the diffraction of
atoms can be used to measure the polarizability, by
fitting the experimental data to the detection distributions.
This would be an alternative method of measurement of this atomic property.

{\bf Acknowledgments} I am grateful to Luis Plaja for discussions on
the problem. I acknowledge support from Spanish Ministerio de
Ciencia e Innovaci\'on through the research project FIS2009-09522.

{\bf Appendix 1}

In this Appendix we present some technical points that complement
the main developments in the paper.

{\it Semiclassical approximation.} We derive the values of the laser
intensity that guarantee the use of the semiclassical approximation.
The usual criterion for its validity is to have a large number of
photons in the interaction region. In standard Kapitza-Dirac
diffraction, where the approximation works well, the number of
photons per unit volume is $I/c\hbar \omega _L \approx 10^{18}
photons/m^3$, where we have used $\lambda _L =500 nm$ and $I=10^7
W/m^2$. The typical volume of the interaction region is $10^{-12}
m^3$ ($10 \mu m$ (aperture collimating the beam of atoms) $\times$
$1 mm$ (height of the laser beam) $\times$ $100 \mu m$ (width of the
laser beam)). The number of photons in this characteristic volume is
around $10^{6}$. For short wavelengths, the energy of each photon is
around $10^2 eV$ and, in order to have a similar number of photons
(assuming a similar characteristic volume), the intensity must be
above $10^{11} W/m^2$. Then in our proposal we can safely use the
semiclassical approximation.

{\it Multipole expansion.} For very short wavelengths different
parts of the atom can feel different electric fields. We must go
beyond the dipole approximation and consider higher multipole terms.
The light-atom interaction potential can be expressed in the
multipole form \cite{Lou}:
\begin{equation}
{\bf D}\cdot {\bf E}({\bf R},t) + \frac{1}{2} \sum _{i,j} Q_{ij} \left( \frac{\partial E_i}{\partial r_j} \right) ({\bf R},t) + \cdots
\label{eq:mul}
\end{equation}
where ${\bf D}$ and $Q_{ij}$ represent the dipole and $ij$-component
of the quadrupole momenta of the atom. They can be rewritten using
the second quantization of the atomic variables \cite{Lou}. If we
denote by $|h>$ and $|l>$ the eigenstates of the atom we have
$\hat{\bf D}=\sum _{l,h}{\bf d}_{lh}|l><h|$ with ${\bf D}_{lh}=
\sum _{e_n} <l|e_n {\bf r}_{e_n}|h>$, and $\hat{Q}_{ij}=\sum _{l,h} Q_{ij})_{lh}|l><h|$ with $(Q_{ij})_{lh}= \sum _{e_n} <l|e_n ( 3(r_{e_n})_i(r_{e_n})_j - \delta _{ij}{\bf r}_{e_n}^2)|h>$. The sum, $\sum _{e_n}$, is over all the electrons of the atom. The diagonal elements (expectation values) ${\bf D}_{ll}$ are null because the integrand has odd parity. The non-diagonal (transition) elements contribute to the atomic polarizability. In the static and
spherically symmetric case the polarizability has the form
\begin{equation}
\alpha =\frac{2}{3} \sum _{l \neq g} \frac{|<g|\sum _{e_n}{\bf r}_{e_n} |l>|^2}{{\cal E}_l-{\cal E}_g}
\end{equation}
with $g$ denoting the ground state, and ${\cal E}_l$ he energy of the state
\cite{Sch}.

The dipole term also describes the ionization of the atom. It is an
alternative channel associated with ground-continuum transitions,
with matrix elements in the form $<c|e{\bf r}|g>$, denoting $|c>$
states of the continuum.

The next term in Eq. (\ref{eq:mul}) represents the permanent
quadrupole effects. In general, the values of the permanent
quadrupole momenta can be expressed as $Q_{ij} \sim er_0^2$, with
$r_0$ Bohr's radius and a proportionality coefficient of the order
of unity \cite{Ita}. As signaled before, in order to be in the
diffraction regime the potential must be of the order of $U \approx
10^{-3}eV$. Then the quadrupole term must be similar, $U_Q \approx
10^{-3}eV$. Taking for the field the standard form we can express
the potential as $U_Q \approx er_0^2k_LE_0 \approx er_0E_0$. Using
this expression and the relation between $I$ and $E_0$ we have that
the intensity of the laser must be around $10^{8} W/m^2$ in order to
the quadrupolar effects to be relevant in the problem. This value is
smaller than the intensity required to have a non-negligible atomic
dipole induced by the polarizability. In Appendix 2 we discuss the
role of induced quadrupole terms in our problem.

Note that if the n-th order permanent multipole coefficient follows a relation
of the type $Q^n \sim er_0^n$ with a proportionality coefficient of
the order of unity, we have $U_{Q^n} \approx er_0^nk_L^{n-1}E_0
\approx er_0E_0$ and that multipole term also has to be taken into
account. However, as in the quadrupole case, its temporal dependence
remains in the form $\cos(\omega _L t)$, and after averaging it can
be neglected.

Finally, we recall the fact that the electric quadrupole and the
magnetic dipole energies have similar magnitudes. Thus, if the
electric quadrupole term is relevant for the problem, the magnetic
dipole one must also be taken into account. The magnetic dipole term
reads as $e{\bf D}_M \cdot {\bf B}({\bf R})$ with ${\bf B}({\bf R})$
the magnetic field at the atomic CM position and ${\bf D}_M$ the
magnetic dipole moment, which can be expressed as ${\bf
D}_M=-(1/2m)\sum _i {\bf l}_i$ with ${\bf l}_i$ the orbital angular
momentum of the i-th electron in the atom. From these expressions
and the form of the electromagnetic potential it is clear that the
temporal dependence of this term is also proportional to $\cos
(\omega _L t)$, and it will vanish after time averaging just as in
the electric quadrupole case.

{\bf Appendix 2} In this Appendix we analyze the atomic quadrupole
induced by the electric field or its gradient. When the
polarizability effects are taken into account the quadrupole momenta
can be expressed as
\begin{equation}
Q_{ij}=Q_{ij}^0 + \sum _k A_{kij}E_k + \sum _{kl} C_{ijkl} \frac{\partial E_k}{\partial x_l}
\end{equation}
where $ Q_{ij}^0$ are the permanent momenta, $A_{kij}$ is the
dipole-quadrupole polarizability and $C_{ijkl}$ the
quadrupole-quadrupole one. The first term in the r. h. s. of the
equation represents the quadrupole momenta in absence of external
electric fields, the second the momenta induced by an electric field
and the third these induced by the gradient of the field.

The order of magnitude of the coefficients is $A \approx
e^2r_0^3E_h^{-1}$ and $C \approx e^2r_0^4E_h^{-1}$ with $E_h = 4
\times 10^{-18} J$. Introducing numerical values we obtain for the
potentials associated with these two terms ($U_A
\approx AE_0k_LE_0$ and $U_C \approx C(E_0k_L)^2$): $U_A \approx U_C \approx (er_0E_0)^2 E_h^{-1} \approx 10^{-4} - 10^{-5} eV $, where we have used $r_0 k_L \approx 1$. We expect the potentials to be ten to one hundred times smaller than the lightshift potential. However, to extract precise conclusions of the importance of the induced terms we should know the actual values of the coefficients. Unfortunately, very few experimental data are available, and in many cases there are large uncertainties on their theoretical estimation (see, for instance, \cite{Por} for some recent work in this subject. Note that with the values suggested for Mg in this reference the induced potential would be comparable to the lightshift one).

In our particular problem, when the quadrupole polarizability is
taken into account the full potential can be written as
\begin{eqnarray}
U(X)=U_0 \cos ^2(k_LX) + U_A \cos ^3 (k_LX)\sin (k_L X) \nonumber
\\ + U_C \cos ^2 (k_LX)\sin ^2 (k_L X)
\end{eqnarray}
Note that the temporal dependence in all the terms of the r. h. s.
is $\cos ^2 (\omega _L t)$. All the terms remain after the time averaging.
The coefficient resulting from the integration is included in $U_0,
U_A, U_C$. Using simple trigonometric relations we obtain
\begin{eqnarray}
U(X)=\frac{U_0}{2}+\frac{U_C}{8} + \frac{U_0}{2} \cos (2k_LX)+
\frac{U_A}{4} \sin (2k_LX) \nonumber \\ + \frac{U_A}{8} \sin
(4k_LX)- \frac{U_C}{8} \cos (4k_LX)
\end{eqnarray}
The final detection pattern is
\begin{eqnarray}
e^{iU(X)\tau /\hbar} e^{ik_0X}= e^{i\left( \frac{U_0}{2} +
\frac{U_C}{8} \right) \tau /\hbar} \sum _{n,m,l,r=-\infty}^{\infty }
i^{n+r} J_n \left( \frac{U_0 \tau }{2\hbar } \right) \times
\nonumber \\ J_m \left( \frac{U_A \tau }{4\hbar } \right) J_l \left(
\frac{U_A \tau }{8\hbar } \right) J_r \left( -\frac{U_C \tau
}{8\hbar } \right) e^{i([2n+2m+4l+4r]k_L + k_o)X}
\end{eqnarray}
where we have used the relation $\exp (i\xi \sin \varphi)=\sum _n
J_n(\xi )\exp (in\varphi )$. The diffraction pattern shows the same
analytical form found for the lightshift potential, the peaks
correspond to even multiples of $k_L$. The difference lies in the
different intensities of the peaks, which in addition to $U_0$ now
also depend on $U_A$ and $U_C$. In conclusion, in presence of
quadrupole polarizability effects, we would obtain a diffraction
pattern similar to that associated with dipole polarizability.
Our main result remains valid, there are diffraction patterns in the
regime of very short wavelengths. In addition, the diffraction
pattern could be used to determine the $U_A$ and $U_C$ values and,
in consequence, the quadrupole polarizabilities, which are very difficult to
measure by other methods \cite{Por}.

redpajama_set_name: RedPajamaArXiv


The price breaks indicated on www.ankaka.com normally go up to 50 pieces or up to USD $1000. Ankaka can get you better prices for larger-volume orders.
This entry was posted on 2010/01/30, 8:56 pm and is filed under Free Guides For Resellers & DropShippers. You can follow any responses to this entry through RSS 2.0. You can leave a response, or trackback from your own site.


A few days into learning that Equifax has been hacked the dust has settled and the shock of the largest security breach in modern financial history has become a part of our everyday lives – what do you do now?
Hacks like this are occurring more and more often and unfortunately, becoming a part of everyday life in the 21st century. Recent hacks include Yahoo, the IRS, the DNC, Snapchat, Netflix, US Dept. of Vet Affairs, Home Depot, T-Mobile/Experian, UPS, Twitter, Evernote, AOL, AMG, Citi, Zappos, Red Cross, Quest Diagnostics, Banner Health, British Airways, Linkedin, the list goes on and on and on.
You can view an interactive infographic of the worlds largest data breaches here.
You can no longer depend on others to protect your private and personal financial information, at this point we must all assume that criminals have access to all of our names, addresses, phone numbers, social security numbers, drivers license numbers, etc…, pretty much everything. Knowing all of this, it's up to each of us to be diligent in protecting our own identities and the identities of our families.
So how do you protect yourself and your credit?
It's time to get proactive about protecting your identity and your credit. Follow the following steps to protect yourself from the current Equifax data breach as well as inevitable future hacks.
Click "Check Potential Impact" and enter your information on the following page.
Based on the information provided, we believe that your personal information may have been impacted by this incident.
You will then be given instructions on enrolling in TrustedID Premier for 1 year at no charge with no credit card required.
NOTE: You have until November 21, 2017 to enroll.
– Credit file monitoring and automated alerts of key changes to your Equifax, Experian, and TransUnion credit files.
– Allows you to prevent access to your Equifax credit report by third parties, with certain exceptions.
– Searches suspicious web sites for your Social Security number.
– A copy of your Equifax Credit Report.
– Up to $1 million in ID theft insurance. Helps pay for certain out-of-pocket expenses in the event you are a victim of identity theft.
NOTE: There was some confusion whether signing up for the credit monitoring service meant that consumers signed away their right to sue Equifax via an arbitration clause.
A fraud alert is an instrument given to you by the 3 credit reporting agencies, Experian, Equifax, and TransUnion, which notifies lenders and creditors who pull your report to take additional steps to verify your identification before extending credit.
A fraud alert only allows creditors to gain access to your credit reports if they verify your identity. For example, if someone applies for an auto loan in your name and you have a fraud alert active on your credit file, the business must call you to verify whether you are the person applying for the loan before accessing your credit reports. If you do not verify that you are the person applying for credit or simply do not pick up the phone, the business will not be given access to your credit report and loan will not be made.
According to the FCRA, consumers may initiate a Fraud Alert with any of the 3 credit bureaus for free at any time. You do not need to contact each of the 3 bureaus to initiate the fraud alert, by law, once one credit bureau is notified of your request for a fraud alert, they will contact the remaining 2 credit bureaus to initiate a fraud alert with them as well.
This fraud alert is available for everyone at any time and lasts for a period of 90 days.
This fraud alert is only available to actual victims of Identity theft or fraud. You will have to forward a copy of an Identity Theft Report to initiate this alert. This fraud alert entitles you to 2 free credit reports from each of the credit bureaus within the first 2 months of initiating the alert as well as another free report within the next 12 months. This fraud alert lasts for a period of 90 days.
This fraud alert is available to service members on active duty and lasts for a peiod of 1 year.
We suggest that everyone activate an initial fraud alert on their credit to add an extra layer of protection from identity theft.
Please Note that you can request that a Fraud Alert be removed at any time.
Get your free credit reports from all 3 credit bureaus (Experian, Equifax, and TransUnion) at www.annualcreditreport.com. Once you have the reports, review them and look for anything out of the ordinary like suspicious addresses, phone numbers, and account information. If you notice any suspicious activity on your credit reports make sure that you contact the credit bureaus, the creditor reporting the information, the FTC, the CFPB, and if necessary your local law enforcement. If you need help dealing with identity theft on your credit reports contact CreditFirm.Net at 800-750-1416 for help.
The Equifax data breach gave hackers access to your personal data including your name, address, phone numbers, date of birth, social, and other financial information which, in the wrong hands, can be used by criminals to file your taxes and steal your refund. Don't wait till the last minute, file your taxes as early as possible to safeguard your refund.
Now that your social security number may be compromised and in the wrong hands, be weary of calls from collection agencies or even people claiming to be from the IRS demanding payment on a debt. They may threaten you with lawsuits and jail time and even have your personal info like your social and date of birth to confirm your identity but, the law is on your side. If you receive calls from anyone claiming that you owe them money, whether it's the IRS, Collection Agency, or Law Firm, you can simply demand that the person stop calling you and forward any future communications to you via standard mail in accordance with the FDCPA. If you receive a document in the mail from a collection agency requesting payment on a debt, consider requesting Debt Validation from the collection agency – which forces the agency to provide copies of documents which you signed with the original creditor corroborating their story and proving your liability in the debt. If you are receiving calls or mail from companies demanding payment on debt that you're not sure about, contact CreditFirm.Net at 800-750-1416 for help.
Part of the security breach at Equifax included access to data such as your drivers license numbers. Although less common than typical identity theft that involves accounts being opened in consumers names, some criminals may attempt to create fake drivers licenses with your information and numbers which may lead to parking tickets, moving violations and in some cases even arrest warrants. Check in with your local Department of Motor Vehicles or Secretary of State office every once in a while and request a copy of your driving record.
Stay on top of your credit and personal information, make sure that you keep an eye out for any suspicious activity, and if you have any questions or need help resolving an identity theft or credit issue you can call 800-750-1416 for help.
One Comment on "How To Protect Yourself After The Equifax Hack"


text:
package io.fabric8.maven;

import io.fabric8.kubernetes.api.KubernetesHelper;
import io.fabric8.kubernetes.api.model.Container;
import io.fabric8.kubernetes.api.model.ContainerPort;
import io.fabric8.kubernetes.api.model.EnvVar;
import io.fabric8.kubernetes.api.model.HasMetadata;
import io.fabric8.kubernetes.api.model.ObjectReference;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodSpec;
import io.fabric8.kubernetes.api.model.PodTemplateSpec;
import io.fabric8.kubernetes.api.model.ReplicationController;
import io.fabric8.kubernetes.api.model.ReplicationControllerSpec;
import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.api.model.ServiceList;
import io.fabric8.kubernetes.api.model.ServicePort;
import io.fabric8.kubernetes.api.model.ServiceSpec;
import io.fabric8.kubernetes.api.model.VolumeMount;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.maven.support.DefaultExcludedEnvVariablesEnum;
import io.fabric8.maven.support.DockerCommandPlainPrint;
import io.fabric8.maven.support.IDockerCommandPlainPrintCostants;
import io.fabric8.maven.support.OrderedProperties;
import io.fabric8.openshift.api.model.Route;
import io.fabric8.openshift.api.model.RouteList;
import io.fabric8.openshift.api.model.RouteListBuilder;
import io.fabric8.openshift.api.model.RouteSpec;
import io.fabric8.openshift.client.OpenShiftClient;
import io.fabric8.utils.Files;
import io.fabric8.utils.Strings;
import io.fabric8.utils.TablePrinter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

/**
 * Generates a properties file that contains that env variables that are expected to be passed by kubernetes to the container.
 * The env variable configuration is determined by the kubernetes.json file and the services that are currently running in the target namespace.
 */
@Mojo(name = "create-env", defaultPhase = LifecyclePhase.COMPILE)
public class CreateEnvMojo extends AbstractFabric8Mojo {

    private static final String HOST_SUFFIX = "_SERVICE_HOST";
    private static final String PORT_SUFFIX = "_SERVICE_PORT";
    private static final String PROTO_SUFFIX = "_TCP_PROTO";
    private static final String DOCKE_ENV_PREFIX = "docker.env.";
    private static final String DOCKER_NAME = "docker.name";
    private static final String EXEC_ENV_SCRIPT = "environmentScript";

    @Parameter(property = "fabric8.envFile", defaultValue = "env.properties")
    private String envPropertiesFileName;

    @Parameter(property = "fabric8.envScript", defaultValue = "env.sh")
    private String envScriptFileName;

    @Parameter(property = "fabric8.dockerRunScript", defaultValue = "docker-run.sh")
    private String dockerRunScriptFileName;

    @Parameter(property = "docker.image")
    private String name;

    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        try {
            String basedir = System.getProperty("basedir", ".");
            File propertiesFile = new File(basedir + "/target/" + envPropertiesFileName).getCanonicalFile();
            File scriptFile = new File(basedir + "/target/" + envScriptFileName).getCanonicalFile();
            File dockerRunFile = new File(basedir + "/target/" + dockerRunScriptFileName).getCanonicalFile();

            Object config = loadKubernetesJson();
            List<HasMetadata> list = KubernetesHelper.toItemList(config);
            Map<String, String> env = getEnvFromConfig(list);
            String namespace = getNamespace();
            env.putAll(getNamespaceServiceEnv(namespace));
            removeDefaultEnv(env);
            expandEnvironmentVariable(env);
            displayEnv(env);

            if (name == null) {
                name = findFirstImageName(list);
            }
            StringBuilder sb = new StringBuilder();
            List<VolumeMount> volumeMount = getVolumeMountsFromConfig(list);
            List<ContainerPort> containerPort = getContainerPortsFromConfig(list);
            DockerCommandPlainPrint dockerCommandPlainPrint = new DockerCommandPlainPrint(sb);
            dockerCommandPlainPrint.appendParameters(env, IDockerCommandPlainPrintCostants.EXPRESSION_FLAG);
            dockerCommandPlainPrint.appendContainerPorts(containerPort, IDockerCommandPlainPrintCostants.PORT_FLAG);
            dockerCommandPlainPrint.appendVolumeMounts(volumeMount, IDockerCommandPlainPrintCostants.VOLUME_FLAG);
            dockerCommandPlainPrint.appendImageName(name);

            displayVolumes(volumeMount);
            displayContainerPorts(containerPort);
            displayDockerRunCommand(dockerCommandPlainPrint);

            Properties properties = getProject().getProperties();
            if (properties == null) {
                properties = new Properties();
            }
            for (Map.Entry<String, String> entry : env.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                if (key == null) {
                    getLog().warn("Ignoring null key!");
                } else if (value == null) {
                    getLog().warn("Ignoring null value for key: " + key);
                } else {
                    properties.setProperty(DOCKE_ENV_PREFIX + key, value);
                }
            }
            if (name != null) {
                properties.setProperty(DOCKER_NAME, name);
            }
            String scriptFileAbsolutePath = scriptFile.getAbsolutePath();
            if (scriptFileAbsolutePath != null) {
                properties.setProperty(EXEC_ENV_SCRIPT, scriptFileAbsolutePath);
            }
            Properties envProperties = new OrderedProperties();
            Set<Map.Entry<String, String>> entries = env.entrySet();
            for (Map.Entry<String, String> entry : entries) {
                String key = entry.getKey();
                String value = entry.getValue();
                if (key == null) {
                    getLog().warn("Ignoring null key!");
                } else if (value == null) {
                    getLog().warn("Ignoring null value for key: " + key);
                } else {
                    envProperties.put(key ,value);
                }
            }
            saveEnvScript(env, scriptFile);
            saveDockerRunScript(dockerCommandPlainPrint, dockerRunFile);
            saveProperties(envProperties, propertiesFile);

        } catch (IOException e) {
            throw new MojoExecutionException("Failed to load environment schemas: " + e, e);
        }
    }

    /**
     * Returns the first docker image name found in a ReplicationController
     */
    protected String findFirstImageName(List<HasMetadata> list) {
        for (HasMetadata hasMetadata : list) {
            if (hasMetadata instanceof ReplicationController) {
                ReplicationController rc = (ReplicationController) hasMetadata;
                ReplicationControllerSpec spec = rc.getSpec();
                if (spec != null) {
                    PodTemplateSpec podTemplateSpec = spec.getTemplate();
                    if (podTemplateSpec != null) {
                        PodSpec podSpec = podTemplateSpec.getSpec();
                        if (podSpec != null) {
                            List<Container> containers = podSpec.getContainers();
                            if (containers != null) {
                                for (Container container : containers) {
                                    String image = container.getImage();
                                    if (Strings.isNotBlank(image)) {
                                        return image;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        return null;
    }

    /**
     * Return the Env Variables that correspond to each services that runs under the specified namespace.
     *
     * @param namespace The target namespace.
     * @return the env variables
     */
    Map<String, String> getNamespaceServiceEnv(String namespace) {
        Map<String, String> result = new HashMap<>();
        KubernetesClient kubernetes = getKubernetes();
        ServiceList serviceList = kubernetes.services().inNamespace(namespace).list();
        RouteList routeList = listRoutes(kubernetes, namespace);
        for (Service service : serviceList.getItems()) {
            String serviceName = KubernetesHelper.getName(service);
            String id = serviceName.toUpperCase().replace("-", "_");
            Route route = findRoute(serviceName, routeList);
            RouteSpec spec = null;
            if (route != null) {
                spec = route.getSpec();
            }
            ServiceSpec serviceSpec = service.getSpec();
            if (spec != null) {
                result.put(id + HOST_SUFFIX, spec.getHost());
            } else if (serviceSpec != null) {
                result.put(id + HOST_SUFFIX, serviceSpec.getClusterIP());
            }
            if (serviceSpec != null) {
                List<ServicePort> ports = serviceSpec.getPorts();
                for (ServicePort port : ports) {
                    result.put(id + PORT_SUFFIX, String.valueOf(port.getPort()));
                    result.put(id + PROTO_SUFFIX, port.getProtocol());
                    result.put(id + PORT_SUFFIX + "_" + port.getPort() + PROTO_SUFFIX, port.getProtocol());
                }
            }
        }
        return result;
    }

    /**
     * Return Env variables found in the kubernetes config.
     *
     * @param entities The config instance.
     * @return A map with the env key value pairs.
     * @throws IOException
     */
    private Map<String, String> getEnvFromConfig(List<HasMetadata> entities) throws IOException {
        Map<String, String> result = new TreeMap<>();

        for (HasMetadata entity : entities) {
            if (entity instanceof Pod) {
                Pod pod = (Pod) entity;
                for (Container container : pod.getSpec().getContainers()) {
                    if (container.getImage().equals(name)) {
                        result.putAll(mapFromEnv(container.getEnv()));
                    }
                }
            } else if (entity instanceof ReplicationController) {
                ReplicationController replicationController = (ReplicationController) entity;
                for (Container container : replicationController.getSpec().getTemplate().getSpec().getContainers()) {
                    if (container.getImage().equals(name)) {
                        result.putAll(mapFromEnv(container.getEnv()));
                    }
                }
            }
        }
        return result;
    }

	/**
	 * Lets expand environment variables by overriding it via via the command
	 * line.
	 */
	protected void expandEnvironmentVariable(Map<String, String> env) {
		String regex = "\\$\\{(.*?)\\}";
		MavenProject project = getProject();
		if (project != null) {
			Properties properties = project.getProperties();
			properties.putAll(project.getProperties());
			properties.putAll(System.getProperties());
			for (Map.Entry<String, String> entry : env.entrySet()) {
				String envValue = entry.getValue();
				if (envValue != null && !envValue.isEmpty() && envValue.contains("${") && envValue.contains("}")) {
					Pattern p = Pattern.compile(regex);
					Matcher m = p.matcher(entry.getValue());
					while (m.find()) {
						String parameterName = m.group(1);
						String name = "fabric8.create-env." + parameterName;
						String propertyValue = properties.getProperty(name);
						if (Strings.isNotBlank(propertyValue)) {
							getLog().info("Overriding environment variable " + parameterName + " with value: " + propertyValue);
							String replaced = checkAndReplaceValue(entry.getValue(), propertyValue, parameterName);
							entry.setValue(replaced);
						} else {
							getLog().info("No property defined for environment variable: " + parameterName);
						}
					}
				}
			}
		}
	}

	/**
	 * Return VolumeMounts found in the kubernetes config.
	 *
	 * @param entities The config instance.
	 * @return A list of VolumeMount objects.
	 * @throws IOException
	 */
	private List<VolumeMount> getVolumeMountsFromConfig(List<HasMetadata> entities) throws IOException {
		List<VolumeMount> volumeList = new ArrayList<VolumeMount>();

		for (HasMetadata entity : entities) {
			if (entity instanceof ReplicationController) {
				ReplicationController replicationController = (ReplicationController) entity;
				for (Container container : replicationController.getSpec().getTemplate().getSpec().getContainers()) {
					if (container.getImage().equals(name)) {
						if (!container.getVolumeMounts().isEmpty()) {
							return container.getVolumeMounts();
						}
					}
				}
			}
		}
		return volumeList;
	}

	/**
	 * Return container Ports found in the kubernetes config.
	 *
	 * @param entities The config instance.
	 * @return A list of ContainerPort objects.
	 * @throws IOException
	 */
	private List<ContainerPort> getContainerPortsFromConfig(List<HasMetadata> entities) throws IOException {
		List<ContainerPort> containerPortList = new ArrayList<ContainerPort>();

		for (HasMetadata entity : entities) {
            if (entity instanceof Pod) {
                Pod pod = (Pod) entity;
                for (Container container : pod.getSpec().getContainers()) {
                    if (container.getImage().equals(name)) {
                    	if (!container.getPorts().isEmpty()) {
                    	    containerPortList.addAll(container.getPorts());
                    	}
                    }
                }
            }
            else if (entity instanceof ReplicationController) {
					ReplicationController replicationController = (ReplicationController) entity;
					for (Container container : replicationController.getSpec().getTemplate().getSpec().getContainers()) {
						if (container.getImage().equals(name)) {
							if (!container.getPorts().isEmpty()) {
								containerPortList.addAll(container.getPorts());
							}
						}
					}
			    }
		    }
		    return containerPortList;
	}

    private void displayEnv(Map<String, String> map) {
        TablePrinter table = new TablePrinter();
        table.columns("Name", "Value");

        for (Map.Entry<String, String> entry : map.entrySet()) {
            String name = entry.getKey();
            String value = entry.getValue();
            table.row(name, value);
        }

        getLog().info("");
        getLog().info("Generated Environment variables:");
        getLog().info("-------------------------------");

        List<String> lines = table.asTextLines();
        for (String line : lines) {
            getLog().info(line);
        }
        getLog().info("");

    }

    private void displayVolumes(List<VolumeMount> volumeMount) {
        TablePrinter table = new TablePrinter();
        table.columns("Name", "Mount Path", "Read Only");

		Iterator<VolumeMount> it = volumeMount.iterator();
		while (it.hasNext()){
			VolumeMount vol = it.next();
            String name = vol.getName();
            String mounthPath = vol.getMountPath();
            String ro = String.valueOf(Boolean.FALSE);
            if (vol.getReadOnly() == true) {
            	ro = String.valueOf(Boolean.TRUE);
            }
			table.row(name, mounthPath, ro);
		}

        getLog().info("");
        getLog().info("Volumes Summary:");
        getLog().info("-------------------------------");

        List<String> lines = table.asTextLines();
        for (String line : lines) {
            getLog().info(line);
        }
        getLog().info("");

    }

    private void displayContainerPorts(List<ContainerPort> containerPort) {
        TablePrinter table = new TablePrinter();
        table.columns("Host IP", "Host Port", "Container Port");

		Iterator<ContainerPort> it = containerPort.iterator();
		while (it.hasNext()){
			ContainerPort port = it.next();
            String hostIp = port.getHostIP();
            String hostPort = "";
            String contPort = "";
            if (port.getHostPort() != null) {
            	hostPort = String.valueOf(port.getHostPort());
            }
            if (port.getContainerPort() != null) {
            	contPort = String.valueOf(port.getContainerPort());
            }
			table.row(hostIp, hostPort, contPort);
		}

        getLog().info("");
        getLog().info("Container Ports Summary:");
        getLog().info("-------------------------------");

        List<String> lines = table.asTextLines();
        for (String line : lines) {
            getLog().info(line);
        }
        getLog().info("");

    }

    private void removeDefaultEnv(Map<String, String> map) {
        for(Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext(); ) {
            Map.Entry<String, String> entry = it.next();
            if(DefaultExcludedEnvVariablesEnum.contains(entry.getKey())) {
                it.remove();
            }
        }
    }

    private void displayDockerRunCommand(DockerCommandPlainPrint dockerCommandPlainPrint) {
        getLog().info("Docker Run Command:");
        getLog().info("-------------------------------");
        getLog().info(dockerCommandPlainPrint.getDockerPlainTextCommand().toString());
    }

    /**
     * Load the kubernetes configuration found in the project
     *
     * @return The Kubernetes config.
     */
    private Object loadKubernetesJson() throws MojoFailureException, IOException {
        File json = getKubernetesJson();
        if (!Files.isFile(json)) {
            if (Files.isFile(kubernetesSourceJson)) {
                json = kubernetesSourceJson;
            } else {
                throw new MojoFailureException("No such generated kubernetes json file: " + json + " or source json file " + kubernetesSourceJson);
            }
        }
        return KubernetesHelper.loadJson(json);
    }

    private static Map<String, String> mapFromEnv(List<EnvVar> envVars) {
        Map<String, String> result = new HashMap<>();
        for (EnvVar envVar : envVars) {
            result.put(envVar.getName(), envVar.getValue());
        }
        return result;
    }

    private static void saveProperties(Properties properties, File propertiesFile) throws IOException {
        try (FileWriter writer = new FileWriter(propertiesFile)) {
            properties.store(writer, "Generated Environment Variables");
        }
    }

    private static void saveEnvScript(Map<String, String> map, File scroptFile) throws IOException {
        try (FileWriter writer = new FileWriter(scroptFile)) {
            writer.append("#!/bin/bash").append("\n");
            for (Map.Entry<String, String> entry: map.entrySet()) {
            	if (entry.getValue() != null && !entry.getValue().contains(" ")) {
                    writer.append("export ").append(entry.getKey()).append("=").append(entry.getValue()).append("\n");
            	} else {
                    writer.append("export ").append(entry.getKey()).append("=").append("\"").append(entry.getValue()).append("\"").append("\n");
            	}
            }
            writer.flush();
        }
    }

    private static void saveDockerRunScript(DockerCommandPlainPrint printer, File scriptFile) throws IOException {
        try (FileWriter writer = new FileWriter(scriptFile)) {
            writer.append("#!/bin/bash").append("\n");
            writer.append(printer.getDockerPlainTextCommand().toString()).append("\n");
            writer.flush();
        }
    }

    private static RouteList listRoutes(KubernetesClient client, String namespace) {
        try {
            return client.adapt(OpenShiftClient.class).routes().inNamespace(namespace).list();
        } catch (Throwable t) {
            return new RouteListBuilder().build();
        }
    }

    private static Route findRoute(String serviceId, RouteList routeList) {
        for (Route route : routeList.getItems()) {
            RouteSpec spec = route.getSpec();
            if (spec != null) {
                ObjectReference to = spec.getTo();
                if (to != null) {
                    String name = to.getName();
                    if (serviceId.equals(name)) {
                        return route;
                    }
                }
            }
        }
        return null;
    }

    private static String checkAndReplaceValue(String envValue, String value, String parameterName) {
    	String escapedParameterName = "\\$\\{" + parameterName + "\\}";
    	String stringReplaced = envValue.replaceAll(escapedParameterName, value);
    	return stringReplaced;
    }
}

redpajama_set_name: RedPajamaGithub


This fiery little dress was made in April 2016 and sadly being outgrown! It's in new condition with no tan or make-up marks. It is available immediately.
Asking Price: $US1600. Shipping costs are included in the asking price for worldwide shipping. Sale is final.


If you're looking for a budget gaming joystick, the Thrustmaster T-Flight is a decent option. Find more of our favorites below.
If you spend a lot of time playing first-person shooter games (FPS), then you know just how important a fraction of a second can be to your virtual survival.
I'm an avid Battlefield 3 player and have noticed that while a good gaming mouse gives me an advantage in many situations, it's simply not ideal for some vehicles like jets and helicopters.
If you're looking for a joystick for PC racing, flight simulation, fighting, or FPS games, I've got you covered. Here's a look at my top joysticks for PC gaming.
You need throttle control if you're trying to engage in serious flight simulation, and it's the foremost factor that separates a joypad from a joystick setup. By making sure your joystick comes with a decent throttle, you'll be able to access speed and granularity that can be the difference between life and death.
Though it's not necessary, the most respected flight controllers do come with a separate control for the throttle, including extra toggle switches and LEDs.
Others have throttle control built onto the base of the joystick, but as long as there's a decent amount of travel in the throttle, you'll have good in-game control. Another benefit of a separate throttle is that it minimizes or removes your dependence on using your keyboard.
Sims demand a lot of in-flight controls and having plenty of buttons can be extremely useful. Obviously you can use your keyboard if you need extra controls, but it's nice to not be dependent on it.
You'll need at least four buttons on the stick itself and ideally a hat switch on top of it.
Traditionally, joysticks just have pitch and roll control and can move forward, back, left and right. However, some are configured for 3-D movement, which means that in addition to controlling the X- and Y- axis, you can also twist the stick clockwise or anti-clockwise to control the Z-axis.
This is generally used to control yaw and replicate the rudder controls of an aircraft.
In space, the 3-D control can be crucial for accuracy. While this function isn't as necessary on a stick with other controls that can mimic the rudder, on budget sticks its absence is noticeable. The rudder can also be replicated and controlled using pedals.
HOTAS: This acronym stands for "Hands-On Throttle and Stick" and indicates a dual controller where one hand rests permanently on the throttle and the other remains on the stick.
Hat switch: A multi-directional button akin to the d-pad on a modern controller. On a flight stick, the d-pad has a hat on top which the thumb can easily push to activate the levers. They come in either 4-way or 8-way styles.
With that introduction, here are my top picks for PC gaming joysticks. You'll notice that Thrustmaster somewhat dominates the list.
If you simply want a joystick to use with the occasional vehicle, then this is a worthwhile option. One of the top sellers on Amazon, the Logitech Extreme 3D is durable and fits the mold for FPS, but isn't quite something you'd want to use if you're spending hours every day on a flight simulator.
It has X,Y and Z axes, throttle axis, a hat switch, and enough buttons to not have to use the keyboard with most games, in addition to being a great value.
I've owned one for a few years and will probably just purchase a new one when it wears out because it is so affordable. In this price range you could also consider the Logitech Attack 3, but I like how well-placed all the buttons are on this particular model.
I like the Extreme 3D because it plays well in addition to being affordable and durable.
It has features like 12 programmable buttons and an eight-way rubber hat switch for additional control and precision.
For gamers looking for a budget option that does some serious heavy lifting, this is definitely a flight stick to consider. It's one of the only cheap joysticks that has hall sensors instead of potentiometers, which does wonders for its sensitivity.
The T-16000M features great tension, zone control and return to center. Unlike many of the other options on this list, it's built for both right and left-handed players (to some success).
Some reviewers on Amazon commented on the short and awkward position of the throttle, so that's something to be aware of before purchasing. That said, with a rudder twist and plenty of buttons for programming and customizing, like the Logitech 3D Pro, it is a well-liked budget option.
It's made out of plastic (instead of metal like the Warthog which is reviewed below) and has less buttons and hats, but this joystick is still a Thrustmaster steal.
Some of its best features include a detachable throttle, Z-axis rotation for rudder control, and plenty of programmable buttons.
One reviewer at PC Gamer Magazine commented that the action on the stick and throttle leave something to be desired and that in the heat of a fight you'll hear plastic grinding on plastic, but overall the joystick still feels solid and is worth the price.
While it's no Warthog, this flight stick is a great option for the price and still has plenty of programmable buttons, Z-axis control and a detachable throttle to allow for flexibility in how you use it.
It's also a best seller on Amazon.
If you want the best of the best for flight simulation, then the Thrustmaster Hotas Warthog Joystick (released in 2011) is where it's at.
The Warthog is pricey, but it also gives you a unique replica set of the U.S. Air Force A-10C's joystick, dual throttle system, and control panel. Weighing in at 20.5 lbs shipping weight, this is one joystick you will not have to worry about flying off your desk in the heat of action.
It's not fancy, but it works and will probably last forever.
With a retro-style design, this flightstick might not immediately scream heavy duty dogfighting action, but it's still a very functional stick with extensive flightstick travel that enables fine-grain control (according to a reviewer at PC Gamer Magazine).
The stick itself has three axes of control and 24 buttons, including X-,Y-, and Z-axes for aileron, elevator, and throttle control. You can switch between three modes for a total of 128 programmable functions with the included Control Manager software (PC only).
It's a plug-and-play device that's built to last, and it will get the job done if the job is destroying enemy aircraft. That said, it's more expensive than some of the other models out there and for the money, you might want to have something that looks more like the real thing than a Game Boy.
A note on the throttle: the throttle has linear motion instead of arching, which can take some getting used to and isn't as desirable as the throttle action from Saitek and Thrustmaster.
You'll have to get over the toy-ish design, but as soon as you do, get ready to play hard.
With plenty of hat switches and buttons to keep you busy, this throttle features linear instead of arching movement which can take some getting used to.
It doesn't have a trim wheel, which left some reviewers disappointed, but overall most were very satisfied with their purchase.
A word to the wise on this stick: one of the most frequent comments on Amazon is that the buttons are prone to breaking quickly and for no reason at all. That said, there are some good things about it.
It's an adjustable stick with a dual throttle and 10 programmable buttons and a foldable base. Some of the negative aspects of the stick include an intense blue light just beneath the hat switch, and the fact the base tilts up when you're pushing the stick forward.
However, the drivers are easy to install, the design of the stick makes it easy to save space, and it has a good feel and texture with lots of buttons. Given that it does seem to break easily, this might be the best option for a back-up or travel stick.
Despite its cheap construction, there are still some positive elements to this stick like its adjust-ability and its space-saving design.
That said, serious gamers will probably only want to consider this as a back-up joystick.
The X55 Rhino from Saitek features a stick layout almost identical to the Warthog except with three hat-switches rather than four and interchangeable coil springs which allow you to tailor the resistance to your taste.
You can alter the resistance on the fly with the throttle—even to a greater degree than the Warthog—and it comes with plenty of mini-joysticks, hat switches, flick switches, and rotary switches that allow you to fully customize it.
The stick is, however, made out of plastic and some reviewers on Amazon have complained about QA issues, with buttons breaking and the parts simply not fitting together correctly. There were also some comments about difficulties getting the software to work.
Those who don't have manufacturing or software issues, however, really love the stick and are happy with their purchase.
A good option (if slightly dated) for an entry-level fully-customizable HOTAS.
If you can't afford the Thrustmaster or the updated version of this joystick, then this is a solid bet.
With the Saitek X52, you can program your controller for each game. The system also features precision centering mechanisms, with no-contact technology on X- and Y- axes and a constant spring force to improve control. The light-up buttons are also a plus.
It may seem somewhat expensive but for the money the Saitek Pro Flight Yoke with Three-Lever Throttle will get you as close to reality as you can be for around $100. It features a POV Hat, 14 button controls, and a 3-position mode switch.
Like other Saitek models, some reviewers on Amazon have complained of manufacturing issues and the need to send their units back or get a refund, so do your due diligence on this product before purchasing.
Another option if you're considering a yoke would be the CH Flight Sim Yoke, which (like the CH flight stick and throttle) looks less legitimate but has excellent manufacturing standards and is cheaper.
Which PC gaming joystick is your favorite?
What Joystick do You Use for PC Gaming?
Great review, you even mentioned CH products; kudo's! Keep an eye out for VKB sticks, they are top notch but often sold out. I also wouldn't recommend the T-flight hotas X, it's cheap but breaks down easily (buttons falling off, very inaccurate).


text:
Smaller businesses don't have the same resources as large multinationals when it comes to their procurement, and because of this, they often miss out on the best deals. Larger companies have the muscle to have entire procurement teams working on contracts, alongside access to mountains of data and spending power to get themselves the best possible price for essential materials, technology, products and services. Smaller businesses which are often owner-managed sometimes struggle to get this essential aspect of the business right and are prone to overspending on their essentials.
Enter MyProcurement, a Caerphilly-based startup founded by Phillipe Mele (above) which aims to take the headache out of procurement for smaller businesses – and potentially larger ones too. The company works on a simple "no savings, no payment" basis, and primarily deals with companies in the engineering and manufacturing sector.
Mele has worked on procurement at high-profile international brands, including EDF Energy and Tata Steel, but also finds working with smaller companies appealing. "When you work with smaller businesses and save them money it can feel more rewarding," says Mele. "What I do for small businesses is helpful to them as they often don't have time to do cost reduction," he adds.
Services offered by MyProcurement at present include Operating Expenses Reviews, which take a close look at costs that are incurred as a result of a businesses' day-to-day operations – these might include production materials, consumables, and utilities. MyProcurement claims that it can help achieve between 10-30% savings on these sorts of expenses. Capital Expenditure reviews, on the other hand, take a look at anything from new facilities, machine upgrades, office refurbishments or computers, for which MyProcurement can also assist in finding better deals. As part of its outsourced procurement offer, the company will also seek to add extras for your company from suppliers, like year-end rebates or employee discount schemes.
While the company is still in its start-up phase, Mele envisages that more automation and software will come into play as it evolves – an alpha version of software is currently in the works and is on course to run by the end of December. For Mele, incorporating an element of automation in to at least some of the procurement process is a natural step – but there is also a vital role for humans to play which machines aren't able to replace. "The idea is to develop software to help SMES reduce costs through artificial intelligence," he says. "Procurement has an analytic aspect, and a relationship management aspect – the analytical side is better with a machine as they make less mistakes. Automating the analytics will allow you to focus on the relationship management element, which will always need humans."
As the company looks to grow, Mele decided to join ESTnet in order to increase its network and influence. "The engineering sector in Wales is massive – as you could see at the Factory of the Future event," he says. "Events like these bring people together and show that we're not alone here."

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: using Certificates with API calls I've to use certificates in one of my future project, so want to be prepared beforehand regarding the process involved and technicalities.
I've gone through following links and based on that have few questions:
Using certificates
Using certificates with SOAP
Two way SSL
I know there are two kinds of certificates :

Self signed and CA signed

First question regarding Self signed Certificates :
After generating certificate, do We need just provide that to external service provider(whose web service I'm invoking ?)
I was reading somewhere .PEM file needs to be sent to service provider(SP). but downloaded certificate from salesforce is having extention .CRT.

*

*1.Do we need to convert that .CRT to .PEM file before sending ?

*2.How that conversion is done ?

*3.just to confirm, any thing else need to be provide besides that .PEM/.CRT file?

Second question regarding CA signed Cerficates
How actually this works ? After using 'CreateCA signed Certificate' button, I saw we can download 'Certificate Signing Request' from salesforce(another button is there), which is kind of file with .CSR extention.

*

*How we send this file to CA for signing (Via email or somewhere i've to upload it ? etc )

*Would this be some kind of buying/selling, where they would be charging in lieu of signing that certificate ?

*

*will extension of signed certificates be .PEM file ?

*I noticed, I get 'upload Signed Certificates' button For CA certificates. Why I need to upload in SFDC , why I can't directly send to this to service provider(SP)?

*Anything else need to be provided besides this? I was reading somewhere, we need to 'also' provide PUBLIC key to SP ? but not sure how I can get this of if this is needed at all.

Any help on all these points will be really appreciated.
thanks !!

redpajama_set_name: RedPajamaStackExchange