Friday, July 16, 2010

Clearcase: Create A Label with a script

I got tired of looking up how to create a label in the rational documents and rather then going through type explorer, I decided to write up a really quick script. Maybe others will find use in it. Either way if I lose it, it's here for the world to find. It just uses standard commands that are found in the rational cleartool manual.


print "What Vob?";
$vob = <>;
print "What Label?";
$label = <>;
chomp($vob);
chomp($label);
print `cleartool mklbtype -nc $label@\\$vob`;
$asdf = <>;
Now I tried to make it so my context menu would be able to call it, but for some reason I can't make it call my perl script, if anyone has any ideas, please let me know and I'll update.

Wednesday, July 14, 2010

Past and Present 7/14/2010

Well it's been a while, and I better pop back in and say hi. This summer I've been taking Signals and Systems (ECE 314), and am doing an Independent study working on gridlabd with Pacific Northwest National Labs.

I learned a few very important lessons this summer.
1. DON'T PUT SPACES IN YOUR FOLDER NAMES.
2. Focus on one task until completion, jumping from project to project only results in many failed attempts.
[UPDATE]:
3. Test out parts before making them unrecoverable. I made a setup, then used Household GOOP on it to try to seal it, and when I went to use it, it didn't work, and the Goop rendered it useless.

School
I got with a classmate and am looking into working with Cosmiac on my senior project.  I'm not 100% sure what every detail will entail, but looks like a fun challenge, however it sounds like there might be more java involved then I really would like. Of course I'll keep you updated.

Car
Right now I'm trying to finish adding a usb power plug as well as an audio jack to my car, cleaned up finally, and I'm refusing to work on any other projects until it's done. Future plans include reading the CAN bus messages so when I press next on my steering wheel it will change songs on my iPod touch. I do plan on doing a writeup on how I put it all together.

Arcade
I actually finally got a chance to replace my fluorescent light (for the second time), this time I didn't drop the light at walmart before testing it out, now it finally works. Now if only I can finish my other projects and get in here and get it done, I would really like to get an O-Scope, and Logic Analyzer so I can do more testing but anything is possible.

Tuesday, May 18, 2010

Motivation

It's been a while, but then again, it's been a rough semester, I've managed to down 15 credits while working between 44 - 48 hours a week at work, not to mention spending time with my wife. 

So today's topic is motivation, what motivates you? In an attempt to keep each other motivated, one of my buddies and I are going to keep each other accountable. We've decided that for every 72 "failed" attempts at something, we are going to donate $1 per attempt to something we both decide on.

First let me define failed attempt. A failed attempt occurs when we say we're going to try to do something, but either don't even bother to get around to it, or we start but never really finish, I.E. start wiring up the circuit board, but then never finish the circuit.

Obviously we are trying to push past the passive barriers, now there are the occasional active barriers, such as not having parts, or the knowledge to perform a specific task, but we want that to have a minimal impact on such thoughts and ideas.

The way I see it, I have roughly 55-60 years in me left max (who knows I might get lucky and make it longer), and frankly I don't want to waste it. If all I do is watch TV all the time, or sit around and do nothing, what benefit does that give me, I'm simply taking up space, and not accomplishing anything, sure I work, and get stuff done that other people want me to, but I want to accomplish things that I want to.


I'm still learning what keeps me motivated, and how to ramp it up. As I learn what it takes me to do it, I'll stop in and keep updating.

Saturday, February 20, 2010

Pic 16F913 Quick Reference Guide

I wrote a short Quick Reference guide for how I have been programming the Pic 16F913.
Check out the HOW TO here: Programming_The_Pic_16F913_QRG

Good luck and let me know how it goes.

Its should be pretty straight forward.

Wednesday, February 17, 2010

Emulator

Well I finally came up with a good project for my ECE 335 course,

I attempting to write an emulator for the Power PC 403 for the Microprocessors course ECE344, I was wishing the whole semester for the opportunity to have something to test on at home, so when I came into school to test on the actual boards I'd be able to know that my program would work as expected.

In keeping with ECE 335 I'm sure I'll write some "terrible" code without realizing it, at which point, I'll just go ahead and optimize it, this will have to be a really quick deal so initially I'm only going to support the addi command. Once that is up and working I'll reassess what is going to happen next.

The link to the project is here if you're interested in helping let me know.


Thursday, February 11, 2010

Counting

This is the VHDL for the counting algorithm from ECE 528 today.



Monday, February 8, 2010

Finding Bugs

So I was working with a buddy on a program he wrote in Assembly, he had nearly the whole thing complete, and before he's able to actually test it, he did one of the smartest things I can recommend if you can't actually test the code until some future date.

HE ASKED SOMEONE ELSE TO TAKE A SECOND LOOK.

Better then just asking someone else, asking someone else who has a better, even if it's slightly, knowledge of the subject, can see things that you might not see.

Now sure sitting in front of the computer with the board next to you and assembling, loading, running, then going back to debug can gain you some invaluable troubleshooting experience. I won't lie to you, learning how to attack a problem can be invaluable, but one of the biggest key's to do that follows.....

The key for the second person here, is to guide the programmer to the problem spot without giving away the answer if they know it.

Why so? By forcing the person to look at the code EXPECTING a problem they're going to start analyzing each and every line, Is it the right command here, did I set that up right, did I move this pointer to the right spot. EVERY LITTLE DETAIL should get scrutinized by the programmer. And that is good, they'll learn TONS and begin to see the big picture here.

Once you code something up, re-read it, re-read it again, now compare it to your design.

Wait a second I snuck something in there didn't I?

It comes back to design huh. IF every piece of the code you wrote can be traced back to a design element you wrote, you can break the problem, if there is one into a tiny piece, and that's a huge factor when you're working with 1k+ lines of code in assembly.

It might not seem to make sense working with a 50 line piece of code, but if you can force the habit it will make you a better programmer. I promise!

Sunday, February 7, 2010

The PIC 16F913

So I bought some PIC 16F913's I was hoping I could just literally plug in the PIC to the PicKit 1 and just program, turns out it's not that simple, but aside from hooking a couple wires up, well frankly it's not that hard. I just wired up the appropriate VSS, VPP, VDD, and ICSP Clock and Data lines.

One thing that threw me off, is that the microchip site said that the PicKit 1 programs the P16F913, this isn't "entirely true" I was able to use ICSP. Since I can't get MPLAB to program via ICSP, I was able to using the PicKit 1 Classic program, found on microchips website.


Here were my steps:
  1. Hooking up the ICSP. I actually tried to do a "read" with the PicKit 1 Classic S/W, it recognized that it was a 913 AWESOME, this is really good news.
  2. Load up a program into MPLAB and compile, turns out I was able to use the exact same "hello world" code from my 16F684, so I just compiled and was ready for the next step.
  3. I then pointed to the hex file compiled by MPLAB, from within the PicKit 1 Classic program.
  4. I just hooked up the appropriate pins to the LEDs on the board to make sure i was able to turn the LED on and off, if the S/W was working as I expected.
There you have it, it wasn't nearly as hard as I expected it to be, now that I can use the PIC16F913, well frankly I am pumped, the only thing I would really like to do is have a socket plug that I can use to directly wire up a ICSP port, then I can really just use a ICSP plug on any device/board and I "think" I can actually use it.

Next up is maybe serial communications? We'll see the sky's the limit now.

Friday, January 22, 2010

Networked memory

I just read an interesting article about how slime mold generates networks as efficient as the Tokyo Subway system, the only downfall looks to be related to redundancy.
Slime Mold Subways

Which get's me thinking, now that memory is a dime a dozen, can we have networks of the same data, and depending on where you are in the platter for example rather then having to travel say all the way across the platter to get the information, you can just stay in the local vicinity?

