WP Opt-in

To be added to my email list please enter your email here, then in a couple minutes check your email for further instructions -

E-mail:

Share Mouse with Mac and PC Screens and Keyboard

I bought a new Mac Mini so I could use it for testing and developing my “i” apps instead of using my laptop all the time. I’m also old school and hate (yes, hate) the Mac keyboard and want to use one keyboard for everything. I did a bunch of digging and trial and error and ended up with what I think is now a really workable situation.

Here’s my setup now – I’ve now put the Mac screen on the left, then the vertically oriented screen I use for editing, then the main PC screen, then my email or extra screen:

My screen setup.4 [4 screens - really ?]

At first I used the Mac keyboard and separate mouse – got annoyed with that pretty quick and went searching. Found a few solutions – did the vnc thing. It worked but not as well as I wanted – the updating of the screen and such did site real well. I kept looking. Tried Synergy – that worked but was not reliable on my system. Synergy would have been a workable solution but then I found Share-mouse.com with the product sharemouse.  This one is not free and they do what I also hate – you can’t see the price until you get to the actual purchase page. What the ^*^&&*(? I don’t get the thinking behind that – do they really think that I’ll get to the inner page, 4 or 5 clicks in and go – “Well, I already went through 4 pages I’ll buy it anyway now that I’m here even though it’s more than I want to spend ?” really? B.S. Put the freaking price up front.

Anyway, it’s $24.95 per copy so you need two copies – one for the Mac, one for the PC. But  - it WORKS. I use one keyboard and mouse. When I want to go to the Mac I just move the mouse over the screen and it and the keyboard are there. I was also able to switch the command and ctrl keys around to make it more what I was used to using on both PC and Mac. Well worth the money.

 

The Arduino-Zak Jenn-air oven controller

I did built one version of the controller using Delphi and the LabJack. And cooked a few meals with it. But, as I said in my last post Barbara didn’t appreciate the cord having to be hooked up each time you wanted to use the oven. She had some idea that you should be able to walk up to it, hit a button or turn a knob and it should cook.

So the Arduino version 1 was made. I had some solid state controllers from way back when. They were 25 amp on the output, 3-5vdc on the input. Perfect. Using the Arduino system I made a program that would bring the oven to 325 in convection bake mode. It worked pretty good. The temp on fast a thermocouple moves up and down about 10-15 degrees but the oven thermometers read steadily.

I then expanded the circuit and added a resistor ladder switch network with 5 switches. Took a florescent readout I had and hooked that up. Here are it’s features in this version:
If the oven is off, after a few minutes shut the display off so we don’t get screen burn in. Any time a switch is pressed in this mode the screen turns on to the main menu.
The main menu has one switch for turning it on. And a couple to turn the oven light on and off in case we want to use it as a night light. I’m not sure why we would, but I the switches and the light and why not.

Once the oven is turned on it goes to the last temp that it was set for. I will probably change this to go to no temp yet unless you tell it too in case it was on a real high temp the last time, you may not want that the next time.

I’m not home right now so i don’t have the code handy to publish but I’ll describe the circuit then publish it when I can get online and get it.

The circuit is wired so the original oven probe is to a divider network and the output hooked to one of the analog inputs on the Arduino. Another divider and analog input is wired to the meat probe. The digital outputs are wired to:
1 – Case Fan
2 – Convection fan low (bake mode)
3 – Convention fan high (roast mode)
4 – Broiler element
5 – Bake (lower) element
6 – Oven Light

Things I didn’t hook up yet but will:
A – Door Lock (for cleaning)
B – Door lock feedback
C – Door open/closed switch

After I got a preliminary program going I would set the target reading I wanted from the oven temp and have it cycle the element off and on as needed. I found building in a bit a hysteresis helped. What’s nice is the solid state controllers switch on and off at zero crossing so there’s not a ton of electrical noise generated.

I went through a bunch of steps and ended up with an array of temps vs probe readings. So know you can use the up down switches to set the temp you want and it goes to that temp and stays there. I also added in a feature that if the temp wanted was x above the current temp it turns on both the top and bottom elements. This gets it up to temp very quickly but I do need to check what the broiling affect will be on various things that I’m cooking. For example it may brown the top of cake – not exactly what you want.

I have one of the buttons as a “Quick On” button – you press that and it presets the temp to 325′ convection bake. That is used probably 80% of the time. The other button brings up a Mode menu. From there you can pick bake, broil, conv bake or conv roast.

Next steps are to make a front panel and mount the switches and readout. That way amazingly enough you’ll be able to walk up, touch a button and have an oven that will cook something. What a novel idea!
And of course I have to add a self cleaning cycle. I did write one but it’s not integrated into the regular program yet.

One button makes the temp go up a step, one goes down a step.

#include #include

const int numRows = 2;
const int numCols = 16;
LiquidCrystal lcd(3, 2, 7, 6, 5, 4);

const int switchPin = A1; // select the input pin for the switch ladder
const int bakeHeaterPin = 8; // bakeing element
const int broilHeaterPin = 9; // broil element
const int caseFanPin = 10; // oven box fan
const int caseFanOnTemp = 622; // temp box fan comes on
const int convLowFanOnPin = 11; // convection low speed fan pin low
const int convHighFanOnPin = 12; // convection high speed fan pin low
const int ovenLight = 13; // oven light
const int ovenSpeaker = 1;
const int inTempPin = A0;
const int probeTempPin = A2;
const int tempDiff = 0;
// switches
const int moveUp = 1;
const int moveDown = 2;
const int quickSet = 3;
const int mode = 4;
const int onOff = 5;
const int debug = 0; // debug 1= on

// states
const int on = 1;
const int up = 1;
const int off = 0;
const int down = 0;
const int switchModeTemp = 1; // change temp
const int switchModeMode = 2; // change conv, bake, clean …

int switchValue = 0;
int targetTemp = 100;
int quickTempIndex = 20;
int offOrOn = 0; // offOrOn
int inTemp = 0;
int probeTemp = 0;
int isConv = 1; // convection usually
int isBroil = 0; // is it Broil ?
int isClean = 0; // is it Clean ?
int switchMode = switchModeTemp; //
enum state { CONVBAKE, CONVROAST, BAKE, BROIL };
int whatState;
const char* stateNames[] = {“CNVBAK”, “CNVRST”, “BAK “, “BRL “};
unsigned long modeTime;
const int modeWaitTime = 3000; // if no mode touch in 3 secs, go to temp
int wasASwitch = 1;
const unsigned long displayTimeToBeOn = 15000; // if not switch in this time, go to display wait mode
unsigned long timeIsNow = 0;
unsigned long displayTurnedOn = millis();

int maxTemps = 31;
// 0 1, 2, 3, 4, 5, 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
int reading[31] = {100,550,568,572,577,582,587,592,597,602,607,612,617,622,627,632,602,612,617,627,632,637,642,647,652,662,667,672,677,682,707};
int temps[31] = { 40,100,145,155,160,155,160,165,170,175,180,185,190,195,200,205,210,270,275,320,325,350,360,375,400,430,460,475,500,525,550};
int realTemp = 0;
int actualTemp = 0;
int tempIndex = 0;

int myTime = 2;
int myTimeMax = 8;
int myTimeDirection = 0; // 0 is going up, 1 is going down
int myTimeOn = 1;

void clearScreen() {
lcd.setCursor(0,0);
lcd.print(” “);
lcd.setCursor(0,1);
lcd.print(” “);
}

int showOffScreen() {
clearScreen();
lcd.setCursor(0,0);
lcd.print(“To turn oven on”);
lcd.setCursor(0,1);
lcd.print(“press RIGHT button”);
}

void beep(int howmany) {
while (howmany) {
digitalWrite(ovenSpeaker, HIGH);
delay(200);
digitalWrite(ovenSpeaker, LOW);
delay(200);
howmany = howmany – 1;
}
}

void showOnScreen() {
lcd.begin(numCols,numRows);
lcd.setCursor(15,0);
lcd.print(“Oven”);
lcd.setCursor(16,1);
lcd.print(“ON”);

lcd.setCursor(2,0);
lcd.print(“Light”);
lcd.setCursor(0,1);
lcd.print(“ON”);
lcd.setCursor(5,1);
lcd.print(“OFF”);
beep(3);
}

void shouldDisplayBeOn() {
if ((offOrOn == on) or (wasASwitch == 1)) {
displayTurnedOn = millis();
lcd.display();
} else {
timeIsNow = millis();
if (timeIsNow – displayTurnedOn > displayTimeToBeOn ){
lcd.noDisplay();
} else {
lcd.display();
}
}
}

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ovenSpeaker, OUTPUT);
digitalWrite(ovenSpeaker, LOW);
pinMode(bakeHeaterPin, OUTPUT);
digitalWrite(bakeHeaterPin, LOW);
pinMode(broilHeaterPin, OUTPUT);
digitalWrite(broilHeaterPin, LOW);
pinMode(caseFanPin, OUTPUT);
digitalWrite(caseFanPin, LOW);
pinMode(convLowFanOnPin, OUTPUT);
digitalWrite(convLowFanOnPin, LOW);
pinMode(convHighFanOnPin, OUTPUT);
digitalWrite(convHighFanOnPin, LOW);
pinMode(ovenLight, OUTPUT);
digitalWrite(ovenLight, LOW);

