Uncategorized

...now browsing by category

 

Coding Challenges

Wednesday, July 22nd, 2020

There are two challenges that really stand out as my favorites right now. There is the https://www.adventofcode.com site. This challenge occurs once a year from Dec 1st – Dec 25th. There are two puzzles a day, except possibly only one on the last day as a reward. It depends on the year. These have been going on since 2015, and you can go back and solve previous years problems for practice.

The Advent of Code challenges tend to have a lot of searching and depending on the year, themes that are used for many of the problems. For example, in 2019, there was the them of the intcode computer to run software based on a predefined message that each user gets as a customer data input. There tends to be a lot of Breadth-First-Search and Depth-First-Search algorithms used in the problems. Brush up on those in whatever language you choose to use.

The second challenge I have really grown to like is https://www.projecteuler.net. If the name doesn’t give it away, these are more math oriented problems. These are really fun, and the first fifty or so problems are not too difficult. Most answers and hints for the first 100 problems can be found online, but it is well work trying to work these out yourself. So far, I’ve spent three days on a really simple problem. I did look at a solution, but didn’t like it. I finally found the problem. I had to re-read the problem to find that I was not counting correctly. It is the little things that get you.

The language you pick really doesn’t matter. I’d pick one that you want to get better at that you will continue to use, but that is just me. These puzzles are great fun!

Simple Update to Mouse Move Program

Sunday, December 9th, 2018

While one of my sons was visiting from college, I showed him the mouse move program. His question was why move the mouse pointer across the screen? Why not just move it one pixel… You wouldn’t even notice the change?

Sure enough, he was right. I made the update, and it is on the download page – KL.java.

Updated MouseMove Program

Saturday, November 3rd, 2018

Don’t move the mouse if mouse has moved in last 60 seconds.

import java.awt.*;
import java.util.*;

public class KL {
	private int x=0;
	private int y=0;
	public static void main(String[] args) throws Exception {
		KL kl = new KL();
		kl.setXY();
		Robot hal = new Robot();
		Random random = new Random();
		while(true) {
			int storedX = kl.getX();
			int storedY = kl.getY();
			hal.delay(1000*60);
			kl.setXY();
			if ( (storedX==kl.getX()) && (storedY==kl.getY()) ) {
				int x = java.lang.Math.abs(random.nextInt() % 640);
				int y = java.lang.Math.abs(random.nextInt() % 480);
				System.out.println("(x,y) = " + x + " , " + y);
				hal.mouseMove(x,y);
				kl.setXY();
			} else {
				System.out.println("Mouse already moved, current position: (x,y) = " + kl.getX() + " , " + kl.getY());
			}	
		}
	}
	
	public void setXY() {
		PointerInfo a = MouseInfo.getPointerInfo();
		Point b = a.getLocation();
		int x = (int) b.getX();
		int y = (int) b.getY();
		setX(x);
		setY(y);
	}

	public void setX(int xval) {
		x = xval;
	}

	public void setY(int yval) {
		y = yval;
	}

	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}
}

I’m back

Saturday, August 6th, 2016

I was having issues with my ISP. Apparently, my family has been streaming Netflix, and the gateway can’t handle the load. I have upgraded the gateway, and now use an Ubiquiti EdgeRouter to handle the “load”. Sorry for the downtime.

The Mouse Move Program

Sunday, May 29th, 2016

I once wrote a piece of code to prove that you didn’t actually have to be at your computer for your IM to state that you are active. This has since gone on to be a frequently talked about piece of code. Here it is 🙂

import java.awt.*;
import java.util.*;

public class MouseMove {
  public static void main(String[] args) throws Exception{
    Robot mm = new Robot();
    Random random = new Random();
    while(true) {
      mm.delay(1000*60);
      int x = java.lang.Math.abs(random.nextInt() % 640);
      int y = java.lang.Math.abs(random.nextInt() % 480);
      mm.mouseMove(x,y);
    }
  }
}

Jumble

Saturday, November 21st, 2015

I have always been interested in the jumble program that is in the paper. A long time ago, I wrote one of my first programs to provide a list of possible words. I am including that “C” source here. I have written several variations on the theme in several different languages. I am fond of this version, as it was the first. After writing it, the first modification I made was to pass all of the results through the dictionary aspell. What was always amazing to me was that there was always one and only one solution to the Jumble.

You may need to install apt-get install libaspell-dev for this to work. I also use a Makefile to build this.

gcc -O -laspell -c jumble.c
gcc -O -laspell jumble.o -o jumble

/*
 * Created by: Kenneth Lee (kelee@nyx.net)
 * Created on: May, 1993
 * jumble - finds permutations of letters
 *
 * Updated by: kelee@nyx.net
 * Updated on: 20-Apr-2009
 * Added ability to only display correctly spelled words by running each
 * word through the aspell spell checker available on Linux distibutions.
 * To compile, needed to get the aspell-devel libs to have the aspell.h 
 * header files available. 
 * 
 *
 */
 
#include <stdio.h>
#include <string.h>
#include "aspell.h"


void perm(char temp[], int r_value) {
  int count;
  char temp1[20];
  char temporary;
  int correct;

	// int correct = aspell_speller_check(spell_checker, word, size);
	AspellConfig * spell_config = new_aspell_config();
	aspell_config_replace(spell_config, "lang", "en_US");
  AspellCanHaveError * possible_err = new_aspell_speller(spell_config);
  AspellSpeller * spell_checker = 0;
  if (aspell_error_number(possible_err) != 0) {
    puts(aspell_error_message(possible_err));
  } else {
    spell_checker = to_aspell_speller(possible_err);
  }  

  // prints first case
  if (r_value==(strlen(temp)-1)) {
     correct = aspell_speller_check(spell_checker, temp, strlen(temp));
     if (correct > 0) {
	     printf("%s\n", temp);
	   }
	}
	
  for (count=r_value;count>=0;count--) {
     strcpy(temp1, temp);
     if (r_value != count) {
        temporary=temp1[count];
        temp1[count]=temp1[r_value];
        temp1[r_value]=temporary;
		    correct = aspell_speller_check(spell_checker, temp1, strlen(temp1));
		    if (correct > 0) {
	        printf("%s\n", temp1);
	      }  
     }
     if ((r_value-1)>0)
        perm(temp1,r_value-1);
  }
}

int main() {
  char data[20];
  printf("\nEnter letters to be unscrambled: ");
  scanf("%s", data);
  perm(data,strlen(data)-1);
  printf("\n");
}

MD5 hash using Perl

Monday, May 12th, 2014

Earlier, I demonstrated using groovy with a simple bit of code to create an MD5 hash. Here is a Perl version, notice how little code is used.

#!/usr/bin/perl
use strict;
use warnings;
use Digest::MD5 qw(md5 md5_hex md5_base64);
use Digest::SHA qw(sha1 sha1_hex sha1_base64);
use MIME::Base64;
my $password;
if (scalar @ARGV eq 1) {
	$password = shift;
} else {
	$password = "password";
}
print "MD5 hex digest of $password = ",md5_hex($password), "\n";  # human-readable
print "MD5 base64 digest of $password = ",md5_base64($password), "\n";  # human-readable too
print "SHA1 hex digest of $password = ",sha1_hex($password), "\n";  # human-readable
print "SHA1 base64 digest of $password = ",sha1_base64($password), "\n";  # human-readable too

Pretty cool, and this code runs on just about any linux/unix machine. In Windows, I ran the code using Strawberry Perl.

RMOUG 2014

Friday, January 3rd, 2014

If you are in the Denver area February 5 – 7, consider going to Rocky Mountain Oracle Users Group’s Training Days. This must be the best deal for two days of sessions on just about every facet of Oracle.

Date: February 5-7
Location: Denver Convention Center

Hope to see you there!

Moving On Again

Sunday, April 14th, 2013

I have changed employers, as if you couldn’t tell by the scarcity of posts over the last nine months! I am no longer working with Oracle Content Server. Other than the difficult to use Site Studio, I believe Content Server is a really great platform to drive data management. But all good things do come to an end eventually.

I am currently working with very large datasets on Oracle. I also write more shell script code, mostly Korn shell and also perl for more complex tasks. I was never a fan of perl, as many are not fans of Java. I have a new found respect for this all purpose Swiss Army Sledge Hammer!

I will more than likely be changing the title of this Blog as WebCenter Content is no longer the focus of my work. More likely to be Java/SOA and Quick Hacks to get the job done, or something along those lines.

For those that were curious, I actually took the photo that is displayed at the top of this Blog. This is one of my favorite catch and release fishing spots located just a few miles north of Lake City, Colorado. Hope to be back there soon!

Groovy, well, is just groovy.

Friday, June 15th, 2012

At some point in your programming career, you will probably need to use an MD5 hash. Most likely just to get the hash for a password.

One of the simplest ways is to use groovy. Here is the code. Don’t even need to put it in the download section. Just copy the code to a file and run it.

import java.security.MessageDigest

srcWord = "password"

if (args.length > 0) {
	srcWord = args[0]
}

println "src: " + srcWord
MessageDigest md5Digest;
byte[] digest;

println "\n****************************************\n"

/* MD5 Code */
md5Digest = MessageDigest.getInstance("MD5");
md5Digest.reset();
md5Digest.update(srcWord.getBytes());
digest = md5Digest.digest();

// println "new BigInteger(1,digest).toString(): " + new BigInteger(1,digest).toString()
println "MD5: " + new BigInteger(1,digest).toString(16)
println "MD5/B64: " + digest.encodeBase64().toString()

println "\n****************************************\n"

/* Now do the same thing for SHA-1 */
md5Digest = MessageDigest.getInstance("SHA-1");
md5Digest.reset();
md5Digest.update(srcWord.getBytes());
digest = md5Digest.digest();
// println "src: " + srcWord
// println "new BigInteger(1,digest).toString(): " + new BigInteger(1,digest).toString()
println "SHA-1: " + new BigInteger(1,digest).toString(16)
println "SHA-1/B64: " + digest.encodeBase64().toString()

println "\n****************************************\n"

/* Now do the same thing for SHA-256 */
md5Digest = MessageDigest.getInstance("SHA-256");
md5Digest.reset();
md5Digest.update(srcWord.getBytes());
digest = md5Digest.digest();
// println "src: " + srcWord
// println "new BigInteger(1,digest).toString(): " + new BigInteger(1,digest).toString()
println "SHA-256: " + new BigInteger(1,digest).toString(16)
println "SHA-256/B64: " + digest.encodeBase64().toString()

println "\n****************************************\n"

/* Now do the same thing for SHA-512 */
md5Digest = MessageDigest.getInstance("SHA-512");
md5Digest.reset();
md5Digest.update(srcWord.getBytes());
digest = md5Digest.digest();
// println "src: " + srcWord
// println "new BigInteger(1,digest).toString(): " + new BigInteger(1,digest).toString()
println "SHA-512: " + new BigInteger(1,digest).toString(16)
println "SHA-412/B64: " + digest.encodeBase64().toString()

println "\n****************************************\n"