Gas station without pumps

2013 December 31

2013 in review

Filed under: Uncategorized — gasstationwithoutpumps @ 11:19
Tags: ,

The WordPress.com stats helper monkeys prepared a 2013 annual report for this blog, as they do each year. Click here to see the complete report.

My total views were up less than 3% from last year—I’ve probably reached a steady state with people giving up on reading my blog at about the same rate that new readers come in. My number of readers may have gone up a bit more more than 3%, as I think that I’ve not been posting as much in 2013: only 289 new posts (but today’s posts were not included, so it is probably 291).

Most popular is still my home page (29,814 views out of 112,064), but that is under 27% of views. Only 4 of my top 10 most-viewed posts this year were written this year:

post year views in 2013
2011 AP Exam Score Distribution 2011 6,996
Installing gnuplot—a nightmare 2012 4,203
How many AP courses are too many? 2012 3,305
West Point Bridge Designer 2011 2011 1,806
Difficulties with the new Common Application 2013 1,775
Why no digital oscilloscope for Macbooks and iPads? 2010 1,759
2013 AP Exam Score Distribution 2013 1,595
Instrumentation amp lab 2012 1,592
MOOC roundup 2013 1,228
Essay prompts for college applications 2013 1,154
Making WAV files from C programs 2011 1,104

None of those are particularly good posts, but they have good links to other information sources, so come up high in search engine algorithms. Some of my most popular posts from this year are obsolete—I should probably add links in them to newer posts, especially the 2011 AP exam score distribution and West Point Bridge Designer posts.  The instrumentation amp lab post is a strange one of the 202 posts on the Applied Circuits course to be the most popular—this is probably Google’s fault.

I should probably thank Google for keeping old posts alive—57,090 views or about 51% of my total came from search engines, and 54,104 or 48% of my views were referrals by Google.  Bing contributed only 1,120, Yahoo only 1,413, and all other search engine referrals were under 100 each.

Social media contributed more than I expected, since I don’t use Twitter or Facebook.  Twitter referrals were 574, Facebook 470.  Email lists probably contributed more, but they are harder to count, as only yahoo mail referrals are counted (564, plus 198 from the groups.yahoo.com/group/hs2coll/ homeschool to college list).  I wonder why WordPress.com doesn’t count gmail referrals—I’m sure that gmail tracks the links. My being part of the Santa Cruz Sentinel Media Lab helped a little (405 referrals).

Commenting on other people’s blogs got me a number of referrals also.  I think that many of my regular readers have come to my blog from some other blog or from e-mail lists, rather than from search-engine referrals, but I have no way of knowing that for sure.  Some of the largest referral counts from blogs are from comments that I’d forgotten about making, and that are niche blogs for which only a few of my posts are relevant. Having another blogger point to my blog in a post is more valuable than just comments,

One piece of  advice I’ve heard for maximizing readership is to focus narrowly on one niche, so that everyone who comes to the blog knows what to expect after seeing one or two posts.  That works for some bloggers, but I have eclectic interests and can’t really limit myself in that way—I don’t want to start dozens of blogs on different topics.  So for the next year, I’ll continue posting whatever I feel like writing about.

I expect that there will be a number of posts about my new freshman design seminar, because new courses always occupy a lot of my mental space.  Home school and college application stuff will probably disappear after this spring, as my son will be graduating from high school in June.  I may revive one of my old hobbies over the summer, in which case I’ll blog about it.  The question is—what old hobby should I bring back, or what new one should I pick up?  Probably it should either involve exercise (which I need more of) or making something (I feel attached to the Maker movement, but I’ve not really made much beyond stuff for the Applied Circuits or freshman design courses in the past year).

 

MIT submission (almost) done

Filed under: Uncategorized — gasstationwithoutpumps @ 00:38
Tags: , , ,

My son finished the MIT application today—I’ll have to send out the transcript, the school profile, and the counselor’s report tomorrow. Recommendation letters and school reports can’t be provided online (except through Naviance, which home schools have no access to), but only via fax or hard copy mail.  I’ll probably have to go to the Post Office tomorrow, as I don’t think we have enough stamps in the house to mail the transcript.