lcd.begin(numCols,numRows);
showOffScreen();
}

int whichSwitch() {
switchValue = analogRead(switchPin);
if (switchValue < 20) { wasASwitch = 1; return moveUp; } else if ( (switchValue>505) && ( switchValue640) && ( switchValue670) && ( switchValue690) && ( switchValue BROIL) {
whatState = CONVBAKE;
}
} else{
whatState–;
if (whatState < CONVBAKE) {
whatState = BROIL;
}
}
}

void checkCaseFan() {
if (inTemp < (caseFanOnTemp-6)) { digitalWrite(caseFanPin, LOW); } if (inTemp > (caseFanOnTemp)){
digitalWrite(caseFanPin, HIGH);
}
}

void loop() {
switchValue = analogRead(switchPin);
switchValue = whichSwitch();
// lcd.setCursor(5,1);
// lcd.print(switchValue);

if (switchValue == mode) {
modeTime = millis();
if (switchMode == switchModeTemp) {
switchMode = switchModeMode;
} else {
switchMode = switchModeTemp;
}
}

if (switchValue == onOff) { // is it the on off switch ?
lcd.setCursor(1,1);
if (offOrOn == on) { // if oven is on, turn the oven off
// lcd.display();
offOrOn = off;
lcd.print(“OFF”);
digitalWrite(bakeHeaterPin, LOW);
digitalWrite(broilHeaterPin, LOW);
digitalWrite(convHighFanOnPin, LOW);
digitalWrite(convLowFanOnPin, LOW);
digitalWrite(ovenLight, LOW); // light is off if oven is off
whatState = CONVBAKE;
showOffScreen();
} else {
offOrOn = on;
digitalWrite(ovenLight, HIGH); // light is on while oven is on
clearScreen();
lcd.print(“ON”);
}
delay(100);
}

if (offOrOn == off) { // if oven is off
if (switchValue == moveUp) {
digitalWrite(ovenLight, HIGH);
}
if (switchValue == moveDown) {
digitalWrite(ovenLight, LOW);
}
inTemp = analogRead(inTempPin);
shouldDisplayBeOn();
}

if (offOrOn == on) { // if oven is on
shouldDisplayBeOn();
lcd.setCursor(0,0);
lcd.print(“Temp: “);
lcd.setCursor(5,0);
lcd.print(realTemp);
#if 1
if (switchValue == moveUp) {
if (switchMode == switchModeTemp) {
if (tempIndex < (maxTemps-1)) { tempIndex = tempIndex + 1; } } if (switchMode == switchModeMode) { changeMode(1); } if (modeTime != 0) { modeTime = millis(); } } if (switchValue == moveDown) { if (switchMode == switchModeTemp) { if (tempIndex > 0) {
tempIndex = tempIndex -1;
}
}
if (switchMode == switchModeMode) {
changeMode(0);
}
if (modeTime != 0) {
modeTime = millis();
}
}
if (switchValue == quickSet) {
tempIndex = quickTempIndex;
delay(500);
}

targetTemp = reading[tempIndex];
realTemp = temps[tempIndex];

#else

if (switchValue == moveUp) {
targetTemp = targetTemp + 1;
}
if (switchValue == moveDown) {
targetTemp = targetTemp – 1;
}
realTemp = targetTemp;

#endif

inTemp = analogRead(inTempPin);
actualTemp = inTemp;
int i = 0;
while (reading[i] < inTemp) {
// actualTemp = temps[i];
i = i + 1;
}
// lcd.setCursor(5,0);
// lcd.print(“A:”);
// lcd.setCursor(7,0);
// lcd.print(actualTemp);
// lcd.setCursor(12,0);
// lcd.print(“T: “);
// lcd.setCursor(14,0);
// lcd.print(targetTemp);
// delay(250);
// probeTemp = analogRead(probeTempPin);
// lcd.setCursor(0,1);
// lcd.print(“P: “);
// lcd.setCursor(2,1);
// lcd.print(probeTemp);
// lcd.print(temps[i]);
if (whatState == CONVBAKE) {
digitalWrite(convLowFanOnPin, HIGH);
} else {
digitalWrite(convLowFanOnPin, LOW);
}
if (whatState == CONVROAST) {
digitalWrite(convHighFanOnPin, HIGH);
} else {
digitalWrite(convHighFanOnPin, LOW);
}
if ((inTemp+2) < targetTemp) { if (whatState == BROIL) { digitalWrite(broilHeaterPin, HIGH); digitalWrite(bakeHeaterPin, LOW); lcd.setCursor(18,0); lcd.print(“-”); } else if (whatState == BAKE) { digitalWrite(broilHeaterPin, LOW); digitalWrite(bakeHeaterPin, HIGH); lcd.setCursor(18,0); lcd.print(“-”); } else if (whatState == CONVBAKE) { digitalWrite(bakeHeaterPin, HIGH); if (targetTemp > (reading[i] + tempDiff)) {
digitalWrite(broilHeaterPin, HIGH);
lcd.setCursor(18,0);
lcd.print(“=”);
} else {
digitalWrite(broilHeaterPin, LOW);
lcd.setCursor(18,0);
lcd.print(“-”);
}
} else if (whatState == CONVROAST) {
digitalWrite(bakeHeaterPin, HIGH);
if (targetTemp > (reading[i] + tempDiff)) {
digitalWrite(broilHeaterPin, HIGH);
lcd.setCursor(18,0);
lcd.print(“=”);
} else {
digitalWrite(broilHeaterPin, LOW);
lcd.setCursor(18,0);
lcd.print(“=”);
}
} else { // should never get here
digitalWrite(broilHeaterPin, LOW);
digitalWrite(bakeHeaterPin, LOW);
lcd.setCursor(18,0);
lcd.print(“_”);
}
} else {
lcd.setCursor(18,0);
lcd.print(“_”);
digitalWrite(broilHeaterPin, LOW);
digitalWrite(bakeHeaterPin, LOW);
}

lcd.setCursor(12,0);
lcd.print(stateNames[whatState]);
lcd.setCursor(0,1);
if (switchMode == switchModeTemp) {
lcd.print(“up dwn Qik mode off”);
}
if (switchMode == switchModeMode) {
lcd.print(“Set Mode”);
}
}
checkCaseFan();
switchValue = 0;
delay(250);
}

