My Résumé

I graduated from Ryerson University in 1981 as an Electronics Technologist and began my career repairing electro-mechanical equipment followed by microcomputers. I later entered IT and designed/implemented and managed network and support infrastructure for two organizations of up to 1000 employees. I continue to provide IT support for a few small companies and implement web sites based on the Drupal and WordPress frameworks.

I also volunteer with Scouts Canada and spend some of my spare time re-learning digital electronics with the use of an Arduino, a Raspberry Pi, and a few FPGA/CPLD/SoC development boards as well as playing with Linux, Drupal, WordPress and so on. . .

IT Infrastructure RésuméDownload IT Web RésuméDownload

 

Continue Reading

On Web based WYSIWYG Editors

Actually, I’m primarily looking at YOU WordPress and TinyMCE!

When creating sites, one of the big draws of using WordPress is that my clients can add/edit content on the site with a built in WYSIWYG editor called TinyMCE. As a result, they don’t need to worry about having to deal with HTML, or worse. The problem for me is that some of the content requires code not available with TinyMCE. What I do is switch from the WYSIWYG mode to the built in text editor and make my changes.What I have found is that TinyMCE strips out some of my code, effectively ruining the changes.

On several forums, users have experienced these problems and the solution was to ‘use one or the other‘ whereby you would edit your user profile and and disable the visual editor. This works well for us techies, except for the fact that:

  1. Some theme companies, such as Woo and Themeforest, provide additional functionality to the Visual editor that you can’t see if you use the Text editor.
  2. Themeforest provides a layout editor that requires the Visual editor to be enabled.
  3. Not many clients will put up with a text editor for adding/editing HTML content.

The closest I could get to the best of both worlds was to:

  1. Download TinyMCE Advanced.
  2. Configure TinyMCE Advanced to stop stripping out paragraph and break tags in the content.
  3. Always ensure I’m in the visual editor WYSIWYG mode before publishing/updating content.

Sometimes, I forget this and will invariably end up fighting with the WordPress editor. After a long bout today, I think I’ll remember this process a bit longer.

Continue Reading

Arduino Resources

References

  • http://vancouverroboticsclub.org

Suppliers

  • http://www.seeedstudio.com
  • http://arduino-direct.com
  • http://www.makershed.com
  • http://www.adafruit.com
  • http://www.sparkfun.com
  • http://www.robotshop.com (Canada)
  • http://www.rpelectronics.com (Vancouver)
  • http://www.mainelectronics.com (Vancouver)

Continue Reading →

Continue Reading

Flight Simulator Modification

The following article was submitted by myself to Compuserve circa 1983. It provided a way to get colour on an RGB screen while running FS1. At the time, MS:FS only supported colours via dithering on an NTSC monitor. As I recall, my program intercepted a disk interrupt and changed the CGA settings each time the disk was called.

I had previously written a program called ‘star3d’ in 8088 assembler which displayed an animated starfield on the CGA, similar to the Windows screensaver starfield. I also ported that over to the Amiga in about 1986.


Flight Simulator RGB Modifications

By: Andrew Tuline

CIS: 70465,1223

The modifications included herein will allow an RGB monitor to show some colours using the Flight Simulator program. This modification is not perfect, nor is is very well tested. The user should make a copy of their Flight Simulator program using their favourite technique. As we know even the most obvious methods may elude us. Anyways, one of the bugs is, when the user enters the slew mode, the modifications are nullified.
Basically, the technique is to intercept the disk vector and setup a port for the colour display adapter for the needed values. I certainly hope, that by disclosing this technique, Microsoft doesn’t skin my hide. Anyways to modify your extra spare disk, boot up debug in DOS 2.0 and type the following:

Note: you need a system with at least 96K to use this modification as is.

L CS:0 0 0 1 (FLIGHT SIMULATOR DISK IN DRIVE A)
A 0
mov ax,201
mov dx,0
mov CL,2
mov ch,27
mov bx,1000
mov es,bx
xor bx,bx
int 13
jmp 1000:0
W CS:0 0 0 1

L CS:0 0 139 1 (FLIGHT SIMULATOR DISK IN DRIVE A)
A 0
push cs
pop ds
mov ax,0
mov es,ax
es:
mov ax,[4c] mov [70],ax
es:
mov ax,[4e] mov [72],ax
mov ax,48
es:
mov [4c],ax
es:
mov [4e],cs

