Voder-Vocoder

The Log of Hal Canary

Navigation: Home | THE LOG | Log Archives | Resume | Contact Info | Public Key | SSL | Math Applets | Site Map | WP Backend | RSS2 | Atom

Redesign of the Mexican flag

Here's my candidate for a redesign of the Mexican flag.

Old:

New:

Hal Canary | Art | 2010-08-28 15:40:53 UTC
Permanent Link | Comments Off

published

Hal Canary | Life, Mathematics | 2010-08-12 09:42:12 UTC
Permanent Link | Comments Off

gravatar

<!-- Easy Gravatar implementation for
     Wordpress comment page: -->
<?php
$gravlink = "http://www.gravatar.com/avatar/";
$gravlink .= md5(strtolower(trim(get_comment_author_email())));
$gravlink .= "?d=".urlencode("http://halcanary.org/images/q80.png");
echo $gravlink; ?>

Hal Canary | Computers & Code | 2010-07-17 09:25:23 UTC
Permanent Link | Comments Off

gnuplot question

Here's your basic LaTeX document:

%% FILE: basic.tex
\documentclass[letterpaper,12pt]{article}
\begin{document}
\input{graph}
\end{document}

The file graph.tex is generated using Gnuplot like this:

#!/usr/bin/gnuplot
## FILE: graph.gnuplot
set xrange [-3:3]
set yrange [0:.42]
set ytics nomirror autofreq 0, .1
set terminal latex size 3,1.5
set output 'graph.tex'
f(x) = .39894228040143267794 * exp(-0.5 * (x ** 2))
set style line 1 linecolor rgb "black" linewidth 1
plot f(x) ls 1 notitle

Here's the execution:

$ gnuplot graph.gnuplot
$ pdflatex basic.tex > /dev/null
$ evince basic.pdf &

This makes a really professional-looking graph I can put in a document.

[]

Now here's what I want to see:

[]

How do I do this with Gnuplot?

Hal Canary | Computers & Code | 2010-07-16 22:10:14 UTC
Permanent Link | 2 Comments

filling an ebook reader

This week, I finally broke down and bought an ebook reader — B&N's $150 WiFi Nook (ISBN 9781400532629). It's a beautiful little device.

I got the Jonathan Adler Punctuation Cover (978161560062) since it's both very sturdy and cheaper than most.

I've already side-loaded 90 free books onto the device. These books have come from several places. In no particular order:

  • The Lee County Public Library lets you borrow ebooks via Adobe Digital Editions (ADE) software. You can use ADE to side-load ebooks onto a nook.
  • Project Gutenberg — the first place to go for books from the public domain. All of their books are now availible in ePub versions.
  • Google Books, Some of the scans availible are in the public domain, and are therefore downloadable. Generally, the Gutenberug editions are a higher quality than the Google versions, since The Gutenberg tries to be an ideal textual copy of the book while Google tries to be a good representation a particular physical book.
  • Many of the works of Cory Doctorow are availible as ePubs on his website, Craphound. I especially recommend Makers and Little Brother.
  • The Baen Free Library — All copyrighted works which you may read for free, and all are availible as ePubs.
  • The Baen CD Mirror — These files are also copyrighted but free to redistribute. The newer CDs have ePub files on them. The older CDs do not, but you can use a program like Calibre to covert file formats.

Places to buy eBooks:

Hal Canary | Books, Computers & Code | 2010-06-27 14:39:03 UTC
Permanent Link | Comments Off

girdle

Six days ago I woke up with a horrible back pain. I must have strained it at work, and I think those magazine recycling boxes are to blame. After taking it easy over the weekend I felt much better, but work exacerbates the pain.

After I let my boss know that my back was still hurting me, she pointed out that we had some lumbar support belts hidden away in the office. So I started using one and found that it helped me put less strain on the injured part of my back. But I look like a dork.

Hal Canary | Life | 2010-06-10 07:04:12 UTC
Permanent Link | Comments Off

simple mergesort

Even though I've studied this algorithm a couple of times, I've never had to implement it before. So I assigned it to myself.

/** should have a time-complecity of O(N×log(N))
    and a space-compelcity of O(N) **/