The Arduino Cooks – or Why I bought a Jenn-Air oven

In 2002 after we moved where we are now I built a new kitchen. That mean new appliances. Looked at many of them and decided to go a bit above the average and get a Jenn-air. I’d always heard they were one of the “better” brands. So we got the Jenn-air microwave and built in oven. Both worked very well – for just over three years. Then the turntable holder on the microwave sheared. It would work but not turn. I looked on line for the part but couldn’t find it. I called Jenn-air and they said they didn’t have one but I should call the local repair place they would have one.

So I called our local appliance repair place, County Wide Appliance, and had them come out. I’ve used them in the past and they’ve always done a good job. The service guy looks at it (I think his name was Skip but it’s been a few years. He’s the one that does most of the west side of the city.) and calls the warehouse. They don’t have the piece in stock (it’s an under $10 item). They tell him they can’t get it. WHoa! Wait a minute – I’ve got a dead microwave at under 4 years ? and it wasn’t the cheap one ? He called the factory and they said just what they told me – they don’t have one either but they also tell him – IT”S NOT MADE ANYMORE. He said are you sure ? They assured him that yes, they have no more parts and there aren’t any coming.

They only made parts for it for three years, then they stopped. I got a dead microwave. Plus a service bill for the “repair” call. I didn’t disagree with the bill at all – he came out and he can’t work for nothing that would be very unreasonable. My problem was with Jenn-air. What a crappy policy. Talked with the repair guy and decided to epoxy the part to the shaft. Means it wouldn’t come apart anymore so if the motor broke the micro would be pretty much done for but it looked that way anyway as it was. The was over three years ago and it’s still working very well. But my opinion of Jenn-air went right into the toilet.

So then about three years ago the oven control panel broke. Just started beeping and wouldn’t stop. Turned the power off and on (I’m a windows guy – if anything doesn’t work – reboot it) and that didn’t do any good. Just beep, beep, beep, bee..

Googled the parts – there were three main peices – over $300 each. So I was faced with: 1 could be the touch panel, 2 could be the controlling board, 3 could be the intermediate controller. If I got it right the first time $300 gets the almost $3000 oven back working again. But if I got it wrong I’d end up, with shipping and tax, $1000 into it. Damn, I was peeved. This was an over $3k oven that lasted about 6 years.

Seeing as I do most of the cooking I cooked mostly out on the grill or in the dutch oven and didn’t use the Jenn-air. But I did like it when I could – convection with the probe was my favorite. I decided to build a controller myself. I had purchased a Labjack a while back and hadn’t done much but little test things here and there. I thought this would be a great way to get the oven going.

I checked out the circuit board – the power supply and relays weren’t the problem. So I hooked up the Labjack and wrote a program in Delphi that would control everything. It worked pretty good. My wife didn’t appreciate having a USB cable going from the oven to the computer and I had to agree, it did look pretty geeky.

So looked for another solution. I ran across an article about the Arduino in one of an electronics magazine and decided to give that a try. – check the next post.

Arduino – smoothing out a bit

The relationship with the Arduino system is getting better. This is usually the case with new things – the more you know about them the more comfotable they get, the more you learn about them the better things seem to go.

It’s probably in the docs somewhere but I figured out that any library added in the libraries directory of the arduino software folder gets found automagicly. And any project in the examples directory can’t be overwritten. You make a directory called something like “Projects” within the arduino folder and the relationship improves.

After a few little “blinking light” type projects I wanted to get the LCD ColorShield from Sparkfun going. After weeding out the headaches of the colorlcdshield.h and colorLCDShield.cpp have to be within the libraries folder in the arduino folder, and then I had the PHILLIPS version not the EPSON version so you change lcd.init from EPSON to PHILLIPS, it worked. Then I started playing around a bit. Figured out the color definitions are a bit messed up, maybe because of the epson to phillips change. 0,0 is the top left corner which means the rows run down veritcally, etc. etc.

I took the TestPattern sketch (that’s what projects are called in Arduino) by Jim Lindblom and using it as a base made a scope program. I found it’s easier for me to do something useful while learning, I tend to learn better that way.

It works pretty good and is a good test bed for checking out the functions available.

The setup section: inits the 3 buttons that come with the LCD shield, sets up some constants, clears the screen to white, sets an array the size of the screen to 0 and draws a base line that separates the info section from the pattern section.

