Sourcing parts for the DIY record player

May 12, 2008
 by 

A few months back I started sketching out plans for a do-it-yourself record player. Since then, not much has gone on due to my friend the electronics expert being out of town so I decided to source some parts. I turned to a Chinese company called diyhifisupply.com. China you say? Well, over the past few years China has really become a key player in the DIY world of high fidelity. They are creating high quality components a great prices from the platter you see below to oil filled caps, tubes, and other various parts.

le club hifi turntable platter

This platter was laser cut out of 40mm thick acrylic at a final diameter of 298mm. Its truly is a beautiful piece of work. The markings on the platter are for timing it with a strobe. Below is a photo of the bearing that I ordered along with it. It too is a very nicely machined piece of work with a self-oiling design using rifles to push the oil back up to the bearing. When everything is all connected together it turns very smoothly.

rifled turntable bearing


College bar

May 8, 2008
 by 

Completed bar

Not that kind of college bar. I built this bar in my apartment with the help of some friends my sophomore year in college. It came out pretty well considering I was 19 years old and didnt even have a proper table saw. Literally, we had a table and a saw. Anyway, behind the bar we put in shelving in the middle and enough room for a decent size fridge. On the floor we cracked old tiles and laid out a random mosaic pattern. The bar itself was built out of a 2×4 pine frame with beech veneer covering all sides and doubled up on top for added strength. We finished it up with a coat of stain and a few coats of urethane. It was well worth the effort and got tons of use over the years. Hopefully the new owner the apartment is still enjoying it today.


Maven2, my first impressions

May 6, 2008
 by 

Maven has been a far departure from the usual Ant builds that I have become accustomed to. Now although Ant doesnt deal with dependency management like Maven does I have used Savant in conjunction which worked quite well. The constructs werent complicated, it was getting accustomed to Maven which required me to forget I know everything about Ant; oh yea, and a few days of pounding my head.


After the initial mental exercise I really got to liking it. It allowed me to easily handle multiple-module projects and all their dependencies. It also has great plugin support for anything you can think of, one of my favorite being Jetty (developing locally with Tomcat is for suckers!). I also really like the pom.xml settings as well as profile setting to handle different environments. Anyway, next time I start another project from scratch I will probably take another run with Maven.


BMW M3 head machined and cleaned

April 27, 2008
 by 

BMW M3 cam case cleaned
More photos: BMW M3 head photo set

The M3 head just came back from the machinist about a week ago and it looks wonderful but unfortunately I didnt send off the cam case and other parts to be media blasted along with the head. So this Saturday I spent the day with the parts cleaner at my friends shop A1 Imports Autoworks in San Rafael. It saved me a little bit of money and I had to inventory anyway. I cant wait to put it together!


Photography from Mount Tamalpais

April 22, 2008
 by 

Rrecently I took one of my favorite drives up towards Mt Tamalpais and eventually ended up at Point Reyes where we drove through the farms. Here are some of the photos from the trip, as well as some random ones from my various trips over the years. You can see the rest of these photos on the new flickr site for John Clarke Mills!


A rock climber up on the top



Here is one of the 2002 I really liked. This was a beautiful back road leading down Mt Tamalpais toward Stinson Beach. Fern-covered forests down redwood lined streets for miles and miles. The farm roads in Point Reyes are just as enjoyable.

The BMW 2002 near a stream


PipedInputStream and PipedOutputStream with Java

April 10, 2008
 by 

Today I came across an interesting concurrency problem while deleting objects from the Social Graph (Semantic Web remember?). I have been tasked with mass deletes throughout our system, including exporting the objects in case they ever need to be reassembled again. Since our graph is so large, and we could potentially be deleting 10′s of thousands of triples at a time, the serialized XML would be about 10 times that many lines per triple represented in a file. In order to write the output to a file as fast as can be there was no need to store the serialized XML in memory. The best thing to do was to pipe the output stream to our binary store.


Now in order to do this, I need two threads, one to write and one to read. If you were to do this with one thread you would most likely run into a nasty deadlock situation. Anyway, here’s what I came up with:


public InputStream openStream() throws IOException {
    final PipedOutputStream out = new PipedOutputStream();

    Runnable exporter = new Runnable() {
        public void run() {
            tupleTransformer.asXML( tuples, out );
            IOUtils.closeQuietly( out );
        }
    };

    executor.submit( exporter );

    return new PipedInputStream( out );
}


Can anyone see the problem? Well unfortunately I couldnt either for over an hour. My unit tests would pass sometimes and fail others which led me to believe I was dealing with a timing issue. Turns out, sometimes the PipedOutputStream was completed before the PipedInputStream was even instantiated, completely missing the stream of the out.close(). The trick was to instantiate the two streams, in and out, at the same time then start the output with another thread. Problem solved. Here is what the finished product looks like:


public InputStream openStream() throws IOException {
    final PipedOutputStream out = new PipedOutputStream();
    PipedInputStream in = new PipedInputStream( out );

    Runnable exporter = new Runnable() {
        public void run() {
            tupleTransformer.asXML( tuples, out );
            IOUtils.closeQuietly( out );
        }
    };

    executor.submit( exporter );

    return in;
}

My first vacuum tube amplifier

April 1, 2008
 by 

Cary SLI-80 vacuum tube amplifierFor a long time now I have been interested in vacuum tubes. I love their simplicity, sound, and the fact that the design hasnt changed since the early 1900′s. They also were used as transistors in early computers before the solid state transistor was invented. 50 years ago it would take an entire room of these to power a computer with less memory than a Casio wristwatch.


Anyway, this is a beautifully hand made oil-filled-cap integrated amplifier than runs in 80-watt Class A/B ultra-linear mode and 40-watt triode mode. I have it fitted with a set of Russian Electro-Harmonix tubes, the power coming from two sets of KT88′s. The sound is quite crisp with little to no hum or background noise which is surprising considering tubes are known for these issues. This paired with a set of Kef iQ5 floor standing speakers are wonderfully crisp and clean, especially with vocals. Now, to fix the weak link, the 5 dollar garage-sale bought record player. More to come on the DIY record player later.


Ajax and IE 7: cache not invalidating

March 21, 2008
 by 

For the past day or two I had been struggling at work to figure out why Internet Explore 7 would not pay attention to the response headers stating not to cache the response. First, I tried setting the date header to expire instantly, with a value of -1. QA confirmed that this solved the problem in some revisions of IE 7 but not all. After digging around the web it turns out that you have to set a few more headers, one of which I had never even heard of. Here’s what solved the problem for me. This snippet is in Java but could apply to any language:

response.setDateHeader( "Expires", -1 );
response.setHeader( "Cache-Control", "private" );
response.setHeader( "Last-Modified", new Date().toString() );
response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-store, 
                                 no-cache, must-revalidate" );



IE, ImageIO, and Microsoft’s ‘image/pjpeg’ prank

February 28, 2008
 by 

Today I came across an issue at work regarding the made up MIME type of ‘image/pjpeg’ while uploading images from IE 7. Java’s ImageIO was choking while trying to upload this type of file because it is not in the list of supported MIME types. The supported MIME type list can be viewed by invoking ImageIO.getReaderMIMETypes(). After reading many blogs of others pounding their head, making fun of Microsoft, and using other solutions like ImageMagick, I found a solution. Add this to your list of supported types and move on. This format is made up and will not cause any problems. Pass the input stream onto your File IO and be done with it. Microsoft owes me half an hour of my life back.


Build your own record player

February 12, 2008
 by 

diy turntable diagram
In my quest for a great sounding stereo and my annoying need to build things I have decided to build my own turntable. Luckily my friend Mark, microelectronics expert extraordinaire, will be teaching me the finer points of circuitry. I will be handling the sourcing, fabrication, and/or assembly of the plinth, bearing, and tonearm. This is a very exciting project for me because I have a limited knowledge when it comes to creating my own circuits. This is one of the last nagging things that I have been dying wrap my head around. More to come as the project progresses. As always I will delving further into the details on my wiki.

Next: Sourcing parts for the DIY record player


Copyright © 2005-2011 John Clarke Mills

Wordpress theme is open source and available on github.