d((a,b),(c,d)) = max{ d_X(a,c), d_Y(b,d) }
makes X x Y into a metric space which satisfies the universal property for products in this category.
To show that the category does not have infinite products, consider the spaces X_n = ({0,1}; d_n) where d_n(0,1) = n. If P were a product of these spaces, then applying the universal property of products to morphisms from the 1-point space m: {*} --> X_n : * |--> 1 leads to a morphism from {*} to P that "selects" a point of P whose projection to each X_n is the element 1. This means that P has an element whose "coordinates" are all 1. Similarly, P has an element whose coordinates are all 0. But the distance between these two elements must be at least n for the n-th projection to be a morphism. This is impossible, because it means P has a pair of elements whose distance apart is greater than n for all n.
Here is Allen Mann's argument that there do not exist free compact spaces over any infinite set. Suppose that X is an infinite set and that F(X) is a compact space that is free over X. Let Y be the 2-element space with the indiscrete topology, and let f:X-->Y be an arbitrary function. The universal property of F(X) implies that there is a unique continuous extension of f to F(X). But every function from F(X) to Y is continuous. Since f has a unique extension to F(X) it must be that F(X) = X. Now let Z be the 2-element space with the discrete topology. The universal property of F(X) says that any function f:X-->Z has a continuous extension to F(X) = X. Hence any function from X to Z is continuous. This forces each singleton in X to be open, so we have that F(X) = X with the discrete topology. This is a contradiction, since F(X) is assumed to be compact.
Upper bound: Suppose that S is a set of size sup{|M_i|} that has an element 0. The size of the direct sum cannot exceed the size of the subset of S^I consisting of all tuples with finite support (i.e., that are 0 almost everywhere), since there is an obvious 1-1 function from the direct sum of the M_i's to the subset of S^I of tuples of finite support. But a typical element of S^I of finite support may be specified by choosing a number n, then choosing an n-element subset of indices from I, then finally choosing a tuple from S^n to assign to those n coordinates. The number of ways that these choices can be made is |N| * |I| * |S| = |I| * |S| (since there are |N| choices for n, |I| choices of a finite subset of I, and |S| = |S^n| choices for the n-tuple).
Since the upper and lower bounds are equal, we are done.
M may be considered an R/I module by defining (r+I)m = rm. One must prove that this scalar multiplication is well defined and makes M into an R/I-module, but the verifications are straightforward consequences of the definition of I.
In fact, there is a simpler way to view this. Saying that M is an R module is equivalent to saying that there is a ring homomorphism h: R --> End_Z(M). That is, h ``explains'' how to view each ring element as an additive endomorphism of M. The set I is simply the kernel of h. (That's the easy proof that I is an ideal.) The first isomorphism theorem says that if h: R --> End_Z(M) is a ring homomorphism, and I = ker(h), then there is an induced ring homomorphism h': R/I --> End_Z(M). But now h' ``explains'' how to view elements of R/I as additive endomorphisms of M, hence h' makes M into an R/I-module.
To see that it is a division ring we have to show that a nonzero element of End_R(S) is invertible (i.e., an isomorphism). If f is in End_R(S), and f:S -->S is not the zero function, then ker(f) is not all of S and im(f) contains more than just {0}. Since ker(f) and im(f) are submodules of S, and S is simple, it follows that ker(f) = {0} and im(f) = S. This shows that f is 1-1 and onto, hence is invertible.