Things I wanted it to do – be able to still shot a pattern and give an average voltage.

The loop section: Do a loop that reads in the voltage at pin 0 and adds that number to the total. Then get the pixel position from the screen array and set that white. Now convert the input voltage to a screen X position and store it in the array place we just set white on the screen, then set the corresponding pixel on the screen blue.

After the loop runs 5 times I update the average voltage display. If I did it too soon it looked jumpy, this smooths things out a bit. There is also the if statement that checks button 0 and if pressed stops reading and just displays the existing pattern – that’s the hold system. Next maybe be able to adjust the delay with the buttons and then the voltage range. Also a way to calibrate it would be nice. But for now, here’s a pic and the sketch:

/*
  TestPattern - An example sketch for the Color LCD Shield Library
  by: Jim Lindblom
  SparkFun Electronics
  date: 6/23/11
  license: CC-BY SA 3.0 - Creative commons share-alike 3.0
  use this code however you'd like, just keep this license and
  attribute. Let me know if you make hugely, awesome, great changes.

  This sketch has example usage of the Color LCD Shield's three
  buttons. It also shows how to use the setRect and contrast
  functions.

  Hit S1 to increase the contrast, S2 decreases the contrast, and
  S3 sets the contrast back to the middle.
*/
#include <ColorLCDShield.h>
#include <stdlib.h>

LCDShield lcd;

int buttons[3] = {3, 4, 5};  // S1 = 3, S2 = 4, S3 = 5
byte cont = 40;  // Good center value for contrast
// save these for later things int zero = 48; int A = 65; int a = 97;
char voltsIn[12];
int vin;
float temp;
float total = 0.0;
int screen[130];
int vinPoints = 1024; // v in can be  0 to 1023.
int screenLines = 130; // number of lines in the screen
int screenBottom = 98; // leave me 2 text lines for info and text
int useLines;
int scanCount = 0;
int scanDelay = 50; // picked this # outa my butt
int scanShow = 5; // same here

void setup()
{
  for (int i=0; i<3; i++)
  {
    pinMode(buttons[i], INPUT);  // Set buttons as inputs
    digitalWrite(buttons[i], HIGH);  // Activate internal pull-up
  }
  lcd.init(PHILLIPS);  // Initialize the LCD, try using PHILLIPS if it's not working
  lcd.contrast(cont);  // Initialize contrast
  lcd.clear(WHITE);  // Set background to white
  for (int i=0; i<131; i++) {
    screen[i] = 0;  // clear the screen array so we know where we're starting from
    lcd.setPixel(BLACK, screenBottom+1, i); // as long as your going across, do the border line
  }
  useLines = screenLines - (screenLines - screenBottom); // get usable lines
  lcd.setStr("AV:", screenLines - (1*16), 0, BLACK, WHITE); // static display part
}

void loop()
{
  if (digitalRead(buttons[0])) // button 0 not pressed
  {
    for (int i=0; i<130; i++) {
      vin = analogRead(0);  // get a new reading
      total = total + vin; // add it to the total so we can get an average later
      lcd.setPixel(WHITE, screen[i], i); // clear the previous point
      screen[i] =  (-((float)vin / vinPoints) * useLines) + useLines;
      lcd.setPixel(BLUE, screen[i], i);
    }
    scanCount = scanCount + 1;
    if (scanCount > scanShow)
      {
      updateDisplay();  // only update the display once in while, less screen jitter, faster loop
      }
  }
  delay(scanDelay);
}

void updateDisplay() {
    temp = (float) ((total / (scanCount * 130)) / 1023) * 5;  // get the avg volts read
    dtostrf(temp, 5, 2, voltsIn);  // make it a string
    lcd.setStr(voltsIn, screenLines-16, 3*8, BLACK, WHITE); //display it
    total = 0.0;  // now start over
    scanCount = 0;
}

Arduino Uno – my rough start

I’ve been reading about the Arduino system in various places around the web and in magazines I’ve picked up ehre and there. Picked up an issue of Nuts and Volts on a recent trip to read during a flight – I didn’t need to re-read airplane flight sales catalog again. I ordered a couple. I had some ideas on where I could use it. It has analog and digital input and outputs, and looked like it would be easy to get up and going.

I got them, downloaded the zip that had the system in it. Ran a driver installation. Unzipped the program. It saw the board OK the first time and I could run the Blink example program. Made a couple changes to the progrm and it worked. I then downloaded the library for the LCD Color panal I also bought (they call their add on boards “Shields”, so I’ll go with that) called the Color LCD Shield. I unzipped the library. Opened up the project, the library and then couldn’t get it to work. Played around trying to get paths and other things straight but didn’t have any luck.

I’d used a few development environments before so I tried many of the things I’d learned over the years but didn’t have any luck with this one. I went to Sparkfun.com where I bought everything and read through the forum about this. Finally posted the question and got a response within a decent amount of time from Jimbo with some suggestions. Went back and forth a couple times and finally figured it out.

It seems that there are some partiulars about the Arduino system that are needed but don’t jump out at you when you start using it.

For others that may hit this problem here’s what I did – I deleted everything Arduino I had installed. Actually the program doesn’t “install” in the normal windows sense, it just unzips and then you find it and run it from there.

I unzipped it again and put it in my c:\users\’loginname’\documents\” directory which should end up with the path to the arduino.exe and other files being “c:\users\’loginname’\documents\arduino\”. Then I unzipped the colorlcdshield library into the libraries folder within the arduino folder.

Then I unzipped ChronoLCD_color into the ..\arduino\examples folder. Plugged the Arduino in and Chrono shows up under Files, Examples. Opened it and the line JimbO refers to, lcd.init(EPSON) shows up. Changed it to PHILLIPS and it works.

I did find that the color definitions don’t match correctly, probably an Epson / Phillips difference? So far, BLUE and RED are reversed.

I’ll post more as I get them.
later ….

Damn it, not another Scam Email – or – Fun With a Scammer

This was an email discourse with a scam I received to our pizzatogo.com site. This scammer wouldn’t give up. This went on and on. I finally had to kill me off. Even then he didn’t give up right away. In the meantime I received more offers and decided to put up a little blog with the scam discussions and other info about scamming and how to break up your day by screwing with them. It’s called FUN WITH SCAMMERS at funwithscammers.com

The whole email discussion is there. It’s pretty funny. Though I did take advantage of the persons lack of understanding some obscure English language terms. But, hey, this guy was trying to screw me out of my money. Down side is I look this guy up and he had gotten a couple people to fall for it.

osTickets – open source support ticket solution