I’m a little surprised that an tech school like MIT would be willing to have such a clunky piece of old technology as the main view that 18,000 prospective students see of MIT each year.  It isn’t as buggy as the Common App, but it has a distinct early 1990s feel to it. The MIT application is obviously an old piece of legacy code (unless it is deliberately retro)—it doesn’t understand unicode characters (like smart quotes or em-dashes), can’t handle italic, and the PDF preview is rendered in the ugliest monospace font that is available (probably Courier).

Update 2013 Dec 31: School documents taken to Post Office this morning, so MIT application now done.

2013 December 29

Range of conductivity measurements

Filed under: Circuits course,freshman design seminar — gasstationwithoutpumps @ 21:02
Tags: , , , ,

I was curious what the range of voltage measurements would be for different salt concentrations, and how linear the measurements would be.  Measurements were made with a modified program, so that I could measure the applied voltage at the drive electrode as well as the voltage at the sense electrode. Conductance was computed as 0.01S * V_resist / (V_applied – V_resist).

solution V applied V resist conductance
distilled  3298.1mV  1.93±0.08mv  5.86µS
tap water  3257.4mV  424.80±0.14mV  1.50mS
0.1M NaCl  3074.0mV  2265.31±0.15mV  28.01mS
1.0M NaCl  3012.4mV  2842.13±0.09mV 166.9mS

The first version of the program seemed to have some problems with fluctuation in the period of the square wave, probably from using the same pin for both digital out and analog in.  I hooked up another pin to monitor the digital output and got a more consistent 65kHz square wave.

Repeating the measurements got me

solution V applied V resist conductance
distilled 3297.71±0.12mV 9.73±0.18mV 29.59µS
tap water 3258.75±0.07mV 415.10±0.25mV 1.46mS
0.1M NaCl 3065.05±0.08mV 2271.82±0.23mV 28.64mS
1.0M NaCl 3000.60±0.24mV 2850.30±0.24mV 189.6mS

The small differences are probably from cross contamination as I moved the electrodes from one bath to another. I wiped them between measurements, but did not get them completely clean and dry.

The 0.1M and 1.0M solutions do not show a ten-fold ratio of conductances, only about 6–6.6 depending which set of measurements one takes. Either I did the dilution to make the 0.1M solution wrong (quite possible—I’m clumsy at even trivial wet-lab stuff) or my assumption that conductance should be linear with concentration is way off.  It looks like the device should be able to measure from about 1E-4M to 3M NaCl.  There is enough resolution in the ADC measurements to go down to 1E-5M (if the electrodes could avoid contaminating that) and up to saturated salt (about 6.2M).  It would be important to have a series of test solutions to calibrate the unit, if the linearity assumption is wrong.

Here is a plot of the ionic concentration vs time for the second set of readings, based on the assumption of linearity and the correctness of the 1MNaCl reading:

Concentration is calculated as V_resist/(V_apply-V_resist) /18.96

Concentration is calculated as V_resist/(V_applied–V_resist) /18.96

Here is the source code for the KL25Z (using the mbed.org compiler).  Pins A0 and A2 were connected to the drive electrode, pin A1 to the sense electrode.
The sense electrode electrode was connected via 200Ω resistors to Gnd and 3.3V.

#include "mbed.h"

Serial USB_io(USBTX, USBRX);  // defaults to 9600 8N1 (reset in main to 115200 baud)
Timer since_start;

AnalogIn Vapply(PTB2);
AnalogIn Vsense(PTB1);
DigitalInOut square_out(PTB0);   // PTB0=arduino A0
//PTB0, PTB1, PTD6, and PTD7 I/O have both high drive and normal drive capability selected by the associated PTx_PCRn[DSE] control bit.