void mergesort(int N, int array[]) {
  int k; // k is the block size.
  int x; //x is which block we are at.
  int i,j; //indices in old[]
  int p; // index in new[]
  int ilimit,jlimit; //end of blocks.
  int *hold = malloc(sizeof(hold) * N);
  if (hold == NULL) {
    fprintf(stderr,"malloc failed\n");
    exit(2);
  }
  int *new = hold;
  int *old = array;
  int *tmp;
  for (k = 1; k < N; k *= 2) {
    p = 0;
    for (x = 0; x < N; x += (2*k)) {
      i = x;
      ilimit = i + k;
      j = ilimit;
      if (ilimit >= N) {
	while (i < N)
	  new[p++] = old[i++];
 	break; //out of for-loop
      }
      jlimit = j + k;
      if (jlimit >= N)
	jlimit = N;
      while (1) {
	if (old[i] < old[j]) {
	  new[p++] = old[i++];
	  if (i == ilimit) {
	    while (j < jlimit)
	      new[p++] = old[j++];
	    break; //out of while-loop
	  }
	} else {
	  new[p++] = old[j++];
	  if (j == jlimit) {
	    while (i < ilimit)
	      new[p++] = old[i++];
	    break; //out of while-loop
	  }
	}
      } // End while loop.
    } // End inner for loop.
    tmp = old; old = new; new = tmp;
  }// End outer for loop.
  if (old != array)
    for (i = 0; i < N; i++)
      array[i] = old[i];
  free(hold);
  return;
}

Next step is to translate to Java and use .compareTo() with arrays of references:

  public static void mergeSort(Comparable array[]) {
    int N = array.length;
    int k; // k is the block size.
    int x; // x is which block we are at.
    int i,j; //indices in old[]
    int p; // index in new[]
    int ilimit,jlimit; // end of blocks.
    Comparable hold [] = new Comparable [N];
    Comparable neww [] = hold;
    Comparable old [] = array;
    Comparable tmp [];
    for (k = 1; k < N; k *= 2) {
      p = 0;
      for (x = 0; x < N; x += (2*k)) {
        i = x;
        ilimit = i + k;
        j = ilimit;
        if (ilimit >= N) {
          while (i < N)
            neww[p++] = old[i++];
          break; //out of for-loop
        }
        jlimit = j + k;
        if (jlimit >= N)
          jlimit = N;
        while (true) {
          if (old[i].compareTo(old[j]) < 0) {
            neww[p++] = old[i++];
            if (i == ilimit) {
              while (j < jlimit)
                neww[p++] = old[j++];
              break; //out of while-loop
            }
          } else {
            neww[p++] = old[j++];
            if (j == jlimit) {
              while (i < ilimit)
                neww[p++] = old[i++];
              break; //out of while-loop
            }
          }
        } // End while loop.
      } // End inner for loop.
      tmp = old; old = neww; neww = tmp;
    }// End outer for loop.
    if (old != array)
      for (i = 0; i < N; i++)
        array[i] = old[i];
  }

Hal Canary | Computer Science, Computers & Code | 2010-05-08 07:55:23 UTC
Permanent Link | Comments Off

exam, projects

I've got an exam in a few hours, then I'm out of school for a while. The next major project is GRE studying. I've also got a stack of books to read for fun. And Ubuntu 10.04 LTS (Lucid Lynx) comes out tomorrow, so I'll be reinstalling for the first time since I built this computer.

Hal Canary | Life | 2010-04-28 08:22:43 UTC
Permanent Link | Comments Off

the 16 binary boolean operators

Given: the set of binary operators contain all unary and nullary operators as a subset.

There are 2^(2×2)=16 possible binary boolean operators. In order, they are: FALSE, x AND y, x AND NOT y, x, y AND NOT x, y, x XOR y, x OR y, x NOR y, x EQV y, NOT y, x OR NOT y, NOT x, y OR NOT x, x NAND y, and TRUE.

Hal Canary | Mathematics | 2010-04-20 19:13:29 UTC
Permanent Link | Comments Off

Digging through old photos at the folks' house today.

[Thumb]

Hal Canary | Photos | 2010-04-03 21:16:39 UTC
Permanent Link | 1 Comment

bourne shell absolute path

#!/bin/sh
abspath () {
    D7636=`/usr/bin/dirname "$1"`;
    D7636=`(cd "$D7636"; pwd -P)`;
    B7636=`/usr/bin/basename "$1"`;
    echo "${D7636}/${B7636}";
}
PATH=$1
echo "path = \"${PATH}\""
ABSPATH=`abspath "$PATH"`
echo "absolute path = \"${ABSPATH}\""

UPDATE: I just realised that readlink -f "$FILE" will do the trick.

Hal Canary | Computers & Code | 2010-03-31 10:20:12 UTC
Permanent Link | Comments Off

life

I should blog something interesting about my life, but I am busy living. I'm working on a school assignment having to do with applying algorithms to graph theory. The grad-level graph theory class I failed comes in handy there. I'm going to go hang out with friends in a few minutes. Work is still there; the days are just as long as ever, and the constant barrage of paper-cuts is bothering me today.

Hal Canary | Life | 2010-03-26 19:21:24 UTC
Permanent Link | Comments Off

« Previous Entries |

Copyright 1997-2007 by Hal Canary.
mailto: h3 at halcanary dot org
xmpp:halcanary@jabber.org
aim:halwcanary
http://halcanary.org