I’ve been using Smartertools SmartTracker for a few years but there were many features in it that we didn’t need – it was a bit overkill for us. I did some checking around recently and tried a few different systems. I ended up using osTickets open source system.

Written in PHP, it’s a very nice system just out of the box. Installation was pretty simple and you can get it setup and going very quickly.

Once running there were some mods I thought of to make it just a bit better (ain’t that always the way ?) so before digging into the code I did some look around again and found that so far everything almost everything I thought of is done and available for download. One guy that has some very good mods available (I used almost all of them) is Scott Rowley at http://sudobash.net (great url too).

One of the mods I put in is the Rules capability. Works good but I noticed I could add a blank rule and there really wasn’t anything that warned me I had screwed up. So I came up with this change that checks if the user tries to enter a rule without enough fields filled out to make a complete rule. To add the change, in the file “scp/add_rule.php”

 

Find this code:

// Check if button name "Submit" is active, do this

if(isset($_POST['Submit'])){
$sql="INSERT INTO ost_ticket_rules (isenabled, Category, Criteria, Action, Department, Staff, updated, created)
VALUES ('$_POST[isenabled]','$_POST[Category]','$_POST[Criteria]','$_POST[Action]','$_POST[Department]','$_POST[Staff]', NOW(), NOW())";
if (!mysql_query($sql))
  {
  die('Error: ' . mysql_error());
  }
echo "Rule added";
}

And replace it with this code:

// Check if button name "Submit" is active, do this

if(isset($_POST['Submit'])){
	if($_POST[Criteria]=='') {
		echo '<span style="color: red;">You have not speicifed anything for "CONTAINS".</span>';
	} elseif ( ($_POST[Action]=='staffId') &amp;&amp; ($_POST[Staff]==0) ) {
		echo '<span style="color: red;">You have assigned this to Staff but have not chosen the Staff Member.</span>';
	} elseif (( $_POST[Action]=='deptId') &amp;&amp; ($_POST[Department]==0) ) {
		echo '<span style="color: red;">You have assigned this to department but have not chosen the Department.</span>';
	} elseif (($_POST[Staff]==0) &amp;&amp; ($_POST[Department]==0)){
		echo '<span style="color: red;">You must choose either a Department or Staff</span>';
	} else {
		$sql="INSERT INTO ost_ticket_rules (isenabled, Category, Criteria, Action, Department, Staff, updated, created)
		VALUES ('$_POST[isenabled]','$_POST[Category]','$_POST[Criteria]','$_POST[Action]','$_POST[Department]','$_POST[Staff]', NOW(), NOW())";
		if (!mysql_query($sql))
			{
			die('Error: ' . mysql_error());
			}
		echo "Rule added";
		}
}

This checks the variables that should have values to see if they are empty and gives a warning if there isn’t enough to do a complete rule.

The other thing I noticed was that if the user entered an incomplete rule they got the warning but had to renter all their information again. So adding the 

$_REQUEST[variable]

to each of the form statements filled in any information already added to the fields:

Find this line:

<input id="Criteria" name="Criteria" type="text" />

and change it to this:

<input id="Criteria" name="Criteria" type="text" value="<?=$_REQUEST[Criteria]?>" />

Then find this line:

<select name="Action">
<option> </option>
<option value="deptId">Department</option>
<option value="staffId">Staff</option>
</select>

And change it to:

<select name="Action">
<option value="<=$_REQUEST[Action]?>"><?=$_REQUEST[Action]?></option>
<option value="deptId">Department</option>
<option value="staffId">Staff</option>
</select>

That's it.
leon ...

Kodak Pulse Picture Frame

I love this thing. There are other picture frames on the market but this one has a feature that lets you email pictures to the frame. There are a couple others out there but I chose this one – being in Rochester and an ex-Kodak guy helped the decision.

Setup was pretty easy. You can add images to it from a usb key, sd ram card, plus another one I forget the name of right now. But the big feature for us was when you set it up you get an email address, xxxxx@kodakpulse.com, that lets you send pictures to the frame. As a security feature you have to enter, at the Kodak Pulse web site, the addresses that will be allowed to send pictures to the frame.

I set it up and then went to the web site. Logged in and did an upload from my computer. I chose a folder, did a select all, and off they went. Once it was finished the pics started showing up in the frame! It took less than 10 minutes for all of them to be there. Then I took a picture with my phone and sent it to the frame. 2 minutes and it was on the frame. I love it.

You can edit the images that show up on the frame from the frame or the web site, you can adjust the time on and time off of the frame so it doesn’t run all night, you can set the picture changing type and time as well as switch from single to collage mode. It also has a mode, set from the web site, that will disable the on frame controls – great when used as a gift to someone unable to manipulate the touch screen system.

Picture quality and brightness is excellent. The ease of use is the biggest feature – I’ve been able to give the address to a bunch of people in the family and they send pics from their phone without problem.

I now have 3 frames in my account – one for us and a couple for older relatives. The only downside – there has to be wifi available to send pics to it, but it can be loaded from usb or sd without wifi.

 

Update to the GoDaddy incident

Here’s how it went with this problem:

The server problem started about 4pm. The event log showed that the ethernet port was flipping on and off. Finally it went off. I rebooted, it worked, then went down again. rebooted – same thing – down again. Called my rep at GoDaddy but he was out. Not a big deal – I put in a support ticket, which is what my rep probably would have told me to do anyway.

Got back an automated response with this:

***************************************************
“We’ve received your question. You can expect a response within 24 hours.

Your Incident ID is: 11237453

Or, talk with our highly trained, courteous support staff – they’re waiting to take your call. Whatever time it takes to assist you, that’s the time you’ll receive: 24/7 Sales & Support: (480) 505-8877 – 24/7 Billing Support: (480) 505-8855.”

***************************************************

Of course in my ticket I explained what I found in the event log. About 6pm I received a response from Godaddy that said “Your support Request is Being Reviewed” and then:

“Due to its complex nature, your issue has been relayed to our Advanced Technical Support Team. Our most skilled technicians will be working to resolve your issue quickly and completely. You will be notified promptly upon resolution.”

Sound reasonable, it’s only been an hour and a half, I could live with this. I’m thinking another hour or so I’ll get the server back or at least someone will tell me what’s going on.

A few hours later, about 1am I think, I’ve heard nothing, and right on my support login page it says I’m a VIP. So I call that “highly trained, courteous support staff” number.  Got a very nice person that did some checking and told me it was at that time being reviewed by one of the advanced techs. So I’m thinking that someone is actually looking at it now and it shouldn’t be much longer. Around 2:30am I haven’t heard anything so off to bed I go.

