2008/11/11/00.04.35

November 10th, 2008 - No Responses

Lisp function for converting a sequence of bytes (64 bits) to IEEE-754 Double

Brought to you, not just in part, but almost in entirety through documentation from Sun on IEEE-754.

This code is a bit messy, so I’ll probably come back in a few days with a post showing a cleaner version.

; This doesn't recognize -INF or +INF
; It wouldn't be hard to add, I just figure
;    I won't see them in what I'm doing.
(defun seq-to-IEEE-754-double (seq)
  (let* ((int (seq-to-int seq))
         (s (ash int -63))
         (e (ash (logxor
                   (ash (ash int -63) 63)
                   (ash (ash int -52) 52))
                 -52))
         (f (logxor
              (ash (ash int -52) 52)
              int)))
    ;(format t "~&~64,'0b~%~b ~11,'0b ~52,'0b~%" int s e f)
    ;(format t "~&~f ~f ~f ~f~%" s e f (/ f (expt 10 (digits f))))

    (if (and (< 0 e) (< e 2047))
      (* (expt -1 s)
         (expt 2 (- e 1023))
         (+ 1 (/ f (expt 10 (digits f)))))

      (if (and (= e 0) (not (= f 0)))
        (* (expt -1 s)
           (expt 2 -1022)
           (/ f (expt 10 (digits f))))

        (if (and (= e 0) (= f 0))
          (* (expt -1 s)
             0.0)
             ; Yes, something times zero. It's a signed zero.
             ; Don't know if it matters, but it's what the docs said to do.

          'NaN)))))}}}

Original post by richard.lyman and software by Elliott Back

2008/10/27/00.01.12

October 26th, 2008 - No Responses

Advanced undo/redo in an AIR app using AS3

As a short follow-up post to the basic undo/redo functionality from the other day, here’s a really simple approach to adding more advanced kinds of undo/redo.

In the same place you added the ‘addBasicUndoItem’ method from the previous post, you could add this method:

public function addAdvancedUndoItem( o : Object ) : void {
	_redo = [];
	_undo.push( o );
	verifyUndoRedo();
}

Yup. Some simple steps:

  1. The class managing undo/redo admits that it has no clue about more complex undo/redo situations
  2. Hand the definition of complex undo/redo situations over to the relevant class.
  3. Give the relevant class a simple method to throw the undo/redo item on the managing stack.

In other words, if another class ‘ClassA’ has a method named ‘complexAction’, then that class would probably be best suited to defining the undo/redo functionality associated with the ‘complexAction’.

public class ClassA{
...
    public function complexAction() : void {
        ...
        addAdvancedUndoItem({
            undo:function():Object{ /* Some complex functionality */ return this; },
            redo:function():Object{ /* Some complex functionality */ return this; }
        });
        ...
    }
...
}

Again, not too bad.

Original post by richard.lyman and software by Elliott Back

2008/10/25/02.33.30

October 25th, 2008 - No Responses

Adding basic undo/redo to an AIR app using AS3

I was hoping that it wouldn’t take too much code (and that it’d look cool since it is ActionScript), and I was pleasantly surprised:

private var _undo : Array;
private var _redo : Array;
private function verifyUndoRedo() : void {
	mainMenuData..menuitem.(attribute('data')=='undo').@enabled = _undo.length > 0;
	mainMenuData..menuitem.(attribute('data')=='redo').@enabled = _redo.length > 0;
}
public function addBasicUndoItem( s : Object, o : *, n : * ) : void {
	_redo = [];
	_undo.push( {
		undo:function():Object{ for( var p : * in o ){ s[p] = o[p]; }; return this; },
		redo:function():Object{ for( var p : * in n ){ s[p] = n[p]; }; return this; }
	} );
	verifyUndoRedo();
}
private function undo() : void { if( _undo.length > 0 ){ _redo.push( _undo.pop().undo() ); } verifyUndoRedo(); }
private function redo() : void { if( _redo.length > 0 ){ _undo.push( _redo.pop().redo() ); } verifyUndoRedo(); }

‘Course you’ll want to make sure your _undo and _redo Arrays are initialized to [] and that you’re listening to the Ctrl-Z and Ctrl-Y KeyboardEvents…

public function onInvoke( invokeEvent : InvokeEvent ) : void {
	stage.addEventListener( KeyboardEvent.KEY_DOWN, handleKeyDown );
}

private function handleKeyDown( e : KeyboardEvent ) : void {
	if( e.charCode == 122 && e.keyCode == 90 && e.ctrlKey ){
		undo();
	}else if( e.charCode == 121 && e.keyCode == 89 && e.ctrlKey ){
		redo();
	}
}

… and you’ll probably want to setup an easy to manage Menu…

<mx:XML format="e4x" id="mainMenuData" xmlns="" >
	<root>
		<menuitem label="File">
			<menuitem label="Exit" data="exit" />
		</menuitem>
		<menuitem label="Edit">
			<menuitem label="Undo" data="undo" enabled="false" />
			<menuitem label="Redo" data="redo" enabled="false" />
		</menuitem>
	</root>
</mx:XML>
<mx:MenuBar width="100%" dataProvider="{mainMenuData}" labelField="@label" itemClick="handleMenuSelection(event)" showRoot="false" />

… with it’s related handleMenuSelection method…

private function handleMenuSelection( e : MenuEvent ) : void {
	if( e.item.@data == "exit" ){
		NativeApplication.nativeApplication.exit();
	}else if( e.item.@data == "undo" ){
		undo();
	}else if( e.item.@data == "redo" ){
		redo();
	}
}

… like I said, not too bad.

Using it isn’t too taxing either. Assuming that you wanted to undo/redo the x and y position of an item after it had been dragged to a new position…

// Some code before the drag that set's the prevx and prevy var's to the previous x and y...
addBasicUndoItem( this, {x:prevx,y:prevy}, {x:x,y:y} )

Original post by richard.lyman and software by Elliott Back

2008/09/20/21.51.03

September 20th, 2008 - No Responses

Note to self: Home Depot has a mini Radio Shack

I really don’t think that I would have realized that Home Depot has cool little converters, wires, devices, and assorted odds-n-ends related to electronics - but they do. I’ve been looking for a USB card reader for a while and while WalMart and Radio Shack carry products that fit that bill they’re usually expensive. Home Depot had one for $14.

They claim that their device reads 19 different types of cards… I only care about one, but those who tinker always want solutions that have more options than they really need. :-)

Original post by richard.lyman and software by Elliott Back

2008/08/21/18.19.19

August 21st, 2008 - No Responses

Custom VIM functions to navigate buffers by class names

So. I know the title is not the greatest. Sorry. :-)

Here’s what I’m trying to do in GVIM:

  1. Navigate from the current buffer to another buffer (by selecting a word that can be interpreted as the name of the file I want to go to).
  2. Keep a list of where I’ve been.
  3. Navigate back to previous files - in reverse order of when I saw them.
  4. Use simple controls that make sense in navigating forward and backward.

Yeah… that’s why the title was a bit of a stretch.

In the end I used C-LeftMouse (Control + Left click) to navigate forward, and C-RightMouse to navigate backward. I know it’s a bit backward, but it follows navigating forward with the left mouse when you’re in a web page. The code I put in my _vimrc (the underscore comes from using GVIM on msWin) is shown below:

let s:bufNameList = []

function PushFileJump()
	if len(s:bufNameList) == 0
		let prev = bufname("#")
		call add(s:bufNameList, strpart( prev, 0, stridx(prev,".") ) )
	endif
	call add(s:bufNameList, getreg('z') )
endfunction

function PopFileJump()
	if len(s:bufNameList) > 0
		call remove(s:bufNameList,-1)
		call setreg( 'z', get(s:bufNameList,-1) )
	endif
endfunction

map! <C-LeftMouse> <LeftMouse><Esc>b"zye:b<Space><C-r>z.<C-q>	<CR>:call PushFileJump()<CR>
map <C-LeftMouse> <LeftMouse>b"zye:b<Space><C-r>z.<C-q>	<CR>:call PushFileJump()<CR>
map! <C-RightMouse>  <Esc>:call PopFileJump()<CR>:b<Space><C-r>z.<C-q>	<CR>
map <C-RightMouse>  :call PopFileJump()<CR>:b<Space><C-r>z.<C-q>	<CR>

To explain a bit, I used a List, and carried the file I want to go to in the z register. C-LeftMouse copies the word I clicked on into the z register, navigates to that word as a file, and then calls PushFileJump to add the new file into the List.

The only reason why PushFileJump is a bit more complex than that is because I need to add the previous buffers name to the List if it was the file I started navigating at.

C-RightMouse is simpler. It calls PopFileJump, which removes the current buffer name and sets the z register to the last buffer name in the List. The rest of the mapped command for C-RightMouse finishes using the z register to navigate to the previously seen file.

This should allow me to quickly navigate forward and backward - but it throws away anything I back over… so there is still some room for improvement.

Original post by richard.lyman and software by Elliott Back

2008/08/21/11.35.23

August 21st, 2008 - No Responses

GVim on WinXP - switching buffer to first file whose name is under the cursor

The Ctrl-q is used in place of the Ctrl-v, since GVim on Windows has Ctrl-V mapped to the paste action. Use of the command ‘ye’ is essential to get the word under the cursor, in place of the command ‘yw’, since the ‘w’ will append whitespace if it can. Please note that there is an actual <Tab> character in these commands, before the final <CR>. This allows for auto completion of the word under the cursor, in case there is more than one file with a similar name. Of course, the word you’re wanting to use is placed in the Z buffer.

map! <F4> <Esc>b"zye:b<Space><C-r>z.<C-q>	<CR>
map <F4> b"zye:b<Space><C-r>z.<C-q>	<CR>

Original post by richard.lyman and software by Elliott Back

2008/08/18/00.37.56

August 17th, 2008 - No Responses

Avoid swapChildren and swapChildrenAt

Simply googling for the phrase flex RangeError swapChildrenAt returns enough reason to follow this advice. Here’s some pseudo-code that does work for swapping the depth of two children, A and B:

  1. A needs to be at a depth above B

    • If not, then switch references to A and B.
  2. Remember the depths of A and B
  3. Remove A
  4. Remove B
  5. Add A to the level where B was
  6. Add B to the level where A was

As a side note: If you’re removing these children from inside either A or B, you’ll want to keep a reference to the parent in a local variable since you’ll lose it as soon as you remove A and B.

Original post by richard.lyman and software by Elliott Back

2008/06/29/11.27.40

June 29th, 2008 - No Responses

Public vs. Private and being in the box

Recipe for insight:

  1. Small dash of headline news (no need to read all of it)
  2. Stir in heavy doses of new perspective on the cheap ($10)
  3. Simmer over time (a year or so on a back burner)
  4. When serving, instantly bring to a boil using circumstances from normal life and a desire for a fantastic meal

What if treating everything as public in essence made it easier to be out of the box? What if entering the box happened to be a natural defense - what if it’s normal to jump in the box when you combine a private approach with a public situation?

If the above were even occasionally true, life in general could be improved. Recognizing that you are feeling the clash of private and public could help identify potential for being in the box.

Is now the right time to insert a cliché?

Proper planning prevents poor performance!

Original post by richard.lyman and software by Elliott Back

2008/06/26/01.02.53

June 25th, 2008 - No Responses

A Ruby readline-like method for AS3

I’ve missed the readline method from Ruby, so here’s a stab at a readline that returns an array of all the lines you might want from a given file.

These examples of using this method assume some var f in scope that might look like:

var f : File = File.applicationDirectory.resolvePath("temp.txt");

You’d call this method in one of several ways. The simplest would return an array of all the lines in a file.

var lines : Array = readLines( f );

The rest of the examples assume some var r in scope that might look like:

var r : RegExp = new RegExp(/enabled/);

A slightly more complex way would use the filter property to select specific lines out of the file. In this case, lines that returned true for the regex /enabled/.

var lines : Array = readLines( f, r );

You could also flip the filter_accepts parameter to false, and get an array of all the lines that don’t match the regex.

var lines : Array = readLines( f, r, false );

Finally, you could find the first line, after skipping the first two lines, that didn’t match the regex.

var lines : Array = readLines( f, r, false, 1, 2 );

So, after all those wonderfully fun samples, here’s the code:

/**
 * @param … If you supply one extra param it’ll be the number of lines possible.
 *              If you supply two extra params the first’ll be the same and the second’ll be an offset by lines.
 *              Anything past the first two params is ignored.
 */
private function readLines( f : File, line_filter : RegExp = null, filter_accepts : Boolean = true, … params ) : Array {
    var line_offset : Number;
    var lines_possible : Number;
    switch( params.length ){
        case 0:     lines_possible = Number.MAX_VALUE;  line_offset = 0;            break;
        case 1:     lines_possible = params[0];         line_offset = 0;            break;
        default:    lines_possible = params[0];         line_offset = params[1];
    }
    var total_lines_to_be_seen : Number = line_offset + lines_possible;
    var lines : Array = [];
    if( f.size > 0 ){
        var fileStream : FileStream = new FileStream();
        fileStream.open( f, FileMode.READ );
        var char : String;
        var line : String;
        var lines_seen : Number = 0;
        // Read either to the EOF or until we have enough lines
        while( fileStream.bytesAvailable > 0 && lines_seen < total_lines_to_be_seen ){
            line = "";
            char = fileStream.readUTFBytes(1);
            // Keep adding to the line until an EOL
            while( !(char == File.lineEnding) ){
                line += char;
                char = fileStream.readUTFBytes(1);
            }
            // If we’ve hit an EOL and we’re past the offset, then see if it passes the filter.
            if( lines_seen >= line_offset ){
                if( line_filter == null ){
                    lines.push(line);
                }else{
                    if( line_filter.test(line) == filter_accepts ){
                        lines.push(line);
                    }else{
                        lines_seen -= 1;
                    }
                }
            }
            lines_seen += 1;
        }
        fileStream.close();
    }
    return lines;
}

Original post by richard.lyman and software by Elliott Back

2008/06/20/18.49.35

June 20th, 2008 - No Responses

SVN+SSH in Windows XP

This how-to uses the Subversion command-line client, PuTTYGen (you’ll be generating a key and placing that on the server), Plink, and Pageant on Windows XP (32 or 64-bit).

I know that this looks like a lot to do, but it’s quick, and mostly painless.

Getting the Subversion command-line client

  1. Select the ‘Windows Binaries’ link from Subversion’s main website.
  2. Select the ‘Apache2.2′ link.
  3. Select the link who’s description most closely matches ‘Windows installer with the basic win32 binaries’. It should be the first link.
  4. Run the installer.

Getting PuTTY et. al.

  1. Google for putty and go to their main site.
  2. Select the ‘Download’ link from the menu at the top.
  3. Select the link under the title ‘A Windows installer for everything except PuTTYtel’.
  4. Run the installer.

Generating the key

  1. Open PuTTYGen.
  2. Click ‘Generate’.
  3. Move your mouse around in the box to generate randomness.
    • This creates two parts - the public key and the private key.
  4. You might want to give the key a passphrase.
  5. Click ‘Save private key’. The location and name of this key for this tutorial is c:\test.ppk.
  6. Do not close PuTTYGen.

Put the public key on your server

  1. SSH into your server and edit the file ~/.ssh/authorized_keys
  2. Right-click on the generated public key in PuTTYGen and choose ‘Select All’.
  3. Right-click on the generated public key in PuTTYGen and choose ‘Copy’.
  4. Paste the clipboard contents onto the end of the authorized_keys file.
  5. You can close PuTTYGen now and log out of your server.

Setting up svn

  1. You’ll need to find the ‘config’ file. It’s likely in the ‘%appdata%\Subversion’ folder. Just open explorer and enter ‘%appdata%\Subversion’ in the location bar.
  2. Add the line ’ssh = C:/Program Files (x86)/PuTTY/plink.exe -i c:/test.ppk’ under the section [tunnels].

Using svn+ssh

  1. Make sure Pageant is running, and that you have added the generated private key. You will need to provide the passphrase here if you supplied one earlier.
  2. Use the command ’svn co svn+ssh://user@server/repo’ and it should work.

Original post by richard.lyman and software by Elliott Back

2008/06/07/17.39.25

June 7th, 2008 - No Responses

Heredoc-like string in ActionScript 3

Even though ActionScript 3 doesn’t support multiline strings normally, there is a way to get the same result. Simply use the fact that you can declare XML inline, and call the text() method on the new XML instance. Here’s an example:

var s : String =
    <s>
        This is a heredoc
        style string.
    </s>.text();

‘Course it doesn’t matter what the root node’s name is, it doesn’t need to be used.

Also, don’t forget that any text needs to be ‘proper’ XML. You could wrap it in CDATA tags, or use HTML entities. I’d recommend using entities, since you can still take advantage of embedded variables.

Original post by richard.lyman and software by Elliott Back

2008/05/26/23.41.01

May 26th, 2008 - No Responses

Converting dates in SQLite

If you have a date stored as seconds (not milliseconds*) since The Epoch, you can convert it to a more readable date in SQLite through the strftime function.

An example would be, “strftime(”%Y-%m-%d”,date,’unixepoch’)”.

* - Since the Date object in AS3 has the getTime method returning milliseconds since The Epoch, you’d just need to either divide by 1000 before saving it in a SQLite DB, or divide by 1000 inside the call to strftime.

Original post by richard.lyman and software by Elliott Back

2008/04/29/12.54.36

April 29th, 2008 - No Responses

LinkedRecord initial release

I’ve added a trac project, setup anon svn read access, and committed the initial files from an export of the previous repository. The project is released under the GPLv3. Enjoy!

Original post by richard.lyman and software by Elliott Back

2008/04/06/12.03.14

April 6th, 2008 - No Responses

Long time no post

Yeah… Life’s been busy. I have some content in the cooker, so we’ll see what shows up in a bit. For now I’ve had a few minor brain dumps to the tutorials section of the wiki. Enjoy!

Original post by richard.lyman and software by Elliott Back

2008/01/17/15.39.58

January 17th, 2008 - No Responses

I have to get these ideas sketched out here before I forget to expand on them

  • Management as software and the productization of management.
  • Employees as Open Source users of the organization that employs them
  • Levels of software engineering skill involving more than the skill of empathy for a pre-productization targeted class of users.
  • Requiring the software to suit the user vs. allowing the user to suit the software
  • Bad/Good/Perfect software
  • Giving new employees the ’source-code’ to the employers organizational structure and behavior.

Original post by richard.lyman and software by Elliott Back

2007/12/14/00.28.28

December 13th, 2007 - No Responses

Freakanomics

Even before I’d read much of this book I had spoken to two or three others who had read it and their comments were and are interesting. Every conversation about the book contained two parts. The first part was something along the lines of, “Yeah, it’s a really interesting book… interesting how he puts pieces together.” The second part being close to, “Take his conclusions with a large portion of salt. I don’t really agree with everything that he says.”

I think it would be best in life if one’s actions could be both influential and agreeable. If not both, then a close second-best would probably be interesting if not agreeable.

I wonder how much of ‘research’ is interesting and agreeable. I say this because one major component of my ability to agree with some conclusion is my ability to verify it.

The research group I’m a part of takes an occasional meeting to present a paper along our line of interest. I feel a bit of distaste towards a handful of these papers because the research that they conduct is not easily verifiable. The information that they use is not widely available. One paper, for instance, examined a proprietary code-base to draw it’s conclusions. I would have rather had them reach some conclusion that I could verify - that I could agree with.

It’s not too bad to be influential. It’s better to be influential and agreeable.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/12/11/14.52.19

December 11th, 2007 - No Responses

A position on self-control

When we speak of internet safety we often speak of technological solutions. Monitoring software that can be installed, or filtering services that can be paid for would be two common examples. These technological solutions, while important, are not as effective as other solutions.

A solution that has the potential to be more effective than the technological ones is to strengthen the family. A stronger family can provide a support…

Original post by richard.lyman and software by Elliott Back

2007/12/06/15.27.35

December 6th, 2007 - No Responses

The importance of Self-Control

In an attempt to exercise my critical thinking skills, let me share an evaluation of current internet safety stopgaps. Most of our current solutions ignore one of the key problems. While most of the current approaches address some technical or inter-personal concern, few, if any, address the personal concern of self-control. The positive influence that content filtering might have is lessened since it does not enhance the individual skill of self-control.

I am not advocating that we stop or alter our current efforts. I am advocating that we spend more time and energy on one of the key problems. Self-control is the only protection that can be carried with an individual anywhere they go. Self-control is one of a very few protections that are effective across all addictions.

Self-control is the only solution that is not being actively supported.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/11/27/15.04.56

November 27th, 2007 - No Responses

The good PR resulting from being Open

Verizon has started making motions that could be interpreted as attempting to be more Open.
Even if they eventually aren’t fully conformant to the spirit of Open Source, they have, for the meantime, gained a bit of popularity in the community.


The problem is that companies are starting to attempt to earn loyalty, when they have a long history of spending loyalty.


If I were to ask a lender for some form of financial agreement one of the first steps they would take would be to investigate my financial history.
If they found that I had historically been frivolous in budgeting my money, they would extrapolate that into my future actions, and decline to form an agreement.

Loyalty spending companies won’t find it so easy to earn loyalty in the Open Source community. It’s not a new marketing campaign that wins because it was well funded. The Open Source community is a different beast altogether.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/11/13/15.27.25

November 13th, 2007 - No Responses

World-wide collapse

Technology has helped to close divisions around the world, but has it helped to close divisions locally? While the average user is probably influenced by how quickly they can find a product on the internet, they are influenced in a deeper sense by how close they are to their family. The influence of the family can not be understated, since it will continually be put in a position lacking importance.

One of the benefits that can be found in technology is the ability to reach around the world. More can be done today than could have been done 10 years ago because of the world-wide reach that a common individual has through technology. More can be found. More can be asked. More can be used. More can be communicated. The list seems endless.

This list of what can be accomplished through technology might have a near endless quality, but, unlike other situations, quantity does not make up for quality.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/11/10/00.48.16

November 9th, 2007 - No Responses

Earning loyalty instead of spending it

In my weekly browsing of Dr. Windley’s blog I came across an interesting mini-post. This mini-post led to an article on fastcompany.com’s site.


Now, with the browsing history, and appropriate referential credit and background out of the way I’ll get to my thought…


Open Source communities are systems that live or die by earning loyalty from developers. If a project is not able to sufficiently entice enough developers to ‘pay’ enough for the product - it dies. A solitary developer on a small-ish project might be willing and capable of paying enough to support that project. A large team of patch-contributing developers might be enough to pay the required cost for the core developers to continue.

In fact, I would conjecture that no Open Source project is born without having first earned loyalty from at least one developer.

I would also conjecture that no Open Source project dies without having first spent all loyalty from all previously involved developers.

Original post by richard.lyman and software by Elliott Back

2007/11/06/15.18.06

November 6th, 2007 - No Responses

Tech and Law

In a course on intellectual property law I’m attending, I am frequently amazed at how side-tracked we often became when a member of the class concocts some twisted question. A normal variant is of the form, “Let’s say there is a company in Russia that is offering music tracks from a CD for download. If I were to download one of these tracks, would I be violating any intellectual property laws in the US?” The answer - yup. Another interesting question that popped up once in the recurring derailing debates had the general form, “If someone sells me something that violates a patent, but I don’t know that it violates a patent, can the patent holder prosecute me?” The answer - yup (although they usually don’t).

Too many products are being disseminated out to the public at an uncontrollable rate, through barely controllable mediums, from control-fanatic sources. On the one hand, it sure would be nice to be the company who’s product is flooding the market. On the other hand it can be very hard to control your revenue if it’s based on traditional models. Charging the consumer for a ‘copy’ of your product can kill your business if you can’t control the copy-creation process.

I’ve long considered it sound advice that, and recently read an article that agrees with, a business needs to change the way it generates revenue, or it needs to control the copy-creation process.

If you make money per copy, but don’t control the copy-creation process, good luck.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/10/30/15.19.06

October 30th, 2007 - No Responses

When the Haves aren’t Open

My current involvement in a research group has helped me notice a difference between someone who has experience with Open Source communities and someone who has not. I’m hoping to claim that I’ve had experience with Open Source communities. I’m also hoping to state that almost every other person in the research group has not had enough experience with an Open Source community. I hope this because it could offer an easy explanation.

I seem to be the only one who cares about investing in the future of the group - even though everyone has been instructed that investment in the future of the group is encouraged. We have a wiki, mailing list, and forum on the lab server where we have been encouraged to record lab meetings, suggest possible meeting content, and discuss upcoming meeting content, respectively. The inaugural weeks have been dismally low on contribution. In fact, some members of the group have contributed practically nothing.

If Open Source were a religion and an individual could convert, then I’d be wanting to figure out how to convert a select group of individuals. It’s sad that conversion to Open Source isn’t a requirement of undergraduate study.

Enough involvement in an Open Source community can convert an individual to someone who actively helps those who will follow.

Someone who cares more about sharing.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/10/23/15.14.10

October 23rd, 2007 - No Responses

Education in scientific fields guided through non-scientific guesswork

I was having a rather interesting discussion with a friend of mine about the term Computer Science. Near the middle of this discussion he mentioned that, “There is no science in Computer Science.” I happen to agree, if the conversational definition of the term ‘Computer Science’ were closer to the term ‘Software Engineering’. Many conclusions and advances in the field of Software Engineering are not scientifically based. Among the many reasons why they are not scientifically based: they are too hard to reliably repeat, or it’s too hard to get a sample similar enough when you repeat the experiment.

The same should be said of education in scientific fields. There is no science in the education of science, or, there is little science in the education of science. I recognize that there is some science involved, some application of the scientific method to reach conclusions - but not enough. If the scientific method were applied more liberally across the evaluation of education in scientific fields we’d be better able to grasp solutions to problems that currently evade our understanding.

Of the several problems that exist in the process of educating someone in a scientific endeavor, declining interest of women would be a key example. Since the scientific method is so little applied, we are not able to answer fundamental questions on that topic. One of the fundamental questions we can not answer is, how do we encourage more women to graduate with an advanced degree in Computer Science? Another could be, how can we encourage women to be interested in the possible applications of the scientific method?

One suggestion: apply it yourself. Take the scientific method and apply it to solve the problem. It will take time. It will experience growing pains like any other field, but in the end you’ll be better equipped to surmise more than a guess. You might actually be able to solve the problem. Your actions might finally be effective.

Posted in:

cs404

2007/10/17/01.12.56

October 16th, 2007 - No Responses

Ignorantly choosing easy governance

I have had shorter posts in the past where I spilled impressions on the uniqueness of software as a governing force in society. The post on Choice of Governance would be a single relevant sample. To expand that post’s definition of governance, I’ll dare to bring in the often-assumed-infallible Wikipedia, and a snippet from the beginning of it’s page on governance. I happen to agree with it’s statements in this case, so potential fallibility is waived, in my opinion.


Governance makes decisions that define expectations, grant power, or verify performance. It consists either of a separate process or of a specific part of management or leadership processes. Sometimes people set up a government to administer these processes and systems.

In the case of a business or of a non-profit organization, governance develops and manages consistent, cohesive policies, processes and decision-rights for a given area of responsibility. For example, managing at a corporate level might involve evolving policies on privacy, on internal investment, and on the use of data.


It is unfortunate that conversations surrounding governance tend to focus on the more visible forms of government and their use of governance. I say unfortunate, because the most visible governments are not always the most influential. It would make individual choice easier if the more visible governments, such as the state or federal government, were the more influential in society. I believe that individual choice of governance is difficult, not easy. I believe that the more influential governments are found in software related endeavors - and that they are, purposefully, the least visible governance in our lives.

Governance, or the methods by which another exerts control over your life, is easily recognized when it becomes sloppy. The visibility of a well-run governing body is inversely proportional to the frequency, severity, and class of blunders that it effects. How often are you aware of the control that your cell phone service provider has over your life when the calls are all working? Aren’t you more likely to chafe at having handed power to the governance mechanisms of your provider when a call is dropped? How about when a call fails to complete because you are inside some seemingly arbitrary ‘dead-zone’?

The software you choose determines the governance that is active in your life. The web browser you use, the operating system you use, and even the program embedded in a chip inside your vehicle has been authorized to control your life - simply because you chose to use it. To twist a pop culture phrase, “Have you chosen wisely?” Better yet, can you choose wisely?

I believe that the saying, “ignorance is bliss,” has a shade of truth. It is likely that you, even you, my potentially technically-minded and current-event-informed individual, enjoy living your life in ignorance. It is likely that you are not bothered enough when your chosen government drops a call here and there. It is likely that you are not bothered enough when an occasional virus invades the privacy of your life. You are likely not bothered enough with the governing software that you have elected, even when it fails to patch itself properly.

Your happy life of ignorance will lead you to indifferent and uninformed use of software. You should take more care over what governance you have placed in control. Software will affect you. Will that result in a force for lifting your life, or will your ignorant choices find you in a pit of abuse being flogged for having dared to think that you should have a loaf of bread on the meager premise that you were starving?

Have you chosen wisely?

Become informed, and make wise choices.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

2007/10/09/12.43.29

October 9th, 2007 - No Responses

The amusing past

I’ve always found it quite amusing to skim through technologically related writing from the past few decades. It’s obvious that at some point the material was helpful to someone. It’s also obvious that, with advances in society, there are fewer individuals who need the kind of help offered by these writings. Wouldn’t it be nice if there were some way to retire material related to outdated technology? Maybe it would be better if the material were simply brought up-to-date.

<sarcasm>

Wait. I’ve got it. Let’s create some form of storing communication such that a history of the changes can be kept. What I’m trying to say is, maybe documents could have versions… maybe when a document is out-of-date it can be changed to, in a manner of speaking, bring it up to date. That would be fantastic! Maybe after we’d figured out all of the kinks in this version management system we could add functionality to look at previous versions for a more historically oriented perspective…

If only there were such a system.

</sarcasm>

  1. Communication is more effective when it can be realigned with the current intended audience.
  2. You lose an enormous amount of credibility when you communicate your failure to stay current with technology.
  3. You communicate a failure to stay current with technology when you fail to realign your message with the technological level of your audience.

Posted in:

cs404

Original post by richard.lyman and software by Elliott Back

Beryl Screenshots

March 28th, 2007 - No Responses

I’ve uploaded a few screenshots to my linode account:

  1. beam.png
  2. burn.png
  3. corner_overlap.png
  4. cube_at_a_corner.png
  5. overlapping_windows_from_behind.png
  6. overlapping_windows_normal.png
  7. settings_1.png
  8. shortcuts_a.png
  9. shortcuts_b.png
  10. shortcuts_c.png
  11. shortcuts_d.png
  12. shortcuts_e.png
  13. shortcuts_f.png
  14. shortcuts_1.png
  15. true_transparency.png

Tweaking/Fixing Beryl

March 28th, 2007 - No Responses

So there were two ‘problems’ that I wanted to tweak:

  1. I wanted a higher resolution
  2. Going to a higher resolution made the window decorations dissapear

In the end all I needed was to visit the Troubleshooting nVidia page on the Beryl wiki and follow their directions. I think that what happened was that in trying to get the higher resolution, I’d end up downgrading the depth from 24 to 16, which cut out the window decorations. Manually editing the xorg.conf to get back up to 24bit color depth did the trick.

The first few days with Beryl

March 27th, 2007 - No Responses

I installed Ubuntu 7.04 last night and finally had a chance to play around with Beryl, one of the new 3d desktops available in Linux. I was very impressed with all of the eye-candy, and those who know me know that I usually don’t enjoy an over-abundance of eye-candy. I should also mention that within a few minutes of playing around, certainly not long enough to have found all of the goodies, I turned to my wife and declared that Linux was finally better looking than a Mac.

Read the rest of this entry »

An update on my vimrc

February 27th, 2007 - No Responses
 1
 2 " Indent/Dedent selected block
 3 "
 4 "   > indent
 5 "   < dedent
 6 "
 7 vnoremap > >gv
 8 vnoremap < <gv
 9
10 " Block commenting - specific to a file extension
11 " This has a specific way of working (which probably should be fixed)
12 " You must have the source mswin and behave mswin lines from below
13 " It…
14 " 1. Cuts
15 " 2. Types the comment-block beginning characters
16 " 3. Pastes the selected block
17 " 4. Types the comment-block ending characters
18 "
19 "   F2 comment selected block
20 "   F3 uncomment nearest surrounding block - BE CAREFUL OF NESTING - IT _WILL_ MESS UP!!
21 "
22 au BufRead *.mxml vmap <F2> <C-X><Esc>i<F2>
23 au BufRead *.mxml map! <F2> <!–<C-V>–>
24 au BufRead *.mxml map <F3> <Esc>?<!–<Enter>4x<Esc>/–><Enter>3x:nohls<Enter>a
25 au BufRead *.mxml map! <F3> <Esc>?<!–<Enter>4x<Esc>/–><Enter>3x:nohls<Enter>a
26 au BufRead *.java,*.cpp,*.as,*.asc vmap <F2> <C-X><Esc>i<F2>
27 au BufRead *.java,*.cpp,*.as,*.asc map! <F2> /*<C-V>*/
28 au BufRead *.java,*.cpp,*.as,*.asc map <F3> <Esc>?\/\*<Enter>2x<Esc>/\*\//<Enter>2x:nohls<Enter>a
29 au BufRead *.java,*.cpp,*.as,*.asc map! <F3> <Esc>?\/\*<Enter>2x<Esc>/\*\//<Enter>2x:nohls<Enter>a
30
31 " Folding
32 set foldenable
33 set foldmethod=manual   " The ‘manual’ setting means we have to specify what we want folded… it offers more freedom
34 "
35 "   F4 closes a selection
36 "   F5 closes on brace
37 "   F6 opens any fold
38 "
39 vnoremap <F4> zf
40 map! <F5> <Esc>$zf%<CR>i
41 map <F5> $zf%<CR>i
42 map! <F6> <Esc>kji
43 map <F6> kji
44
45 " Buffer navigation (saves the current buffer before navigating)
46 "
47 "   F7 previous
48 "   F8 next
49 "
50 map! <F7> <Esc>:update<CR>:bp<CR>i
51 map <F7> :update<CR>:bp<CR>i
52 map! <F8> <Esc>:update<CR>:bn<CR>i
53 map <F8> :update<CR>:bn<CR>i
54
55 " F9 Closes the current buffer
56 map! <F9> <Esc>:bd<CR>i
57 map <F9> :bd<CR>i
58
59 " F10 Turns off search highlighting
60 map! <F10> <Esc>:nohls<CR>i
61 map <F10> :nohls<CR>i
62
63 " Ctrl-E is just a quick link to…
64 map! <C-E> <Esc>:update<CR>:b<Space>
65 map <C-E> <Esc>:update<CR>:b<Space>
66
67 " Ctrl-F is just a quick link to…
68 map! <C-F> <Esc>:promptf<CR>
69 map <C-F> <Esc>:promptf<CR>
70
71 " Ctrl-R is just a quick link to…
72 map! <C-R> <Esc>:promptr<CR>
73 map <C-R> <Esc>:promptr<CR>
74
75 " Miscellaneous options
76 au BufRead *.as,*.asc set filetype=actionscript     " Add the filetypes for Actionscript
77 au BufRead *.mxml set filetype=xml                  " Add the filetype for MXML files (Flex files)
78 set nobackup
79 set nowritebackup
80 set autoindent
81 syntax on
82 set nu!                                             " Toggle showing linenumbers (they’re on after this)
83 set wrap!                                           " Toggle wrapping lines (it’s off after this)
84 set tabstop=4
85 set shiftwidth=4
86 set hls!                                            " Toggle highlighting searched terms (it’s off after this)
87 set wildmenu                                        " A nice arrow-keys navigated menu at the bottom (press the keys <Esc>:e<Space><Tab> to see it)
88 set guifont=Bitstream\ Vera\ Sans\ Mono\ 10
89 set guioptions-=T
90 set guioptions-=m
91 set shortmess+=I
92 hi normal guibg=lightgray
93 color desert
94
95 " The final touch…
96 source $VIMRUNTIME/mswin.vim
97 behave mswin

Setting the svn:ignore over a whole project

January 31st, 2007 - No Responses

I can’t believe that it took me this long to stumble across it…

svn ps svn:ignore "*.swp" -R .

If Sociability were the inverse of Technology, and if Tech were rising…

January 14th, 2007 - No Responses

The dictionary lookup in Gnome’s Deskbar applet states that sociability is “The quality of being sociable”. Sociable is then found to be “Capable of being, or fit to be, united in one body or company; associable.” Kinda like a rotten apple, if someone were unsociable you’d want them out of the group - right? Well, I came across an article where the author vents about the poor treatment that he has both received and seen given by members of IT. It’s four short pages, but it’s an interesting read for several reasons.

Read the rest of this entry »

Getting a nice PDF monthly calendar of tasks from remind

January 6th, 2007 - No Responses

This assumes that your reminders are kept in ~/.reminders. IT runs remind asking for ordered output suitable for the rem2ps command. It then runs the rem2ps command to produce output in landscape mode with a font size of six for the header, event, and day but with a font size of ten for the title, using a zero point outer border and a two pixel inner day padding. The command ps2pdf picks up at this point and reads in the output of rem2ps outputing a pdf.

remind -p4 -g | rem2ps -l -shed 6 -st 10 -olrtb 0 -b 2 | ps2pdf - cal.pdf

Running remind to get the events for a specific date

January 6th, 2007 - No Responses

remind ~/.reminders 3 feb 2007

‘Course all you need to do is pick whatever date you want in place of the third of February, 2007. Just make sure that you provide the day (it’ll assume the first of the month if you don’t) then month then year, and that you give at least the first 3 characters of the month.

There are more complex ways to move to a different date, as shown by the following code. Just change the ‘+1′ to be any offset, in days, from today.

remind ~/.reminders `(echo 'banner %'; echo 'msg [trigger(today()+1)]') | remind -`

As a side note… don’t forget to add the ‘-g’ flag if you’re sorting your reminders by priority, otherwise they’ll just show up in the order they’re encountered in the input.

Installing Lua 5.1.1 from source onto Ubuntu as a package

December 27th, 2006 - No Responses

So I’m poking around in Lua and wanted to try things out on the new 5.1.1 release. The only problem is that Ubuntu 6.10 only has the 5.0 release. Yes, it is a big deal. They added some new things in 5.1 that aren’t in the 5.0 version, from an extended syntax for multi-line comments, to the modulo operator.

Read the rest of this entry »

Searching a project for lines based on a regexp

December 18th, 2006 - No Responses

Here’s a quick little ruby script (called search_directory.rb) for just that purpose:

require “find” if ARGV.size != 2 puts “You must supply two arguments: a directory to search and a string to find.” exit(1) end puts def isCVS(f) return f.include?(”CVS”) end def isAS(f) return !(/[.]as$/.match(f).nil?) end def isMXML(f) return !(/[.]mxml$/.match(f).nil?) end regexp = Regexp.new(ARGV[1]) Find.find( ARGV[0] ) do |f| Find.prune if isCVS(f) if isAS(f) || isMXML(f) bf = File.basename(f) File.open(f).each_line{|l| unless regexp.match(l).nil? printf( “%30.30s %4d - %-100.100s\\n”, bf, $., l.strip ) end } end end puts

Running it is fairly simple:

user@host:~$ ruby search_directory.rb location/to/start/recursive/search “regexp_to_search_for”

The code to run it from Vim:

map! <F9> <ESC>:exec “!ruby c:\\\\path\\\\to\\\\search_directory.rb ” . getcwd() . ” ” . expand(”<cword>”)<CR><CR>i

Quick info with Remind

November 22nd, 2006 - No Responses

I love the linux shell!! I’m learning the program remind, and I was wondering how hard it would be to call some of the functions in remind from a shell. Turns out it’s super easy. Kinda makes sense… linux tools are meant to work together.

Read the rest of this entry »

Happy Feet and Unreal Tournament 2004 Anthology

November 21st, 2006 - No Responses

Sorry - there won’t be any relation made between Unreal and Happy. I’m just taking two seconds to say that you shouldn’t bother with watching the movie Happy Feet - unless you leave in the middle - and if you want to play Unreal2k4 on Linux do not buy the ‘Anthology’ version.

You’ll want to get your hands on the real deal - the 6 CDs that were the original set. I don’t know about the DVD set - but I do know about the box marked ‘Anthology’. It does not have a linux installer - and everything is for Win32. There’s probably _some_ way you could get the ‘Anthology’ version to work, but for the original 6 CDs on Ubuntu you just pop-in the first cd, copy the install script to somewhere and run it. Ubuntu will mount and unmount your CDs and you just keep clicking ‘next’. Don’t forget to get the updates!

Getting your hands on the teTeX docs in Ubuntu

November 18th, 2006 - No Responses

So. You’ve been using LaTeX for a while now and you need to look up the documentation for some obscure package… let’s say for the package ‘listings’. You’re tired of searching the net for reasonable docs and you wish Ubuntu had something you could use. Never fear!! Synaptic is here!! Just open it and search for ‘tetex doc’ (assuming you use the teTeX distribution of TeX).

Read the rest of this entry »

The better life - use BloGTK

November 11th, 2006 - No Responses

So. I know I just posted about Drivel and how I wanted to see if it was any good… well… it isn’t. :-) Using my trusty Synaptic I ran a search for ‘blog’ in the name or description of any software repository in my sources.list and voila!! I came across BloGTK (checkout what the author has to say about the exact pronunciation).

Read the rest of this entry »

Posting through Drivel

November 11th, 2006 - No Responses

Running through the mornings news/info updates I came across an entry on Linux.com about a blogging tool called Drivel

Read the rest of this entry »

My current .vimrc file

October 21st, 2006 - No Responses

Some people I know were asking for my Vim config so I figured the best place to put it would be online.

" Indent/Dedent selected block " " > indent " < dedent " vnoremap > >gv vnoremap < <gv " Block commenting - specific to a file extension " This has a specific way of working (which probably should be fixed) " You must have the source mswin and behave mswin lines from below " It… " 1. Cuts " 2. Types the comment-block beginning characters " 3. Pastes the selected block " 4. Types the comment-block ending characters " " F2 comment selected block " F3 uncomment nearest surrounding block - BE CAREFUL OF NESTING - IT _WILL_ MESS UP!! " au BufRead *.mxml vmap <F2> <C-X><Esc>i<F2> au BufRead *.mxml map! <F2> <!–<C-V>–> au BufRead *.mxml map <F3> <Esc>?<!–<Enter>4x<Esc>/–><Enter>3xa au BufRead *.mxml map! <F3> <Esc>?<!–<Enter>4x<Esc>/–><Enter>3xa au BufRead *.cpp,*.as,*.asc vmap <F2> <C-X><Esc>i<F2> au BufRead *.cpp,*.as,*.asc map! <F2> /*<C-V>*/ au BufRead *.cpp,*.as,*.asc map <F3> <Esc>?\/\*<Enter>2x<Esc>/\*\//<Enter>2xa au BufRead *.cpp,*.as,*.asc map! <F3> <Esc>?\/\*<Enter>2x<Esc>/\*\//<Enter>2xa " Folding set foldenable set foldmethod=manual " The ‘manual’ setting means we have to specify what we want folded… it offers more freedom " " F4 closes a selection " F5 closes on brace " F6 opens any fold " vnoremap <F4> zf map! <F5> <Esc>$zf%<CR>i map <F5> $zf%<CR>i map! <F6> <Esc>kji map <F6> kji " Buffer navigation (saves the current buffer before navigating) " " F7 previous " F8 next " map! <F7> <Esc>:update<CR>:bp<CR>i map <F7> :update<CR>:bp<CR>i map! <F8> <Esc>:update<CR>:bn<CR>i map <F8> :update<CR>:bn<CR>i " F10 Turns off search highlighting map! <F10> <Esc>:nohls<CR>i map <F10> :nohls<CR>i " Miscellaneous options au BufRead *.as,*.asc set filetype=actionscript " Add the filetypes for Actionscript au BufRead *.mxml set filetype=xml " Add the filetype for MXML files (Flex files) set nobackup set nowritebackup set autoindent syntax on set nu! " Toggle showing linenumbers (they’re on after this) set wrap! " Toggle wrapping lines (it’s off after this) set tabstop=4 set shiftwidth=4 set hls! " Toggle highlighting searched terms (it’s off after this) set wildmenu " A nice arrow-keys navigated menu at the bottom (press the keys <Esc>:e<Space><Tab> to see it) set guifont=Bitstream\ Vera\ Sans\ Mono\ 10 set guioptions-=T " Removes the toolbar from the GUI set guioptions-=m " Removes the text menu from the GUI set shortmess+=I " Turns off the ‘welcome’ message hi normal guibg=lightgray color desert " The final touch… source $VIMRUNTIME/mswin.vim behave mswin

A great explanation of Linux vs. GNU/Linux, copyleft, and what Linus originally called Linux

September 3rd, 2006 - No Responses

http://www.technewsworld.com/story/52738.html

I found the explanations very well worded and succinct - which is hard to get if you start an ‘advocate’ talking about Linux et al. (and I know I tend to suffer from the long-windedness syndrome)… and to attempt non-long-windedness… I’ll stop talking. :-)

Running thttpd as a web server

September 2nd, 2006 - No Responses

Since I’m looking into getting Flex and Hessian connected I’ve been needing a webserver for Flex to connect to. While I could go with something like webrick because my Hessian back-end will be written in Ruby, I wanted something that was no-frills, extremely easy on the config file, fast, light, and just got the job done. Enter thttpd. As defined in the man file, the ‘t’ in thttpd stands for ‘tiny/turbo/throttling’. Which is exactly what I want… well… except for the throttling part… maybe that will come in handy later.

Read the rest of this entry »

Getting code into a post without looking like you’re lost

August 26th, 2006 - No Responses

Since this post I’ve had a coworker who tried to walk through these steps and it wasn’t working. We eventually realized that he had to disable a ‘helper’ option that’s defaulted to ‘on’ in WordPress. You need to go to the ‘My Profile’ link in the upper right corner of your WP admin and at the bottom you need to uncheck the ‘use Rich Editor’ option. If you do that then WP will allow you to enter the tags I’ve supplied.

Since I toiled mightily over this, and since others can more than likely benefit, I will disclose the great secret that is: getting code into a post without looking like you’re lost. Yes, I know that was the title… maybe I am a little lost - but that doesn’t mean I can’t help.

Read the rest of this entry »

Verbatim code in a framed figure box using LaTeX

August 26th, 2006 - One Response

LaTeX Tip #4,573: How to get a verbatim chunk of code to show up inside a framed box with a caption and label, all inside a figure that you can reference no matter where it goes. Step #1: Waste hours trying to figure it out on your own. Step #2: Google for what others have done. Step #3: Profit!!

Seriously now. If you’re writing a lot of documentation in LaTeX and you’re a programmer, chances are that you’re going to want to put a chunk of code into your document. The reason you can’t just put it in there and expect LaTeX to know what to do is because all it sees are characters - some valid some not. In addition to the desire to actually keep and use all of the characters you’ve entered as sample code, it is likely that you will want to style the code you’ve inserted so that it stands out as being different from regular text.

Read the rest of this entry »

Getting LaTeX to ‘incorrectly’ position your floats

August 24th, 2006 - No Responses

I was working on some documentation at work today and I came across a problem. I had a ton of code snippets that I was using to demonstrate the good and bad of development in Flex 2 - and LaTeX though it would be best to bump them all to the last two pages. Now normally I don’t have a problem with what LaTeX does when it auto-magically throws everything into place, but this time I didn’t want what it thought it should do.

Read the rest of this entry »

The loss of control

August 21st, 2006 - No Responses

So. This is an official rant:

Why does the browser take the Shift, Backspace, and Alt-<Arrow> keys away from me? Why does the Flash player take the right-click away from me? Tab and Alt-Tab and Alt-Shift-Tab are taken. The Hyper key (that’s the Windows key) is usually bound to something.

Give me back my control!!

I’m developing an application in Flex, and I’m quickly running out of keys - actually, I’m realizing that I never had any keys to start with! You can’t even use the Shift-Wheel combination since the browser takes that as well!!

Sigh… maybe that’s why more applications are using toolbars and buttons and drop-down menus instead of key combinations. If I am using an application and can find the key combination to do what I want, I’m more likely to use that instead of moving my mouse. Well… it’s time to innovate I guess, and I have some pretty cool ideas…

Javascript vs. ActionScript

August 15th, 2006 - No Responses

Let the games begin! The two columns you’ll probably get the most from are the 3rd vs. the 4th where the performance of Javascript in IE6 is compared to the performance of AS3 code running on the newest Flash VM

http://oddhammer.com/actionscriptperformance/set4/

Yeah… ActionScript kicks!!

Digraphs of Flex code

August 15th, 2006 - No Responses

So. I was involved in a code review of one of the larger Flex 2 projects where I work, and I realized that I didn’t have any good way to visualize how everything connected. So naturally I started looking into tools I could use. I tend to gravitate to open|free projects, so I found Graphviz and the related program, Dot. While the output is not that great sometimes, it’s still a very nice way of quickly getting your head wrapped around how the parts of whatever you’re dealing with interact. One of the uses of Graphviz is to create digraphs showing inheritance, so I took that concept and ran with it in Ruby.

Read the rest of this entry »

Remind and Wyrd

August 15th, 2006 - No Responses

So, another semester at college is starting in a few weeks and that means… let’s try to find an application that helps me organize my schedule!! I really don’t remember how I first found Remind. Wyrd came along after finding the 43Folders page on applications that work with Remind. Remind (but not Wyrd), in classic *nix fashion, plays really nicely with other applications.

Read the rest of this entry »