So Suppose you have the same data being transferred back and forth in different memory regions so they are all matching. Your head is already in a particular location of the platter, now rather then having to say move the head all the way from where it is to a location nearly opposite the location you currently are, there is a networked memory piece just a few micrometer's next to, or after what you're looking at. Now the disk doesn't need to seek as long, which tends to be the more time consuming part of data access.

Let me know what you think or do you think I'm off my rocker?

Monday, January 11, 2010

Deleting Files

I was having problems with a particular file, one of my scripts accidentally produced a file named such that I couldn't delete it.
I found a great tip here: Forum Post

All I had to do was find the filename using dir /x /a

Once i found that a simple del filename got rid of it.

Saturday, January 9, 2010

Analog Inputs

I've been fighting since late last night trying to get analog inputs working on my PIC16F684.

I finally got somewhere this evening, oddly enough for some reason, in some regions of the pot it goes really quick then just a small bit over will slow it down drastically.

All my code does is initialize everything to setup RA0 as an analog input, then it turns on the ADC waits until it's done then toggles the LED and waits the amount of time in the combination of ADRESH and ADRESL, all I had to do was put ADRESH into the integer value I had, shift it 8 positions left, then or the ADRESL in, then pass it to my wait routine.

Outside of that it's finally working, the last hiccup I had was well frankly I forgot to turn it back on after trying turning it off as a troubleshooting measure. Of Course I'll continue to plug VERSION CONTROL, had I gotten this working and decided to play a little here and there to make it say be more sensitive, I may have done myself in by messing something up, now I have no fear of that.

I am posting the code on my SVN server, and one day would like to be able to make that public so everyone can get to it, but I suspect my ISP won't like me using a web server out of my house, so I'll for now plan to upload it to Google Docs.

Below you'll find the vid of the PIC Kit 1 in action with the LED's toggling quickly then as I rotate the pot it slows down.


Here's the code to do it, there may be some unneeded stuff, let me know if you see anything off!

For the sake of testing I uploaded this file to YouTube and am going to see what the difference in appearance is here!


Thursday, January 7, 2010

Opening Mailto in Gmail in XP

One of the first things I did when I bought my netbook was to download chrome. Now I haven't actually clicked a mailto link until today, and guess what happened? Internet explorer in all it's glory opened up. I didn't like that. One of the solutions I found was to look for URI.mailto or something to that effect in the file types menu of an explorer window and make some changes there, but well I didn't like that method much and I couldn't find what they were talking about in the first place.

I started searching for the term mailto in the registry, and I came upon this line right below.

HKEY_CLASSES_ROOT\mailto\shell\open\command

Unfortunately I deleted the original line so if anyone has it I would really like to know what it originally said, but none the less I have the line to insert if you want Chrome to open up gmail and insert the mail address!

This brings me to my next point ALWAYS BACKUP YOUR REGISTRY in case you muck something up.

I changed the key
to the below (change out onaclov for your username) and you should be set to go! Of course if you want to use another type of email client and/or browser you're going to have to change a few things. Basically all I'm doing is calling the chrome application, and passing the gmail address with mailto and URL %1 passed to it. The ideal way would be to call the default browser

"C:\Documents and Settings\onaclov\Local Settings\Application Data\Google\Chrome\Application\chrome.exe" --app=https://mail.google.com/mail?extsrc=mailto&url=%1

Additional Notes:
Oddly enough I found that if I go to IE and click options and then programs it only shows Outlook Express and Windows Live Mail which I initially thought was the culprit and in some ways it might have been, so I did a search for Windows Live Mail.

I found this:
As you can see it looks like mine has an entry for GMAIL, which of course is completely incorrect
as I was testing some things out trying to get it to work, if you add a Key there and name it whatever you name it, when you go to IE and Tool Options and Programs and Email you'll see those entries the problem is I have/had no idea what to put in there which lead me to the initial piece of the post finding mailto.

If I had the original mailto contents I "might" be able to remember what that was doing and possibly setup the entry on the left (HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\Gmail) to actually open whatever browser you want as well as whatever email client you want based on that location (rather then having to keep entering in the registry if you decide to change).

Well if you have any other items of note please let me know.

Good luck

Wednesday, January 6, 2010

Interrupts

In ECE 344 we learned about interrupts and how to use them, of course we were programming in assembly, so we had to setup our interrupt vector, then write some code at the appropriate offset.

That turned out to be pretty easy, but the problem is let's say we want to write some code in C and try to handle interrupts. This is a little tricky if you don't have all the information you need.

Well of course since I can't seem to think logically sometimes, I didn't look at any manuals and just headed over to stackoverflow.com, where I got some great answer's here: Interrupts

The simple answer was this:
void interrupt my_interrupt_handler (void) {
handle_interrupts_here();
}
I did some testing and once I had the right bit's turned on I just ended up in my interrupt routine with this (about 90% borrowed from here:Microchipc):
void interrupt isr(void)
{
if (T0IF)
{
TMR0=TMR0_SETTING;
T0IF=0;
RA5=1;
//code right here is executed every 800us
}

My newest project I'll be working on with this microcontroller is to find some way to create a simple serial interface which I can transmit and receive a piece of data. Since I can interrupt on a timed interval. I should be able to read data passed at an expected rate.

I'll keep you updated when I get more work done.

Sunday, January 3, 2010

SVN

So today I would like to go over the importance of version control.

Take for example I was working on a program, I made some changes and it was working. Now rather then checking in my file and version controlling it, I just started modifying it. About half ways through I realized I meant to re-save the file somewhere but instead overwrote the changes that I had originally working.

When you've gotten a particular program working at some point, if you're dedicated enough to stick to version control, you check it in, then keep working, now if you have made changes and wish to revert to a previous working state it's REALLY EASY. Now of course simple enough you can just save multiple copies of a file, and keep renaming it and everything else. If you use version control you really only "see" one file and you just keep checking it in.

I have SVN setup on my server, and am using Tortoise SVN for my window's machine, and am enthralled with it. When you do a checkout in SVN it ends up copying the checked out folder into your current directory. Now when you make changes it shows a different icon on the folders so you can visually see that it's needing to be committed. Now if you're working with multiple machines/people you will want to make sure you update before commiting.

Once you've committed changes you're set.

Good luck and let me know if you need any help setting up your very own SVN server.

Max RPM II

Well I finally got a few minutes to mess with my arcade after cleaning the garage a bit.

So far I have the lights on the coin op working, the flourescent light doesn't fully light, so I need to find out if it's the wattage or what. The monitor doesn't turn on at all, and the speakers just give a hum. I have to assume that the system isn't "booting". I found a site I can use to help me with questions here: Arcade Museum

I have 120V going to my monitor and have checked a few IC's on the Turbo Cheap Squeak.

In the hopes of using another computer monitor I tried hooking up the Horizontal sync to a regular CRT, and the monitor said the frequency wasn't correct. So at this point I'm assuming that it's a no go on that CRT.

I'll post updates as they come along. Have fun!

Thursday, December 31, 2009

Timed Shot Photos

So my original goal for this project was to take some pictures of the mountains at pre-determined times. I found that this might be useful in other cases as well, so I'm going to be building an enclosure next and allowing maybe a tripod screw mount.

S/W Requirements:
1. Set a period (eventually elsewhere, but for now in code)
2. Turn Camera on
3. Once camera's stabilized take a picture
4. Turn camera off.
5. Lather, Rinse, Repeat.


Here's some footage.

Tuesday, December 22, 2009

What is a web browser?

In commemoration of my 100th post, I decided to do a video post. Here I give a rough overview of what a web browser is. I'm sure it'll need more work, but hey it's a first and I just put it together with movie maker through windows.

The inspiration for this post was my mom, I was attempting to set her up with Google Voice, and when I was needing to get her to get on the internet she asked me "You mean click aol?". Unfortunately I suspect very strongly that my mom thinks that aol is the internet, and there are alot of people out there that think the same thing. Sit back relax, and hopefully I'm at least somewhat entertaining.



Once you've finished watching let's re-iterate what I'm trying to get across.
1. Web browser's are not the internet.
2. Web browser's are the vehicle that get's you to web pages.
3. You aren't stuck with only one web browser, you can try other ones.
4. Things you want to keep in mind are speed, real estate, following standards, usability, popups, and addon's.

Tuesday, December 15, 2009

Help Joe get an iPod touch

I posted a site joe.onaclovtech.com, hopefully I can get alot of people to donate a little, and we'll all get Joe an iPod touch.

Thanks anyone that helps out.

#joesipod

Monday, December 7, 2009

Clonezilla

Well I finally went about the task of imaging my hard drives.

I decided to use CloneZilla, as I read from lifehacker this would be best as well as a few light searches on the net seemed to refer alot to CloneZilla.

I ran into some problems, there is a USB helper that they recommend, that wouldn't boot my SD and/or my USB thumb drive.

I basically had to use Unetbootin, the nice thing is you can point to the .zip file you download from clonezilla's website and it treats it just like it's an image file and builds everything up for you on your drive.

Once I got that all working there were a couple more things I ran into. I'm assuming that my wifi wasn't going to work with this light "OS" so after a few tries I finally hooked into ethernet.

Once I got past that I found out that it was expecting a folder called partimag on the home directory, so I had to make that folder.

I also ran into problems when trying to specify my samba server, if I just pointed it to my ip address it seemed to have problems, so I actually pointed it to ip\folder, and that worked.

From there it was literally a cake walk.

Wednesday, December 2, 2009

Google Voice Ideas

I was logging into google voice again, and found myself in a familiar world. I send a text message, and when the person replies it's in my inbox AND my phone. The problem is, I have one of those crappy phones so I have to constantly be deleting messages because I run up to the limit.

Here's my thoughts, if you get a text message in Google Voice AND you're logged in, it gives the text message say 1 minute to sit in the inbox doing nothing, if you immediately respond INSIDE google voice, it doesn't bother sending it to your phone, additionally you could add a "send to phone" option for a text, then it will still send it to your phone in the event you're getting directions and you won't have internet access when you leave your computer.

Well there you are just one more idea.

Thursday, November 26, 2009

Troubleshooting

One of the biggest challenges in ECE 344 is troubleshooting on the system.

I mean walking through typing stp, then rrd when you want to read the registers.

In comes typical troubleshooting without a debugger, normally you stick some print statements in there and wait for the print fest to begin.

This bothered me because we can't really do this in our architecture very easy. The nice thing is that we learned about sub routines, and you can treat sub routines as functions if you do it right, so what did I do?

I wrote a sub routine that will print the register values at the time you branch and link, the main limitation, is that interrupts can change your register values once you've entered into the subroutine. This is where the mailbox architecture comes in, if you design your system so that the interrupts do as little as possible and leave everything as untouched as possible, you can then go into your print subroutine and it will print the register's last value.

There are probably plenty of other uses you can find for this routine, and maybe even better ways to use it, for example when you enter this subroutine it waits for a key press before you can exit. Once that happens you can return from your branch and link, this is great because now you don't just blow through your whole program before even really seeing anything.

This is untested code as I am unable to make it to the school until Monday at the earliest, but if you want to give it a try I'll link to it at the bottom.

Changes you'll want to make to allow this to integrate with your program is finding your location in memory you can stick the long ascii string I've built.

Additionally you'll need a 32 bit to ascii converting branch and link, which i haven't written, but we have written for our latest program. This will convert the actual register values to a printable value, as well as you'll need a push and pop routine at the beginning and end, with the pointer jumping by 40 each time, if you don't have this you'll have to find a way to get the data from the register's instead of memory as I'm doing.

As I have time I'll upload more files and a more complete solution but this is very far along and should only require small amounts of modification.

NOTE: As with any file you download from google documents, unfortunately just directly downloading it will have format issues. Copy and paste the contents to a new file and save as a .s file, otherwise you'll be chasing your tail trying to find problems that really don't exist.

Check out the code here: Print Function

Friday, November 20, 2009

Thoughts on OS's

So here are my thoughts on os's these days.

I just recently got my new HP netbook. It's a great little device, but here's my worry, it's not very powerful and it's running windows, My old laptop is running windows as well and is slowing to a crawl.

What are some common causes of slowed down computers?
From Computer Hope:
Hard disk drive is short on available disk space.
Several software programs have been installed/uninstalled leaving behind bad files and/or confusing the software.
Data Corruption.
Outdated drivers
Computer is overheating.
Corrupt OS.
Bad Hardware.


It would appear there are two common causes here.
1. The hardware capability is declining.
2. Operating System related errors.

Hold up before you start getting all upset and claiming that if the people who wrote the programs cleaned them up right then you wouldn't have these problems.

What I want to know is why these programs are becoming so integrated with the OS that the OS can't simply clean itself up?

I was watching the Google OS talk as well as reading a little on it. One of the things I noticed and it's becoming a bit of a theme across OS developer's now a day's.

Let's build OS's that are designed for specific hardware and really only market for that.

What I'd really rather see is OS's that when you load them up will look at all hardware connected and self configures itself to be the most optimal OS for that hardware. What this means is now instead of having 300 print drivers loaded into your system and 45 wireless network card configurations, the OS looks at what you have and decides what's best and get's rid of the rest. Typically true hardware to the system should have only those drivers loaded, no more, no less.

I know this sounds crazy and in some ways it is, but what happens next is the OS is also linked up with the web, so let's say you plug in a new hardware item a new sound card, a new stick of ram or something. Things might be a little hokey but with a basic set of drivers that will control (in a limited way) most hardware, you now tell the computer to rescan for system updates, at which point you can optionally load the new driver's for this new device onto your system, and again it re-configures itself to run as optimally as it can with this system.

What can this mean for boot up times? Well if the OS doesn't have to constantly be verifying what equipment you have and assume you just plain have it and go forward from there. If/When it runs into a hiccup such as it expected a stick of ram somewhere and didn't see it, it jumps to the degraded mode until you either update and "auto" re-configure the system or repair the problem.

I think if you can resolve hardware checks as well as re-design the bootup to start simultaneously kick off processes that will help considerably.

Once more, you won't have to constantly be pinging the devices (wasting power) just verifying that the components are there.

Tuesday, November 17, 2009

Syntax

Syntax doesn't require a whole lot of explaining. Mainly get a good source of information that you can understand, in this case we really only get a .pdf file with the reference manual so you really need to make the best of it.

In our "compiler" the system converts the assembly code that you wrote to a 32bit instruction.
This instruction can be analyzed by the student by breaking it down into opcode, from there that will tell you what kind of data can reside in the rest of the instruction.

One thing I'd like to do is write a syntax checker for the PPC 403 that we're using. This would be particularly helpful in writing code off site, and then making sure the syntax is right.

Once you can sucessfully "compile" then you're on to the testing, and possibly will return to this section.

Let me know what you think!!

Google Voice Screwups

This is a pretty hilarious site, they allow anyone to post google voice to text translations which many times turn out to be quite hilarious.

http://gvscrewups.blogspot.com/

Now here's my question some people post the "before" and after versions, is it possible to improve the translator's capabilities knowing this information?

Check it out and let me know what you think.

Wednesday, November 11, 2009

Google Voice

I just ran into another situation where Google can integrate their google voice application into, Google Maps!

I was searching for my doctor's office, it brought up an address and phone number, why not have a clickable link for those logged in that have GV, and they can click call this number and select which phone to ring, OR even text message address/directions to myself....

Just another little idea for the wide world of google voice

Concepts, the Leonardo of Programming

If you don't understand "what" you're trying to do, it's going to be very difficult to write code and/or tests for it.

Learning concepts can be difficult, some of the main things you need to think about "conceptually" is breaking any task down into 3 parts,
  1. Initialization
  2. Code that does the actual work (algorithm)
  3. Exiting
For initialization you can look most of the things up in the user's manual, once you know how to setup the actions you will be using, you can then begin to look at what you're actually wanting to do, which brings us to algorithms.

Algorithms are "how" you're going to accomplish the task you're attempting to complete. My favorite method is drawing it out in a flowchart design. But I have to "see" what I'm doing and that's one way of doing it, once you've managed to really nail this idea down, you can frequently just do it in your head, and reserve doing flow chart's for the more difficult designs that you really can't wrap your head around.

If you don't know your algorithm it's much like trying to write a paragraph about a subject that hasn't been given to you, you'll keep writing and rewriting your paragraph until you finally get the subject, but that doesn't seem very efficient now does it? Figure out your subject (or what you're trying to do) and THEN write the paragraph, much like figuring out your algorithm FIRST then code up the solution, this prevents large quantities of re-writing code.

Finally when you've finished your task, are there any "clean up tasks" that you need to complete? Do you need to return the register's to their original values? Do you need to clear out memory so that another operation doesn't accidentally use data you've shoved out there? Do you need to pop the stack? These are all things you need to answer when you've finished the task your algorithm is attempting to complete.

Tuesday, November 10, 2009

School Reports

What's wrong with School reports today?

Frequently we are told you need X number of pages, so you push and pull at your words to try to force as many as you can out, many times rather then a clear and concise report you end up sometimes obfuscating ( to be evasive, unclear, or confusing) things.

When will it become clear that writing shorter reports that convey the information required are better then long drawn out reports that are 90% bloat and 10% real information?

Looking at Needless words I started thinking about this, I don't know how many reports this semester alone I've written that are really just bloated with meaningless information, in a simple attempt to pass as a "useful" paper.

When will engineering students write reports as clear and concise as the work we will need to produce?

I have read requirements documents that are so indirect that it's a wonder how people can implement them, and in fact I was once told that if they didn't understand the requirements they were writing that well, they would write it more then once in a couple different ways, so as to give them an "out" when the software comes that they can say "this isn't what I meant" and force you to change it.

That's a tough paragraph to read. Re-Worded: If you don't understand the material you're writing about, make it so the people that are reading it can't understand it.

Start writing what you MEAN. Stop writing bloat into your reports. I'm going to give this a try on my next Microprocessors report, I'll let you know what kind of score I get.

No one likes bloat. Me least of all.

Sunday, November 8, 2009

Designing Learning

In today's day and age, is the current methodology of teaching the best approach?

Here's my hypothesis, Changing HOW we are taught can net greater results on a broader spectrum of students.

It's a well known fact that there are different types of learning
from: LD Pride
These Learning styles are, Auditory, Tactile, and Visual.
How can we improve each of these area's in today's classroom?

I believe that if a student doesn't "care" about what they're learning, it's like trying to force oil to mix with water, it doesn't work.

What we need is something that will be the go-between from the oil (the student) and the water (the material). One way to do this is by not stifling creativity, and in fact fostering it, the best engineers in my opinion are the ones who find the most creative solutions!

Point in case, I'm working on my microprocessors class. Right now we are learning how to handle interrupts, using timer's, buttons, led's and various other things. Individually these projects are dry and don't inspire creativity.

My solution suggests that the student attempts to create a game in one case. For example, Simon Say's, a great game, could be a pretty easy one to build, but in building that you learn a lot of things, here are many of them I can think of:
  1. LED Outputs
  2. Pointers
  3. Timer's
  4. Interrupts
  5. Button Presses
  6. LCD (maybe give the user a score?)
  7. Stack
  8. Algorithms
So I could manage to learn all those things and actually have fun doing it.

I am so far having a blast with the class because I can SEE the potential I'm given while learning this information, but many people see it using blinders, where they can only see what's directly ahead of them, and not see the potential, I believe that letting student's pick projects force them to learn how to design a project, work through the team building details, and the final implementation. I don't think this should be a one time project that is part of graduating, but shoot find a project that the student needs to complete that takes each piece, and as you learn, you can build more and more.

For example, let's say you're given a project as a freshman, some of the techniques to build this project may require math level x (doesn't have to be overly difficult), as you push through each semester you can learn more and then literally apply it to a project as you go along, so when you finish your degree you can say...Look I completed this project and it required knowledge and skills in all these area's.


How do you think learning should be implemented in today's day and age? And do you have any ideas for programming that may induce learning indirectly?

Thursday, November 5, 2009

Design and Programming..a Love affair

Let's take a look at design.

If you design your project well, looking at all possibilities up front without coding a single thing you can catch some problems up front that you may run into. One of those may cause messy or unneeded code! That's again the beauty of the artist they can choose whether they want to keep repainting the exact same thing or really go out there and paint something new!

What all can be designed?
For Microprocessors where you have a limited number of register's to use, defining a personal/project standard allows greater code re-use, as well as less code and easier to understand code.

If you define a register as the UART pointer from the beginning and make sure not to change it, you won't have to constantly be re-writing the code to setup a pointer. How many times does that have to happen? Well if everytime you have to drop into your interrupt service routine and determine whether it was a RX or TX bit that sent you running, that's 2 times for every "interrupt". I know it doesn't sound like alot of time, but when you run into a situation where your time is critical, 2 instructions can make that difference.

The short time that it takes to design your project, can multiply the rewards exponentially.

Deciding how you want to setup each module is part of design, would you rather setup the entire initialization in your main routine for each module, and let that handle everything OR modularize everything and put ALL uart related items in the UART section.

This brings up the good point of .include files, by putting all your setup into a .include file, you can now start using that file in new projects and rather then constantly having to re-write a subroutine you just write it once, and any improvements you make are better for all programs, (provided they are in fact better). Writing this I already see a flaw in the design of the program we made in our latest lab!

Guess what? Looking back on it, I realize we have a file called variables that contains the ".set" items that point to the UART and all other associated names, this means that every file that I try to .include the UART routine into has to have the entire variables file included, Guess what we did that with a "register setup file too!!!".

How can this be improved?

I can put all registers that the UART EXPECTS to use in it's .include file as part of the initialization, and make sure that any time I use that file those particular register's are in that state before the subroutine is used, this can occur by pushing the register settings to the stack before any updates to them, then reverting them back, will allow the subroutine to keep using them as expected.

If there is one thing I'll stress, Try to make your code as uncomplicated and easy to understand for yourself and others, Implementing a design can aide in that.

Let me know how you design!!

How to Microprocessor

Recently we were given a lab in microprocessors that requires us to handle alot of interrupts somewhat simultaneously.

For someone that walks into this lab unprepared it can look like a lot, but for some that's a challenge and for other's that's an active barrier, rather then choosing to be prepared for it, you just walk through and hope for the best.

Reading manuals on the syntax or basic tools to use while programming the microprocessor can be boring, and often time's it's easy to forget about what you just learned.

How do you approach a problem like our latest lab (or any other programming project for that matter)

1. Design --You need to know the "picture" you want to paint with your code.
2. Concepts -- You need to know "how" painting that picture can be accomplished
3. Syntax -- You need to know how to "paint" that picture.
4. Testing -- You need to know how to tell if the picture "looks" like you want it to?

I think those are the 4 most important concepts of programming that really need to be understood.

I'm going to post a series of posts about these particular topics!!

Defining Moment

What's your defining moment?

At what point in your life did you decide, enough talking about doing something and literally start doing it?

What pushed you over that edge?

I feel like many times I talk and talk about doing something but never end up really doing it, which is why in some deep recesses of my heart and mind I started this blog. I got tired of talking about all the stuff I "want to do" and started doing them. Don't get me wrong, I've got along way to go before I feel like I've had that "defining moment".

I've done a few things in my life and when I talk about things I'd like/am doing, I suprise other classmates, they're amazed that I do some of the things I do, but then again I talk to classmates and I'm amazed at the things they're doing, it's because when you get into that "routine" of it's just what you do, you forget how special those qualities are.

Keep pushing yourself to your limits and it'll payoff, everyone's defining moment is different, one man's trash is another's gold. Just because the things you do don't sound interesting to you anymore, or 'special', don't forget that it's someone else's gold.

If you have the opportunity to really connect with people and you can mentor someone else interested in what you're doing, do it by all means, you might be that person that pushes someone just that much closer to a defining moment.

Sometimes I think that my Mountain talks with Phil helped push me over that edge, when I came upon the epiphany of the Guitar Hero Challenge, That's when I realized I can do so much more when I push myself to that limit, and I'm fully capable of it too, I just have to realize that excuses are what sometimes consumes us. Being able to understand the difference between an active and passive barriar and how to hurdle it is the biggest part in learning who you are.

Good luck finding that defining moment, and I encourage you to keep pushing on towards it, you may one day look back and realize that your moment occurred and you didn't even notice it.

Monday, November 2, 2009

Google Calendar

Short "rant/post" today about GCal

Google really needs to add a feature you can say that the weekend after date x is the weekend event x occurs.

For example my wife and I went to volleyball on our first date, it was the 7th, so I would be interested in setting an event reminder that will remind me to look up the schedule on the weekend before (or after) the 7th and see if there are any games we can attend.

I think it would be nice to allow not date specific (or day specific) recurring events, but rather recurring events that can be determined easily based on the calendar date of that year....

Just and idea. Let me know what other features Google Calendar should add to their Gcal

Monday, October 26, 2009

Frugal Programming

I was reading the article on msn here
It goes on to talk about wants vs needs, if you want something now what are the chances you'll want it in a year.
I was suddenly struck with the thought, what about "frugal programming" what i mean is, how do you decide what you NEED programs for and what you WANT programs for.

Lets break it down, sometimes I'm doing something repetitive and think I need a program, but in order to write this program it'll take say 4 hours to write and 2 hours to run, but just doing the actual work would take 4 hours.

Which is more valuable? Being able to complete the repetitive task in an efficient manner makes it more of a benefit. In addition getting more practice will definitely make you a better employee.

The problem is you look at it as a "right now" situation. The fact is you need to finish this task as quickly as possible, and you just get something working for this situation and forget about it.

What often happens is you write a program (such as the one above) for a one time task, but you never label it and stick it somewhere that you KNOW you'll find it in the future. Now that time you spent was more in the direction of wasted. Because if the task comes up again you'll either have to spend an hour searching for the program, or you'll have to spend the time re-writing it.

So what I'm trying to say is being a frugal programmer is being a programmer who can reuse what they do in as many way's as possible as to get as much value out of the "item" as you can.

If you don't have some sort of organization you'll forever be repeating work and doings over and over again until you finally sit down and say I'M GOING TO GET ORGANIZED and literally do it.

So far I've been working on a form of organization, it's tough though, because I might write one thing in C, one in perl and another in visual basic, but I have no means of correlating what they are to it. All my programs are stuffed in a folder called programs, and sorted by language.

I just recently came up with a plan (literally about 12 seconds ago), if I put a list of keywords that this particular program could be used for, or describing it in the header, I can write a script that will find all keywords and programs, so if I do a search I might be able to find things quicker.


Until I literally implement it, let me know how you organize your information/programs/data.

First Hosting

Where was your first webpage ever hosted?

With the news that Yahoo has finally killed off GEOCITIES, I immediately recalled 8th grade and sitting in front of the old macintosh's in the library at school using the blink tag and animated gifs.

I still use angelfire, but that's for the time being.

Let me know what you use(ed), and your best gif!!

Wednesday, October 21, 2009

Arcade Challenge: Max RPM Pt I

So I was going to garage sales last saturday and I picked up this beauty.

Its called Max RPM, by Bally Midway, it appears to have been released in 1986.

What I was told by the previous owner is that he received it as part of payment of a debt from someone. He was told it worked, and it turns out it didn't work.

I decided this would be my "car" Man Project. You know how guys have that car or woodworking project in the garage to work on when they need some time alone, this will be mine.

The Arcade came with the schematics needed to get all the wires hooked up right and working.

First I powered it up just to see if it worked, the screen powered up but no video, so I needed to investigate.

When I opened it up I found a few things.




This board wasn't hooked up whatsoever and it looked important.






When I looked around a bit I found this mess, looks like someone cut off the connector. It's ok I have the schematics, I decided that rather then wait around for a connector (Ok, too impatient because I thought this might be the only problem) I soldered them on to the male pins of the board above.

Well I have power going to the boards and I can even hear feedback on the speakers.

Next I wanted to tackle the lights in the front, I really like the $.25 lights because they just remind me of playing in the arcade when I was growing up, once i got power going from the above work, I measured and it looked like there was 14V across the bulbs, thinking that most cars were similar I found some car light bulbs that looked pretty close and plugged them in and Voila we were in business.

So what it looks like I have left for this project is outlined below:
  1. Coin return has cut wires
  2. Credit button has cut wires
  3. Florescent tube doesn't appear to be operational
  4. CRT doesn't display anything or appear to power up.


I also found some tokens in there as well as the key and lock to the back of the unit, the guy i bought it from lost the key to the front so I had to remove it from the inside, I can get it replaced when I finish up, but no sense in doing it until I'm ready.



Total Costs involved:
Purchased for....$10.00
Fuses.............$02.50
-------------------------
$12.50

I'll keep updating costs and detailing what I find out as I go along, keep following as I finish this project.

If you know anyone who has an Arcade that doesn't work that would like to get rid of it, maybe I'll be able to feature it here!

Thursday, October 15, 2009

Google Contacts

How can google make their contact manager more useful for their users (especially Google Voice users)? I have some ideas. Here they go:
  1. Shareable groups (I.E. business and spam numbers for example)
  2. Lookup of your number to see who has your number in their contact list.
  3. Blockability of your number from any and all contacts in Google.
  4. For Phone Type it should be labeled Landline and Mobile.
  5. If you want to list the Attributes/keywords of a number allow that, (kinda already the "groups thing"
  6. Reverse Phone number lookup across the board, you know google has all that data (most likely) already, why not make it easier. I don't mind a couple ads while I'm trying to find out who just called me.

Let me know what you think. Do you have any better ideas for Google to use for their contacts manager?

Thursday, October 8, 2009

Programming Club

So I read a comment on Jeff Atwoods blog someone made that said
First rule of programming is you DO NOT TALK ABOUT PROGRAMMING.

I got to thinking sometimes working quick on your feet can help you improve your skills
so I looked up the "rules of fight club" which I found here: Rules of Fight Club

So I'm thinking heck why not start a "programming club", you come in and program against one other person. So I'm rewriting the rules for programming club here they are:

1st rule: You do not talk about programming club.
2nd rule: You DO NOT talk about programming club.
3rd rule: If someone says "I can't solve it" or passes out, the match is over.
4th rule: Only two people code at a time.
5th rule: Only one match at a time.
6th rule: No books, No internet.
7th rule: Matches will go on as long as they have to
8th rule: If this is your first night at Programming Club, you HAVE to program.

So the question is Who's in? I'm in the Albuquerque NewMexico area, lets get this started.

Go to my Contact Me Page and lets get started! Contact Me

Coding Frustration

First, the reason I posted this is because I can't actually comment on the post by Jeff Atwood here:
Coding Horror

What I would like to comment on as well is finding your bugs, or not even so much as bugs as problems in your pseudocode. I'll be the first to admit that more often then not I would rather sit down with the idea in my head and just code it up, and to be honest at this point in my programming career I have been able to do that quite easily. The problem comes when you start hitting harder and harder blocks of code that you need to build and generate.

I know there's been a few times I've been banging my head on a wall trying to get a particular piece of code to work. When I finally have "given up" and go to another engineer to explain the problem, MID SENTENCE I stop and say "wow I'm retarded" followed by, there is the problem, and most of the time the other engineer didn't even get a chance to say something.

What does that tell you? Recall that sometimes learning things requires more then once sense? I have found that occasionally hearing the pseudo code that I've written can often times improve my understanding of the problem I'm trying to solve, or even the implementation I'm using to solve it.

In fact, sometimes even attempting to blog about the problem brings about different ways of looking at the problem, take a look at my problem where I wanted to grab filenames from selected files!

Windows Selected File Names pt I Posted: Thursday May 28th
Here my solution was to take any particular selected file and simply append it to the clipboard. The problem with this one is it ran the script the same number of times that there were files, this isn't a very efficient way to solve this.


Windows Selected File Names pt II Posted: June 8th
Here my solution required a "copy" to the clipboard, then right clicking on one file and running the script. I still believe there are too many steps, but it's more efficient (I suppose for smaller files but larger sets) to simply copy the file to the clipboard then using the clipboard contents extract the filenames from the path.


Windows Selected File Names pt III
Someday I would like to have a pt III that shows how to use the "currently selected items" that I KNOW has to exist in windows and simply right click and that will determine the filenames, in my opinion that will be the best way to do it.


I had been mulling part 1 over for a while, and finally when I got a working solution, I wrote it up, and not 11 days later I managed to find another (and better IMHO) solution and get it working.

Give it a try next time youre having problems debugging or finding a good algorithm, use another sense.

Let me know how it works out!

Wednesday, October 7, 2009

Microprocessors 10/1/09 -> 10/7/2009

Here are the in class examples that we've covered in class since the 28th

Revised Blink LED's

Branch And Link

Fibonacci using Stacks

Good luck and let me know if you have any questions!

Tuesday, September 29, 2009

Microprocessors 9-28-09

In class today we reviewed the LED problem from last class, then we moved on to rs232 programming.
The updated and working LED program Dr. Pollard wrote is located here: the only difference is nop's

The link to the in class exercise is here:

Basically what we reviewed was receiving data in the RX FIFO, as well as spitting that data back out in the TX FIFO

Friday, September 25, 2009

Microprocessors 9-24-2009

I've got the in class posted here:

Things to remember:
a 1 written to the offset of 4 to the memory location of the LED's tells the DDR it's in "input mode" a 0 written tells it its in output mode.

Writing to the DREG will turn the LED's On or Off once you put the register in output mode.

Note: the above program wasn't working in class, I'll be posting an updated version tonight that works (somewhat different then the version we did in class)

Here is the updated file that works, here:

One thing to note is that you'll want to copy and paste the contents of these files into a new file, I had issues getting it to compile until I just copied over.

DDR means Data Direction Register.
DREG means Data Register.

Sunday, September 20, 2009

Microprocessors 9-17-2009

The ECE 344 Microprocessors in class examples will be posted here:
The example below takes a list of 1000 numbers generated from a random number generator from 0-10,000, then in groups of 0-999, 1000,-1999, 2000....



# in class 9_17
# work on comparison and branch commands
.org 0x100
# clear out registers
li r1, 0
li r2, 0
li r3, 0
li r4, 0
li r5, 0
li r6, 0
li r7, 0
li r8, 0
li r9, 0
li r10, 0
li r11, 0x200
li r12, 1000
mtctr r12
loop: lhz r13, 0(r11)
cmpi 3, 0, r13, 999 # P303 for cmpi
bt 13, chk2 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r1, r1, 1
b nextv
chk2: cmpi 3, 0, r13, 1999
bt 13, chk3 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r2, r2, 1
b nextv
chk3: cmpi 3, 0, r13, 2999
bt 13, chk4 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r3, r3, 1
b nextv
chk4: cmpi 3, 0, r13, 3999
bt 13, chk5 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r4, r4, 1
b nextv
chk5: cmpi 3, 0, r13, 4999
bt 13, chk6 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r5, r5, 1
b nextv
chk6: cmpi 3, 0, r13, 5999
bt 13, chk7 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r6, r6, 1
b nextv
chk7: cmpi 3, 0, r13, 6999
bt 13, chk8 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r7, r7, 1
b nextv
chk8: cmpi 3, 0, r13, 7999
bt 13, chk9 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r8, r8, 1
b nextv
chk9: cmpi 3, 0, r13, 8999
bt 13, chk10 # bit 12 is less then, 13 is greater then, bit 14 is equal, 15 summary overflow
addi r9, r9, 1
b nextv
chk10: addi r10, r10, 1
b nextv

nextv: addi r11, 0x2
bdnz loop
nop
here: b here



Oddly enough, the spacing on the blog doesn't take so all the lines are left aligned, sorry.

Wednesday, September 16, 2009

Speeding things up

When designing a program (in this case Visual Basic) you typically want to think of speed for the end user. What can and does end up happening is the programmer trys to test everything to make sure it's valid before giving it to the user.

For example, let's say you want to add a list of files to a filebox, that down the line the user will be using to open the files and use. There are a couple of things to think about here, we can load the files in the filebox and just let the user have at them, this can pose a potential problem if the file doesn't exist when you try to open it, rather then check each file as you add it to the file box, and make sure it exists first. You can do the check on each file as you attempt to open it, this way if the user only ends up using 5 files out of the entire box for this duration you only check to see that 5 files exist, rather then say the 100 other ones that they didn't use.

Another thing to do is let the user attempt to do certain actions if the action succeeds then continue on your way, but if the action fails rather then posting an error and stopping the program essentially, you just notify the user hey that action didn't work but here is what we're doing to recover from it, this thought alone can save you boatloads of time as well, rather then having to check each corner case, allow the user/program to do something that might cause an error, and simply know how to recover.

Aside from optimizing your code to reduce the number of checks how are you speeding things up for the end user?

Wednesday, September 9, 2009

IT lockdown

IT lockdown at school got you down?

Check out the below link
http://portableapps.com/

I'm using notepad++ rather then notepad and vim!!!

Also I installed Firefox, winmerge and putty.

So why the collection of files?

Working out of my pendrive and compiling and doing other work is rather slow and doesn't work well in these labs.

Using WinMerge makes sure that and changes I make to the local copy can be verified and merged into the ones on my pen drive (So what I like to keep my old files)

Using Notepad++ is just nicer then using regular old notepad, and well you cant actually install notepad++ on the local machines so this gets around it.

Of course firefox, because I'm not an IE fan at all

and putty incase I have my server at home on and i want to SSH into it (not sure if SSH is blocked on these machines yet.

I can't even us the windows key and R to run the calculator... it just says that that has been locked down, want to know what day it will be on the 24th of december, no such luck looking at the calendar is locked down as well....terrible!!!

I'll update this post as I come up with more "workarounds" for this lab,

Friday, September 4, 2009

Alien Language

Alien Language Problem from CodeJam 2009, I solved this one pretty quickly but ran out of time on the other two (time meaning, I wanted to sleep since I work 36ish hours a week and go to school 11 credits)

If you don't want to see the solution (in perl) don't look at my code, but here it is I'll explain it below.

Quick overview of the problem:
The first line of input contains 3 integers, L, D and N separated by a space. D lines follow, each containing one word of length L. These are the words that are known to exist in the alien language. N test cases then follow, each on its own line and each consisting of a pattern as described above. You may assume that all known words provided are unique.
My solution:

while (chomp($read_line = <>))
{
@settings = split(/\s/, $read_line);
for ($i = 0; $i < $settings[1]; $i++)
{
chomp($item = <>);
push(@items, $item);
}
for ($i = 0; $i < $settings[2]; $i++)
{
chomp($testCase = <>);
$counter = 0;
foreach $word (@items)
{
$testCase =~ s/\(/\[/g;
$testCase =~ s/\)/\]/g;
if ($word =~ m/$testCase/i)
{
$counter++;
}
}
$caseNumber = $i + 1;
print "Case #$caseNumber: $counter\n";
}
}

Basically we grab the first line, and look for the 3 numbers, grab the second one to determine the number of lines we drop down for our test cases, then the 3rd number to grab the actual tests, then we just make it a regular expression, worked pretty quick, I know at least on the large dataset I had over 3:41 remaining, (maybe more) from when I downloaded it, to when I completed the upload. Worked pretty quick

Wednesday, September 2, 2009

Google Books

So I was attempting to find alternate resources rather then spend $170 on a book this semester I tried using the internet. After doing a little searching I found this book:
Which led me to finding a particular example of a site using javascript to generate a little table of books, after looking at it, I can simply use that java scripting to generate the link to books, I decided to try the book we're using in class and what do you know, there is a limited preview here:
That's kinda neat, so basically a guy could write a script that grabs all the isbns from a particular csv file and format a page that looks something like this.
Test Page

Take a look at the source and see what you can do with it.

Source Pulled from this site: Google Example Dynamic Links

Tuesday, September 1, 2009

ECE 321 Electronics

Unfortunately I am not currently posting notes on this subject as it is so widely posted across the internet, but the book we are using is below:

Analysis and Design of Digital Integrated Circuits

ECE 344: Microprocessors

Microprocessors 9/17
The example below takes a list of 1000 numbers generated from a random number generator from 0-10,000, then in groups of 0-999, 1000,-1999, 2000....
Microprocessors 9/24
Things to remember:
a 1 written to the offset of 4 to the memory location of the LED's tells the DDR it's in "input mode" a 0 written tells it its in output mode.
Microprocessors 9/28
In class today we reviewed the LED problem from last class, then we moved on to rs232 programming.
Microprocessors 10/1-10/7
Here are the in class examples that we've covered in class since the 28th
How to Microprocessor
For someone that walks into this lab unprepared it can look like a lot, but for some that's a challenge and for other's that's an active barrier, rather then choosing to be prepared for it, you just walk through and hope for the best.
Design and Programming..a Love affair
If you design your project well, looking at all possibilities up front without coding a single thing you can catch some problems up front that you may run into. One of those may cause messy or unneeded code! That's again the beauty of the artist they can choose whether they want to keep repainting the exact same thing or really go out there and paint something new!
Concepts, the Leonardo of Programming
If you don't understand "what" you're trying to do, it's going to be very difficult to write code and/or tests for it.
Syntax
Syntax doesn't require a whole lot of explaining. Mainly get a good source of information that you can understand
Troubleshooting
In comes typical troubleshooting without a debugger, normally you stick some print statements in there and wait for the print fest to begin.

Sunday, August 23, 2009

Mountain Talks: Guitar Hero

My wife and a friend of mine civis_smith go hiking as many Saturdays as we can manage to stay motivated enough to do. While we hike my wife listens to music while we chat any and all subjects. One subject that comes up time and again is basically how can we stay motivated.

We constantly "claim" we LOVE to do a particular thing, but time and again we find that we manage to avoid that area not because we want to, but more out of pure laziness. It's alot easier to sit down and watch tv, or play guitar hero.

While we were talking about that I began to say some words that have come to haunt me, why is it I can play the EXACT same song on Guitar Hero OVER and OVER trying to become "perfect" at it, yet while studying for a class I do a problem, get it finished (right or wrong doesn't matter at this point) and I'm willing to say, "I did it once that's all I need to do", but why doesn't that hold true for Guitar Hero, I played song x once, that is all I need to do, but I don't I try and try to succeed more and more. I mean I can get a perfect on Guitar Hero and even at that point, rather then saying ok NOW I've managed to do it perfect, I say hmm...I wonder if I can do it 2 times, or heck, why not keep trying to do it until I get it perfect EVERY time.

Now Mr. Smith and I have begun to use Guitar Hero as a constant reminder to do what we love, and not to just stop after doing something once, but to keep doing it over and over until we can do it perfect, and if we've managed to do it perfect, shoot go for perfect EVERY time.

So my goal for this semester is not to submit to this laziness, but rather then thinking about things as "passive" and "active" barriers to what I want to do, I'm going to be proactive about everything, no more sitting around and saying ahhh I need to relax, fine I can relax but rather then relax doing something I many times have come to loathe, I will "relax" doing something I'm passionate about.

Let me know what keeps you out of ruts, and what keeps you reaching for your passion and never giving up, or even what your stumbling blocks are.

Tuesday, August 18, 2009

Alarm Clock

I'm not sure how many people even use digital clocks in their room at night anymore to wake them up in the morning, with the advent of the alarm on the cell phone, but here goes, my wife has a digital alarm clock, and I can't stand the brightness at night.

I was thinking that it would be nice to be able to setup the alarm to shut off the display from time x to time y, with a button that you can hit to see the time (turns on the display), but basically the alarm would light up about 10 minutes before you have to get up, and then you will know what time it is,

Additionally, really do we need to know what time it is during the hours we're not at home? why not have the clock setup to shutdown or whatever until the time you get home, heck why not all appliances that can do it (obviously some like the fridge wouldn't work so well), but just have clocks that sync with network time (or something like that) and never have to set a clock again, and never have to see a clock at night again.

Shoot why not add wake on lan to all of them, then setup a website that will send a message to your clock, to turn on and then sound the alarm, there are probably tons of bad reasons why not to do this but ahhh whatever, anyways then if the lan is dead, then the clock just turns on (still keeps it's own time) and the last alarm set would be the new alarm..

Saturday, August 15, 2009

New Icon/Image

I created an image so I can point to it, so when someone saves my class search website to their home screen they'll see an icon rather then just a picture of the page, I use the idea from Scott Hanselman's blog
Here is my icon, I'm starting my business slowly, but hey who knows:




Let me know what you think of it, I just kinda threw it together kinda quickly.
If you have any ideas or want to send some submissions, send them to onaclov2000 at gmail dot com.

Thanks for checking it out, I'll post a few more if I think of any.

Friday, August 14, 2009

Mobility

With todays constant traveling as well as the number of computers the average developer/computer user has, I'm supprised we haven't found a better way to integrate multiple computers as one.

In comes Cloud Computing, where your software is all located in the cloud, that's fine and great but we're still in the old age of working on one computer at a time. Let's say you have a Desktop computer at home, a laptop computer, and a computer at work, now if all these computers can start working in unison, we can do things like tell the laptop to broadcast it's location to your desktop, and if your laptop leaves where the desktop is, have it ask you if you'd like to continue working on what you were, or simply allow that laptop to be an "extension" of your current computer desktop, and literally DRAG your program that you're currently using onto that desktop, now you already have your environment open running and no more "save, shutdown, open wait" business.

Since all the data is stored in the cloud (and I'll assume autosaving is occuring), simply treating each computer as an extension of another we can seamlessly move what we're working on from one computer to another.

So right now linux has the neat function of "multiple desktops" why not setup each desktop as a vnc or something connection, so if we say "send to desktop x" it literally moves the program off your computer (passes off the processing) and into the next desktop (aka computer), now you can access each desktop from each computer, and move from device to device.

Why would we want this, lets say I'm deep into a project and want to continue as I'm on my way to work (say I use the bus), so I drag the program to the new desktop and walk away, I could maybe have things setup to shut down (obviously completely customizable), now I'm on my way to work and keep working on the project, I get to work and transfer directly to my desktop and continue as I finish, now I don't have to worry about closing the program and keeping on re-opening (waiting for programs to load).

What would be interesting if is if processors would continue processing what they are able to, but search for other processors (not on their board), once they find one, they communicate and setup shared processing (heck why waste cycles), now that it's sharing the processing, moving a program from one desktop should be nothing to do.

Wednesday, August 12, 2009

GV FAQ

I recently had a conversation with a couple people at various times asking me similar questions, so here are some of the common questions and answers, let me know if you have any questions, I'll gladly post my answers.
I had my sister txt me at my GV number and it came up some
wild number, with her number in the txt message itself. So....its like
I get a message from 405 xxx xxxx and I have no idea who it is. I named
it "google" just to see, and had my other sister txt me and it was a
different (but very similar) number. Is that how it works? I'm
guessing it goes through google, and google is actually the one txting
me correct? If so, how do you know who is txting you? There is no way
I am remembering everyones numbers.
So here is the story, basically, the text message goes to google, then
Google checks to see if the number is a contact, if so it will stick
their name in the text otherwise they stick the number in the message, then send you the contents of the text message.
Unfortunately that appears to be the only way that it works as of this
point, so basically expect to get some crazy number, but it'll have the
person's name or number (depending on if they are a contact yet or not),
now when you respond, you simply respond to that number, (just by
hitting reply), once you've done that, I imagine google parses the
initial portion (containing name or number) and sends them a text
message from your google number (oddly enough)

So basically if you have their number in google contacts you'll know
who's contacting you, fortunately I was so worried about losing my phone
and contacts that I had already had my google contacts updated by the
time this came along, now apparently there is a way to upload the phone
book to google contacts (via CSV), and that being the case you can
export your phone's contacts via CSV, the only toughie, is converting
one to the other,You might be able to convert using perl or some such script and then all you have to do is upload it to google, and you're golden.

The other odd thing is, I haven't told anyone else this new number, and
I've been txting all kinds of people and no one has really said
anything...like "who is this" when they get my txt. As far as I know,
they don't see anything different - just like its txting from my regular
number. And on the google voice page there are only the conversations
ive had with you, and when I had my sisters txt me. I don't think that
you are in my contact list, and when you txt me it comes up as the new
number I put in your phone?

It seems it treats google voice members differently? So it does not
give me a random number with you, even though you are not in my
contacts.
From the looks of things, google voice customers texting to other
customers will see the google voice number come across, as far as
texting other people, unless you text them "through" your google voice
number, you are still literally using your number, it doesn't
automatically take your texts when you send them and send them through
GV.
The problem with "regular" phones, is if you want to call/text
someone through Google voice, using your phone (and not replying to a
text), you will have to call your google number (not sure how yet, I'll
have to look it up) then from there tell it who to call, so it's kinda a
pain unless you have a smart phone and can use an app, I.E. if you have
your ipod touch setup (jailbroken not that you would do that), you might be able to make that work, or Android and Blackberry already have apps in place.

What I've "been" doing is I'll go to the site and click call next to a
contact (or you can type in a number) then tell it which phone to ring,
then your phone will ring and then you will be connected with the
outgoing call to the number you wanted to call.

So what does that mean?

Basically if you don't have a smart phone, calling and texting (from
your phone) is a PIA, (except texts where you have already received one
on your phone), from the web interface it's pretty slick.

Hmmm, it seems like most of this google voice thing is a pain in the ass
- and I don't really see where the benefit is. But its fun enough to
play around with though and txt people through the interwebs and they
won't know who it is.
So what is the benefit of a Google Voice number?

  1. One phone number that you keep and you don't have to worry about "transferring" from carrier to carrier.

  2. Central number that can call any/all of your phones, much like calling a 1-800 number to get ahold of a company and then they route you through the system to the proper phone, you now have this ability, nice if you have co-workers, friends and family constantly calling you can route them, or setup call schedules for different phones (see call schedule post).

  3. I can't stand texting from my phone, but frequently have an internet connection so I can use the much nicer keyboard from my iPod or even my desktop to handle this cumbersome task (for my phone anyways)

  4. You get to pick your number, basically if you can think of one, try searching for it, and you can have it if you find it, most carriers just give you a choice of a couple numbers (terrible).

  5. Call Schedules.

  6. Voicemail transcription, It still needs work, but if it transcribes your messages close enough you can get a gist of it, and know if you really want to listen to that 2.5 minute VM, or have a good enough idea after a few words what it's all about.

  7. LOGS! I occasionally like to have record of conversations with people GV does this multiple ways, one you can record conversations (haven't tried this yet), SMS logs, and Voicemail logs, no more having to store your max text messages and deleting only one when you need to receive a new text, once you have your text at your phone, it's already logged in GV, also no more WAITING for your current carrier's VM system to give you all kinds of useless info wasting your time and more importantly your minutes.

  8. Telemarketer "spam" abilities. So if the only number you give out is your GV number, it doesn't matter if a telemarketer calls you, all you have to do is add them to your contacts (Say a SPAM contact) and setup the special routing of that one to go to a special voicemail that says "the number you are trying to reach is out of service", no more/ very little telemarketers from now on.


There are more I'm sure but this is a good start.

GV: How to Set Custom Ring Schedules

Someone sent me the following email:
Where do you go to that dictates what times certain phones will ring? I’m trying to figure that out
Let's say you only want one phone to ring on the weekends and one to ring during the week, but only during the hours 9-5, how do you do that? Simple, use custom ring schedules.

Here's how:
1. Login to Google Voice
2. Click Settings
3. Click Phones
4. Click Edit on the phone you want to set a custom ring schedule for
5. Click Show Advanced Settings

As you can see, you can set the ring schedules to a particular time.

For this phone, I have the weekdays set to 9-5, and the weekends to not ring,

Now you simply would save and edit the other phone to only ring on weekends, by clicking "Always ring on weekends" and then clicking "Never ring on weekdays".

There you have it, a phone that rings only from 9-5 during the week only, and another that rings only on the weekends.

Let me know how you use Google Voice in the Comments.

Wednesday, August 5, 2009

All things Google: Google Voice

I have been using Google Voice for a couple weeks now, and the more I use it the more I like it,one HUGE benefit I see is that when I start getting spam calls from my google number you have the option of routing those calls to special "voicemail" I like to call it the trash.

Another great thing is I can use my Ipod Touch to send and receive messages (in wireless hotspots), which means no more typing using my cellphone (not a keyboard, lets just leave it at that).

So I've been trying to come up with some ideas, I realize now that if I can manage to mashup my Google Calendar (Birthday event reminders), and Google Voice, I can now send Happy Birthday Texts automatically, and send myself a reminder that I did so....how cool would that be.

For those of you wondering Google Voice is kinda like having a central call center (one number) that can route different kinds of calls to different places, very convienient.

On the plus side I had all my google contacts in order (because I lost my enV back in the winter snowboarding), and because the iPod Touch can sync with the contacts and calendar I was set when I signed up, so now it's a simple search for a contact, then click call or sms, and if you call, it will prompt you for which phone to call from, so what it will do is call your phone first, then start the ringing for the other phone (kinda like a "transfer"), SWEET.

Anyways, the more I play with Google Voice the more I like, I'll try to continue a review at some point in the future!

Biggest drawback though at this point is that GV won't accept MMS messages.

I'll update if that changes