Well the idea that one of my main servers is down isn’t conducive to sleeping so at 6:30am I’m up and back checking on the server. Nothing. At 6:42am I get a notice from my checking service that the server is backup. I figure I’m here, I might as well get some work done. I notice it’s not working so good – at 7:34 am I get notice the server is down again.

Freaking wonderful. It’s 7:30, the majority of my customers on that machine are on their way to work – to find out their web site is down. Oh Boy, this will be an exciting morning.

At 8:58am it’s backup. And stayed up. Nothing from GoDaddy. Not a @#% thing.

At 11:12 am I get a notice from Bill H. telling me:

“I understand that your server has been inaccessible intermittently. Our data center has researched this issue and have replaced the chassis on your server. I have verified your server is now accessible and you are able to log into it.”

Are you kidding? I am, by their own admission a VIP customer and my server is down with no notice as to what was going on? Does this mean that the guy at 1am was bs’ing me ? Or that it’s “being reviewed” means that he sent them an email and they’ll get to it when they can?

They couldn’t have someone let me know what was going on when they found out what the problem was? Or that they wouldn’t even look at it till the morning anyway?

Big BS. It shouldn’t come as a surprise I guess. I’ve been with them quite awhile now and have notice that over the years their interface has become all about marketing and pushing services they can sell you rather than service they can give you. This sucks. A change is gonna come.

 


My Encounter with GoDaddy or Customer Service Shines

This is a good example of Customer Service shining like poop. And a glaring problem with Godaddy. When things work, they’re great to work with – but their system of handling problems sucks big time. I understand that they want to not get their techs tied up with trivial questions but they don’t have a system for handling real problems very well at all, in fact it’s one of the worst I’ve dealt with. This is the most recent, this has happened a few times since we’ve been with them.

A little setup information: One of the services my company does (Zaks.Com) is host web sites. We run servers at multiple locations. One of our service providers is Godaddy and has been for more than 6 or 7 years. We had a problem (hardware) with one of the servers recently, here’s the transcript of one of my chats with them, I’m lz98lz98:

******************************************************
Chat Transcript Please wait while we find an agent to assist you…..

Thank you for your patience.You are currently at position number 1 in the queue. Thank you for your patience.You have been connected to Michaela Z. -

Server Concierge.Michaela Z. – Server Concierge: Please note: All Live Chat sessions are logged and may be monitored for security and quality assurance purposes.

Thank you for contacting Live Chat support for Virtual and Dedicated Servers. This is Michaela. How can I help you?

lz98lz98: I put a ticket in yesterday, trying to find out the status of it, # 11237xxx.

Michaela Z. – Server Concierge: It could take up to 5 minutes for me to look at this. I appreciate your patience.

Michaela Z. – Server Concierge: The ticket is currently with our data center for review. Once resolved we will email you.

lz98lz98:  I talked with someone last night and they said they were working on it then, that was 6 hours ago, then I saw it came up an hour ago and went down again, is someone actually doing anything on it now or not ?

Michaela Z. – Server Concierge: The ticket is with our data center currently. Tickets can take up to 72 hours.

lz98lz98: I’ve got a server with over 80 customer websites on it that could be down for 3 days?

Michaela Z. – Server Concierge: Our notes indicate that it was up on Monday.

Michaela Z. – Server Concierge: We are currently working on this issue but tickets to take up to 72 hours.

lz98lz98: It went down at 1:11pm yesterday, it did a power cycle, it came up and went down again at 5:22, I put the ticket in, I did a recycle, it went down again, I talked with agent on the phone last night and he said someone was going to look at it then, it’s been down all night, it came back at about 4am, then when down again. It’s down now. I told them this on the phone.

Michaela Z. – Server Concierge: As I have said, the ticket is with our datacenter for review.

lz98lz98: So this system is not really for any problems in depth, it’s just a status kind of thing ? right?

Michaela Z. – Server Concierge: Please clarify?

lz98lz98: You can only look at something that says the ticket is in the system, you don’t know if there’s anything going on or not ?

Michaela Z. – Server Concierge: The data center has not made any notes on this issue yet.

lz98lz98: I’m here with over 80 customers on their way into work to find out their business web is and has been down all night, I’ve got more than a half dozen servers with you and there is not a way I can find out anything other than it could take 3 days ?

Michaela Z. – Server Concierge: It will not necessarily take three days. That is just the timeframe I am allowed to give. However, the ticket is already with our data center team.

lz98lz98: bye.

**************************************************************

 

My First Useful App

The night before I left CA after App class I complete the first phase of an actual app that we started the week before – a museum pest reference guide. It pulls information from our newly launched website, CollectionPests.com, and loads an app on your smart phone.

Right now it’s just a reference – The pests are listed by common name and then when you choose one you get an image of it along with a description, scientific name, eco type and risk factor.

It’s running on the iPhone and the Android. I put it on the Android app store but have to get it through the Apple system. I’ll start that next week and let you know how that goes. I think I may like to add a few features to it before doing so.

If you put “android museum pest reference” in Google it will take you to the download page, http://www.androilib.com. Now I need to figure out how to do updates.

Using Appcelerator Titanium for APPs

Back from app school and I wanted to move some of my app work over to Titanium. While doing so I thought I’d publish some of the little things I’m figuring out as I go along – it may help others save some time over what usually are dumb things that should have been in the directions somewhere – AND that you would have read had you read the directions. I’m using Aptana as the editor for this. I’ve not used it extensively but it has worked OK so far.

Here’s something that may be useful (for version 2, not 3) – after you start Aptana and you don’t have any files open you can’t drag and drop on the main screen – but – you can drag to the bar containing the words “My Studio”, then it will open the file you drop there. Once a file is open just drag and drop it pretty much anywhere. With Version 3 that was changed – start Aptana and drop a file in the main screen to open it.

Editing on the PC, Compile on the MacBook

I like using my three 21″ screen Windows 7 PC setup for editing.  I currently doing some Appcelerator Titanium APP development. Appcellerator seems to run better on the Mac than the PC. You can’t do iPhone apps as easily on the PC, I’m not sure you can get the iPhone simulator running on the PC.

So what I did was share my Mac user folder, open it on the PC. I do the editing there cause I like to use a variety of editors (Multi-Edit, Aptana and Dreamweaver) then I compile on the Mac. To make it even nicer I use TightVNC. Here’s a screen shot:

I put the Mac through TightVNC on the left scree, the editor of the moment on the middle screen then put a browser or two along with Outlook on the right screen.

Works out pretty well this way, but does make it hard when I have to work on a pc with one screen.

I also found that UltraVNC would just randomly disconnect, TightVNC so far hasn’t I found that tip on the net, sorry, forgot where.

leon …

Appcelerator Titanimum Certification Training

Thursday morning the class starts. I’m interested to find out a lot more about Titanium. It looks like a good product but there are some “flaky” things I couldn’t pin down that bothered me. The class was run by Kevin Whinnery from Appcelerator. Kevin does a nice job – it was a very good presentation, overall I left learning and knowing a lot more about the product.

One of my big concerns was the Titanium Developer. It just seems almost ready but not quite. Come to find out that’s what the other developers thought also. The class was full, about 24 I think. 6 or 7 where there because they’re going to be trainers in other cites/countries. From what I could tell a few had already published apps with this tool or others. The downside to that was that the class moved pretty damn fast – 3 days would have been much better. Also that was based on the fact that there was an assumption that you knew much more about Java Script than “an understanding”. I think the word Deep would have helped quite a bit. That was the only rough spot I hit – I use Javascript daily but the generally the same sections of the language repeatedly. It’s more of an adjunct to my daily use than a mainstay. The class assumed more of a mainstay knowledge.

But in holding to my theory that if you’re a real programmer it’s a matter of syntax of a particular language not learning or re-learning programming, I spent a lot of time with my Google look up handy. That and the fact that my day is usually spent in front of three 21″ screens on a pc and here I was with a single screen MacBook laptop and it’s flat chicklet keyboard, the splat key, on my useuall keyboard I use the left side of my rather big hands to hit the control key, and bitch and moan and complain some more ….

In the first 15 minutes of the class Kevin demos starting a new app. And sure as crap he gets to the app id line and says “Any string of characters can be put here”. Bull shit. I had to raise the issue that you can just put any string of characters there – it had to have a “.” in the name or it won’t work. He didn’t know that – only be cause he never tried putting anything else in there with version 1.5.1. It was just a habit to use something.something.something. I still want al the hours I wasted because of that back. Period.

One of the people I met at the class – Nobel Edward from Consona, very nice and interesting person, was able to very the period problem along with some variation of letters and numbers don’t work as expected. Later in the day we walked through what was happening behind the scenes – Appcelerator mobile is a blanket running various scripts connecting sdks. In one section I noticed that one of the Android  sdk calls expects a particular notation for the name of one of your modules – you guessed it – in the reverse whatever notation – com.zaks.thisismyappname type format.

Overall it was worth attending. With something like this you pick up little things that you probably wouldn’t get on your own – or it would take a good amount of time to run across them.  You also meet some of the people behind the scenes and get an idea of where they’re heading and why.

And now I am proudly one of the first Appcelerator Titanium University Certified Developers. And yes, I did get a T-Shirt.

Appcelerator T-shirt

My Appcerator Univirsity T-Shirt

leon …

Off to be certified but San Francisco first

I’m off to attend the first Appcelerator training for Titanium. It’s in Santa Clara, CA, for two days. Barbara suggested I leave a day early in case there’s any delays in the plan connections or such I would stand a better chance of not missing it. The fact that she travels A LOT and has spent many nights in hotels near the airport because of delays I decided to take her advice. It’s wasn’t a losing proposition – if I’m delayed  I still have time to get there – and if not I get to spend a day off in CA.

The weather was with me and I ended up having a day to relax. I drove up to San Francisco to spend the day. Living in the area I do it was a bit different site than I’m used to. Around here there are almost caresses of once industry giants – Kodak to name one I was personally attached to. Driving from Santa Clara to San Francisco was a different story – passing Intel, Ericson, Nvidia, Cisco and many, many more. I was thinking I should pick up a backup cord for my phone and out of the corner of my eye see a sign for JAMECO Electronics. I’ve been buying parts from them for ages and the sign said Open to the Public. So I pulled off at the next exit and went down the access road to the store. They were very helpful but didn’t have a cord to fit this phone yet. Just nice to see some of the places you dealt with for years.

Here’s a few pics:

Buena Vista Cafe, San Francisco

This is the view of the Buena Vista Cafe from the trolley stop. It’s not a complete visit without a couple Irish Coffees here.

Sav Fancisco Bridge take with Atrix 4g phone/camera

Taken on trip for Appcelerator Training

Then you turn around and get a picture of the San Francisco Golden Gate Bridge. Still beautiful and while there I heard that they’re going to start the first time renovation of the cables that hold it up. It will be a three year project. And to save money they’re (the city I think) is doing the job themselves.  So there are times when the city doesn’t need to save any money ?

Fishermans Wharf, San Francisco, CA

A guys gotta eat - lunch at fishermans wharf

And then a walk down to Fishermans Wharf for lunch. I was hoping to see a musician, Daniel Kane, on the street but he wasn’t there. I’d seen him twice before – the first time cassettes where the transport of choice, the second time it was a cd. I was thinking this time I’d pick up a thumb drive, but he wasn’t around.

On the way back to the hotel I saw a sign for the Intel Museum. That would have been fun but not enough time.

leon …

Tomorrow Came – and so did the Atrix 4g

Sure enough the Atrix 4g showed up Tuesday the 21st. Went out to ATT store and it took Mike about 1/2 hour to get everything all set with contacts and number moved over from my iPhone. I had to take the case off the iPhone that I put on the first day i had it – it was then I noticed that in one of the times I dropped it I put about a one inch crack in the back bottom of it. It obviously didn’t bother anything but I’m thinking without the case it would have been BYE BYE iPhone.

That made me decide to get a case and screen protector right away again for this phone so I bought them at the store. Mike put the screen on for me based on the idea that he said “This is the only time (when you pull the factor screen protector off) that there will not be any fuzz to get caught under the screen protector”. I hate that, I spent at least 1/2 an hour screwing with my iPad getting all the fuzz out. So I figured he’s probably done more than me and he went ahead and NO fuzz. A small but wonderful thing.

I like it. It’s fast (duo core), seems to pick up the networks a touch, but not much faster than the iPhone. came with a bunch of apps already on it, mail accounts were very easy to add. Too be fair when I got the iPhone it was 2 years ago – things change dramatically in tech today so it is unfair to compare what I did/got 2 years ago with today. Also I didn’t constantly update my apps on the iPhone – once I got it doing what I needed I just used it, that’s what it was for and it worked very well. I added a new app once in while  when someone showed me something that interested me but I wasn’t app happy.

Using the Android system is easy – and I LOVE NOT BEING TIED TO ITUNES. The Apple tether is something I was never fond off and it’s nice to be free of it. That does bring some bad points – you lose the safety net being an “Appleite” offers. But freedom is not a bad thing.

I like the idea of having the icons out front that show me posts from my mail, facebook and texting without me having to do anything but turn the screen  on. Probably could have set the iPhone to do that but never thought to look for that feature. Having the Google search bar always on the front screen is nice too. I found I use that ALOT.

Battery seems too last as long as anything else. Screen is very clear, but it’s the latest generation so I expected that – the detail is there. Camera does a good job, I’ll stick one here:

And the fingerprint security works! I was impressed. I tried the Microsoft Keyboard shortly after it came out – I got one for Xmas from daughter. The keyboard was fine – it’s still going in my office – but the fingerprint thingy didn’t work worth a poop. But the one on the Atrix 4g worked fine. They walk you through reading your left then right pointer finger. They put up 7 or 8 little stars and tell you to swipe your finger. Each time if it’s a good read the star turns green. You get 4 or 5 right and it takes it as OK. You also have to give it a pin number, I guess in case you get your fingers cut off you can still use your phone – good thinking. It worked. I pressed the button to put the phone in standby. Then pressed it and swiped my finger – the phone turned on. Cool.

leon …

Atrix 4g here tomorrow or Bye iPhone

My contract was up at the end of Janurary for my iPhone. It was a 3g and I like it quite a bit. Actually used it for remote desktoping into one of our servers a couple times to fix things while away from the office. Yes, it was a bit small but being able to do it from some of the places I was able to use it impressed me. I can get into our servers anywhere I can get enough bars. Well I guess I shouldn’t have been “impressed” but it was technology doing what it was made to do, but yet I found it at least “neat” (showing my age) if not impressive.

The iPad works pretty good with remote desktop into the Windows servers and getting into the Linux boxes. Big enough to be actually very useful.

So when my contract was up I was thinking of updating to the 4g iPhone – looking at some friends phones it was faster even on 3g.  But then i started paying attention to the commercials and stopped at a couple stores to see what else was out there. The Android phones had come a long way in two years – it isn’t just an iPhone market out there anymore. Last August I read at more than one place that Android being chosen had surpassed iPhone.

I eventually ended up looking at the Atrix (at&t) vs the Droid 2x. The Atrix won because it had seemed to just squeak by the Droid in features – a bit more processing power and the finger print thingy. I figured if I’m going to write apps there may be a time when I want to test that feature on something so that was enough to edge me to the Atrix. It wasn’t originally going to be here till March but I received an email saying it would be here tomorrow, the 21′st. Cool – just in time for me leaving for app training on the 22nd.

And the Atrix has the hot spot feature which means with my phone I have my iPad on the net through 4g. Not bad, we’ll see how it works soon.

leon …

Appcelerator Titanium Update

So I’ve worked out my problems with Appcelerators Titanium app environment with the help of the support forum. When you create an application there is an entry for an application id. Turns out there is a specific format for this ID.

But – finding that out isn’t exactly obvious. In the training video it says at one place – “just enter a bunch of characters”. The part it missed was “If you are using version 1.5.1 (current at the time), you MUST have a “.” period in the name.” So a name like “My App” won’t work, “TEST” won’t work, “atest” won’t work. What WILL WORK is “My.App”, “TEST.TEST” or “test.test” or “com.test.something”. Thanks to Brain Alliet for finding that one. While I was going back and forth on the forum he tried a couple things and hit on that, that being the “.”.

When you create a new app there is a default string in there when you first start. But it auto clears when you put your cursor in that field. I tried it on my Mac and on my PC. On the PC (which is my main machine and the one I tried first) with the default Windows font, you can’t see the “.” – they blend into the text. On the Mac you can easily see them – but it isn’t mentioned that that recommendation is a must.

Also, and this is one of my favorites, it’s colored LIGHT GRAY – the same color you use when you have an in-active or non working link. I can’t wait for “designers” to get off that kick and move along to something else.

Another PC / Mac thing is using the color blue on a black background. Yes, the PC video may suck in your Mac opinion – BUT – there ARE MORE PC’s IN USE THAN MACS. (<- that’s an emphatic period) About as intuitive as a patuti.

I’ve got Appcelerator working on the PC doing Android Apps, on the Mac doing iPhone, iPad and Android apps. And so far I’m pleased with it. The support forum worked out very well, the turn around was very good – my thanks to Paul Dowsett for his help.

leon …

Appcelerator Titanium on Windows 7

I’m trying out Titanium by Appcelerator – it’s a tool for developing apps for the iPhone, iPad, Android and Blackberry.

Got it installed with no problem, got the SDK Manager & Android Emulator installed and running OK.

Tried doing a simple default new project and it’s a crap shoot as to if it will work. When you click New Project it gives you a screen to answer some questions and then creates a project that defaults to having two windows with titles, not much but a good starter set.

Tried downloading what they call the Kitchen Sink – a combination of examples of most all the methods and objects available – a great idea.

Problems, problems, problems. So far it’s one of the flakiest programs I’ve ever used.

When I create a new project if I leave the SDK set to 1.5.1 it doesn’t work, throws an R.java manifest error. If I change it to SDK 1.2.0 it works.

I’m using their support forum to see if I can get some answers. Trying all types of things – permissions, run as administrator, and on and on …

Sniping – screen captures with the Snipping Tool

There something to reading the directions. You stand the chance of learning stuff.

I needed to do a screen capture on my windows machine. Usually I do a prtscrn and bring it into Photoshop and crop down to what I want. I knew there was way to capture just the active window but I forgot what the steps were. So I did a search on Google. And Wala(?) – I found this thing called Snippet. So I started reading a couple links about it.

What it is is – a tool that let’s you define a part of the your screen and capture it, annotate it, and a bit more then save it as a png, jpg and something else and then mail it or save it. Damn neat this snippet thing.

But what I didn’t like was that a few of the sites that I first found that talked about it said “Bring up the snipet tool and ….” It’s like a lot of documentation that’s out there (some of which I may have written) – It assumes you know what the hell “Bring it up” means. I’m pretty much guessing that if you knew what “bring it up” meant or how to do it you wouldn’t have to be searching for the thing in the first place!

Anyway – what you do to “bring it up” is go to the command line – On windows 7 it means click the Start button that is usually in the lower left corner of the screen – unless you’ve moved your task bar like I did (still don’t know why, think it was a mis-mouse and I just never moved it back, it’s at the top) then it’s at the start of your task bar. Here’s mine:

And I took that with the Snipping Tool.

I pressed the Windows key, the program thing showed up (or down in this case) and I typed snip. Snipping Tool showed up, I hit enter. At that point the screen grayed. I pushed down on the left mouse button and highlighted what I wanted to snip. When I release it the image showed in the snipping tool window. From there I could annotate it, save it or email it or both.

Not bad, I’ve used to two times since I found it earlier today. Whoda thunk it?

leon …