#define WARMUP (20000)    // number of cycles of toggling output before collecting data
#define COLLECT (10000)   // number of cycles of data to sum for each output
#define Vdd (3.3)      // High voltage at output
int main()
{
    USB_io.baud(115200);
    USB_io.printf("\nusec\tV_out\tV_appl\nN\tN\tN\n");

    //DEFAULT configuration of analog input
    ADC0->CFG1 = ADC_CFG1_ADLPC_MASK    // Low-Power Configuration
               | ADC_CFG1_ADIV(3)       // Clock Divide Select: (Input Clock)/8
               | ADC_CFG1_ADLSMP_MASK   // Long Sample Time
               | ADC_CFG1_MODE(3)       // (16)bits Resolution
               | ADC_CFG1_ADICLK(1);    // Input Clock: (Bus Clock)/2

    ADC0->CFG2 = ADC_CFG2_MUXSEL_MASK   // ADxxb channels are selected
               | ADC_CFG2_ADACKEN_MASK  // Asynchronous Clock Output Enable
               | ADC_CFG2_ADHSC_MASK    // High-Speed Configuration
               | ADC_CFG2_ADLSTS(0);    // Long Sample Time Select

    ADC0->SC2 = ADC_SC2_REFSEL(0);      // Default Voltage Reference

    ADC0->SC3 = ADC_SC3_AVGE_MASK       // Hardware Average Enable
                | ADC_SC3_AVGS(0);        // 4 Samples Averaged

    // FAST analog input
//    SIM->SCGC6 |= SIM_SCGC6_ADC0_MASK;   // enable ADC0 clock
//   SIM->SCGC5 |= 1 << (SIM_SCGC5_PORTB_SHIFT);  // enable PORTB clock

    ADC0->SC1[1] = ADC_SC1_ADCH(ADC0_SE9);  // PTB1

    ADC0->CFG1 =
                ADC_CFG1_MODE(3)       // (16)bits Resolution
               | ADC_CFG1_ADLSMP_MASK   // Long Sample Time
               | ADC_CFG1_ADICLK(0);    // Input Clock: (Bus Clock)

    ADC0->CFG2 = ADC_CFG2_MUXSEL_MASK   // ADxxb channels are selected
               | ADC_CFG2_ADACKEN_MASK  // Asynchronous Clock Output Enable
               | ADC_CFG2_ADHSC_MASK    // High-Speed Configuration
               | ADC_CFG2_ADLSTS(0);    // longest "long" Sample Time Select

//             | ADC_CFG2_ADLSTS(3);    // shortest "long" Sample Time Select

    ADC0->SC2 = ADC_SC2_REFSEL(0);      // Default Voltage Reference
    ADC0->SC3 = 0;        // No hardware averaging

    // PTB1 and PTB2 set as analog inputs
//    PORTB->PCR[1] = 0;
//    PORTB->PCR[2] = 0;

    // set PORTB pin 0 to high drive here
    PORTB->PCR[0]  |= PORT_PCR_DSE_MASK;

    since_start.start();
    while(1)
    {    wait_us(100);
         square_out.output();
         int32_t sum_in=0;
         int32_t sum_out=0;
         for (int i=0; i
         {
             square_out=1;
             wait_us(1);
            ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE9);  // PTB1
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             int32_t in_read=ADC0->R[0];

             ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE12);  // PTB2
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             int32_t out_read=ADC0->R[0];

             square_out=0;
             wait_us(1);
             ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE9);  // PTB1
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             sum_in +=  in_read - ADC0->R[0];

             ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE12);  // PTB2
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             sum_out += out_read - ADC0->R[0];
        }
        sum_in=0;
        sum_out=0;
        for (int i=0;i<COLLECT; i++)
        {
             square_out=1;
             wait_us(1);
            ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE9);  // PTB1
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             int32_t in_read=ADC0->R[0];

             ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE12);  // PTB2
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             int32_t out_read=ADC0->R[0];

             square_out=0;
             wait_us(1);
             ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE9);  // PTB1
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             sum_in +=  in_read - ADC0->R[0];

             ADC0->SC1[0] = ADC_SC1_ADCH(ADC0_SE12);  // PTB2
             // Wait Conversion Complete
             while ((ADC0->SC1[0] & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK);
             sum_out += out_read - ADC0->R[0];
        }
        square_out.input(); // hiZ state when not driving pulses

        USB_io.printf("%10d\t%7.5f\t%7.5f\t\n", since_start.read_us(), sum_in*(Vdd/COLLECT/(1<<16)),sum_out*(Vdd/COLLECT/(1<<16))); // scale output to volts
    }
 }