cli
xor ax,ax
mov ds,ax
mov es,ax
mov ss,ax
mov sp,c0b0
mov cx,200
mov SI,7c00
mov DI,500
sti
repz
movsb
jmp 0:7c18

a 48
pushf
push cs
cs:
mov [74],ax
mov ax,5b
push ax
cs:
mov ax,[74] jmp F000:EC59 pushf
push ax
push dx
mov dx,3d8
mov AL,0a
out dx,AL
inc dx
mov AL,20
out dx,AL
pop dx
pop ax
popf
iret
W CS:0 0 139 1

The value 20 a couple of lines up sets up the colours for low intensity cyan/magenta/white. Good luck, and may the colours be with you!

Continue Reading

Infrared Circuit

Before integrating all of the circuits, let’s demonstrate the IR receiver circuit.

Get a Universal Remote and program/test it until you see output from the debugger of the Arduino. It seems to work well with the Universal Remote programmed as a Sony controller.

IR test code:


//
// Universal remote decoder example for Arduino
//
// This simple program reads/decodes the output of a Universal Remote and displays the value.
//
// The IRremote.h library was referenced and downloaded from these locations:
//
// http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html
// http://www.pjrc.com/teensy/td_libs_IRremote.html
//
// I used a universal remote, and programmed it until the software recognized the output.
// It was an Innovage Jumbo Universal Remote and programmed it as Sony 004.
//
// I also used a 3 pin KSM-603LM Optic receiver module where:
//
// pin 1 -> pin 7 of Arduino, pin 2 -> GND, pin 3 Vcc
//

#include

int RECV_PIN = 7; // A nice out of the way pin to connect the receiver to
IRrecv irrecv(RECV_PIN); // Initialize which pin we are receiving on
decode_results results; // Define the variable for storing 'results'

unsigned long oldmillis = 0; // Use my own delay to add a little debouncing

void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) { // If there is a result . .
if (millis() - oldmillis > 300) { // Debounce for 300ms
Serial.println(results.value, HEX); // Print the value
oldmillis = millis(); // Reset the delay timer
}
irrecv.resume(); // Receive the next value
}
}

Continue Reading

Arduino Color Organ

The Color Organ used the MSGEQ7 graphic equalizer chip. Information on using it came from http://nuewire.com/info-archive/msgeq7-by-j-skoba/

I found that rather than blast the output values to the LED’s, it would be better to set ranges of values and light up the LED’s from that range.


int analogPin = 0; // read from multiplexer using analog input 0
int strobePin = 2; // strobe is attached to digital pin 2
int resetPin = 4; // reset is attached to digital pin 4
int spectrumValue[7]; // to hold a2d values

void setup()
{
Serial.begin(9600);
pinMode(analogPin, INPUT);
pinMode(strobePin, OUTPUT);
pinMode(resetPin, OUTPUT);
analogReference(DEFAULT);

digitalWrite(resetPin, LOW);
digitalWrite(strobePin, HIGH);

}

void loop()
{
digitalWrite(resetPin, HIGH);
digitalWrite(resetPin, LOW);

for (int i = 0; i < 7; i++)
{
digitalWrite(strobePin, LOW);
delayMicroseconds(30); // to allow the output to settle
spectrumValue[i] = analogRead(analogPin);

if (spectrumValue[i] < 65) {
analogWrite(pwm[i], 1023);
Serial.print(” “);
Serial.print(“0”);
} else if (spectrumValue[i] < 80) {
analogWrite(pwm[i], 1022);
Serial.print(” “);
Serial.print(“1”);
} else if (spectrumValue[i] < 100) {
analogWrite(pwm[i], 1021);
Serial.print(” “);
Serial.print(“2”);
} else if (spectrumValue[i] < 200) {
analogWrite(pwm[i], 1020);
Serial.print(” “);
Serial.print(“3”);
} else {
analogWrite(pwm[i], 1015);
Serial.print(” “);
Serial.print(“4”);
}

}
digitalWrite(strobePin, HIGH);
Serial.println();
}

Continue Reading