We prove the existence of a poly(n,m)-time computable
pseudorandom generator which ``1/poly(n,m)-fools'' DNFs with n variables
and m terms, and has seed length O(\log^2 nm \cdot \log\log nm).
Previously, the best pseudorandom generator for depth-2 circuits had seed
length O(\log^3 nm), and was due to Bazzi (FOCS 2007).
It follows from our proof
that a 1/m^{\tilde O(\log mn)}-biased distribution 1/poly(nm)-fools DNFs
with m terms and n variables. For inverse polynomial distinguishing probability
this is nearly tight because we show that for every m,\delta
there is a 1/m^{\Omega(\log 1/\delta)}-biased
distribution X and a DNF \phi with m terms such that \phi is
not \delta-fooled by X.
For the case of {\em read-once} DNFs, we show that seed length
O(\log mn \cdot \log 1/\delta) suffices, which is an improvement for large \delta.
It also follows from our proof that a 1/m^{O(\log 1/\delta)}-biased distribution
\delta-fools all read-once DNF with m terms. We show that this result too is nearly tight,
by constructing a 1/m^{\tilde \Omega(\log 1/\delta)}-biased distribution
that does not \delta-fool a certain m-term read-once DNF.