2013 December 28

PhD thesis presented in other forms

Filed under: Uncategorized — gasstationwithoutpumps @ 11:32
Tags: ,

For several years there have been Dance your PhD competitions, where PhD students try to embody their theses in choreographed dances.  Some of these are amusing, some are elegant, many are painful to watch.  I’ve never been the least bit tempted to join in the “fun” though, as dance has never struck me a particularly good way to communicate ideas, and producing a watchable dance video is a tremendous amount of work.

Better than Dance your PhD are the one-sentence thesis summaries at http://lolmythesis.com. Here, hundreds of people have summarized their theses in tweet-size summaries.

I’ve been trying to think up a good summary for the thesis I wrote 30 years ago.  So far, the best I’ve come up with is

Doing VLSI layout the wrong way, by writing programs. Special bonus: an NP-completeness proof entirely in pictures!

I haven’t decided whether to submit that or to wait for better inspiration.

2013 December 27

Third Common App submission

Around 11 p.m. on Dec 27, my son submitted the third of his Common App college applications (Brown), just 70 hours after his second application—and he did take Dec 25th off. The Brown essays were easier than the earlier ones, in part because he could reuse stuff he’d already written, and in part because they asked simple questions with tight word limits.  He did have to write more than many Brown applicants, because he was applying as a prospective computer science major:

Because you have expressed an interest in Chemistry, Computer Science, Geology, Mathematics, or Physics, we would like to know a bit more about you. Respond to the following questions separately, and please remember to include the number corresponding to each question in your uploaded response! (Limit your total response to 500 words.)

1. Many applicants to college are unsure about eventual majors. What factors led you to your interest? What experiences beyond school work have broadened your interest? (Feel free to elaborate on one of your previous responses.)

2. What concept in your anticipated major were you most proud of mastering?

3. Briefly describe the course(s) you have taken relating to your chosen field.

The first question is just a rehash of a question they already asked:

Why are you drawn to the area(s) of study you indicated in our Member Section, earlier in this application? If you are “undecided” or not sure which Brown concentrations match your interests, consider describing more generally the academic topics or modes of thought that engage you currently. (150 word limit)

The duplicate question was a bit tricky for him to answer without repeating himself, especially as his generic Common App essay also talked about his interest in computer science.  The third question could have just been answered “See course descriptions in transcript”, but he expanded that answer to talk about his progress through different programming languages and managed to work in a project that had been too short to include in the transcript.  The second question was the most interesting, but essentially impossible to answer—once you’ve mastered a computer science concept, it seems pretty trivial, not something to be proud of.  He sidestepped that one a bit by listing concepts that he feels he has a firm grasp of that are important to CS, rather than ones he is particularly proud of.  (He did mention his pride at being good enough at Python to teach it when the instructor he is TA for can’t teach the class.)

He now has three days to do three applications (MIT, CMU, Olin), and two more days for one more application (Caltech has a Jan 3rd deadline). Most of Monday, Thursday, and Friday will be taken up with the 3-day workshop with Ailin Conant of Theatre Temóin that WEST is doing on Dec 30, Jan 2, and Jan 3, so he really has only four full days for the four applications. I doubt that he can get all four applications done in time, but I’ll be satisfied if he gets MIT done—any beyond that are lagniappe.

We did notice one more problem with Common App today—if you use their “I” button to italicize anything, it does a terrible job, changing the font size and family, not just putting the text in italics.

Next Page »

%d bloggers like this: