Thursday, January 22, 2015

Corrective Action

I’ve been reading through Proverbs in my quest to finish the Bible this year.  So I’m using YouVersion and plan that has me read the entire thing in a year.  Technically, I started 2 years ago, and never finished.  But I picked up where I left off, and now I’ve been going steady since January 1. 

Anyways, I was thinking through the various parts about the correction of children.  I know correction has been simplified to “spare the rod, spoil the child”.  But that’s a hideous abbreviation of a collection of different proverbs.  Most of them say “don’t hesitate to discipline your child”.  But the comment is not often made on how to discipline. 

In other words, discipline should exist.  But I’m not going to tell you how to discipline.

If the Bible is the word of God, and God is smart, then what the Bible says should be smart.  I’ve got three kids.  The older kids (3 and 5) have completely different personalities.  Disciplining each child requires different actions and corrections.  Sometimes the reward is a positive reward, sometimes a negative reward.  But in the end, there is some sort of correction.

Throughout the parts of the Bible I’ve read, the correcting action changes.  God was not a one trick pony when it came to correcting the Jews, and as a parent we shouldn’t be either.  The old adage of “spare the rod, spoil the child” is the adage of a one trick pony. 

There is a second question that needs contemplated when talking about corrective actions.  Think back to the corrective actions your parents used.  And then answer the question: did it work?  I’m pretty sure most children will eventually parent the way their parents did.  They will use the same corrective actions.  I saw a lot of parents use corporal punishment.  I also saw a lot of kids who weren’t phased by corporal punishment.  Fifteen minutes after being paddled, they were back to their old ways.   In effect, the corrective action was not effective in solving the issue. 


The entire purpose of a corrective action is to get the person to correct their action.  It’s not for the parent to feel better.  It’s to correct the action that was wrong.  If the corrective action didn’t work, then new measures must be developed.

Wednesday, January 21, 2015

journaling

I was reading something from the Art of Manliness about Benjamin Franklin keeping a notebook in which he wrote down his successes and failures in his desired character traits.  I found an old military notebook that I used to have, and I think I want to do the same thing.  The notebook is one of those old green hard back notebooks filled with blank pages.  It’s kind of like your own personal hard back book. 

Mine is a bit old, but I still like it.  I always thought they were the greatest thing in the world when I saw NCOs carrying them around.  I don’t know why.  It was simply the mystique of an NCO and his book.  There was a degree of awe in seeing that book.  The books themselves were simple little things. 

Anyways, there is always the question of what should be put in the journal.  It’s not often you get a book that could last a few years.  Most of the time, you find some piece of junk spiral notebook that will last about 20 minutes.   And spiral notebooks never have the proper consistency or a solid cover.  Unless the attempt at solid is shoddy plastic.  Did I mention how much I hate spiral notebooks?

Anyways, I’m still contemplating what to write in the notebook.   I really like the idea of keeping track of progress.  Often, you find yourself committing the same mistake over and over again.  For some reason, we are blind-sided by our own faults.  We often see past them.  They just simply disappear.  


Tuesday, January 20, 2015

Network Baselines

Like I said, I’ve been working on network baseline analysis.  Beginning problem is that I don’t have a baseline to begin with, nor do I have any way to examine the current baseline of the network.  So, I’m at a loss of where to start. 

I read one book where a basic baseline can be created by pinging all available hosts.  It’s not the greatest baseline, but it is the beginning, and it’s better than nothing.  What I’ve got is nothing.  So what I did is wrote a batch file using a FOR loop to ping all devices and print the output to a file.  After that, I ran an arp –a and appended that to the end of the file. 

So it’s not the greatest baseline.  But it does give me an idea of what standard network performance should be, at least as far as PING goes.  I guess the next part is trying to dump the information into a webpage or a database so the information can be examined later and compared to what it has been at various points. 

I guess I should probably add the ITILv3 documentation to my reading list.  The only problem is I’m not definite the ITIL information actually provides information on how to baseline a network.  I understand the basics and the conceptual theory.  It’s a matter of going out and doing the work.  And sorry, SNMP is not the way to baseline.  Everyone has it turned off due to the insecurities in the system. 

Just a quick look at Cisco, and the only encrypted version they have only supports DES.  So the options are send the data as plaintext, or send it as an algorithm that has already been replaced due to inherent weakness.   15 years ago, DES was cracked in 22 hours.  15 years ago, I was happy with 400 MHz processor running 128 Mb of RAM. 

In comparison, I’m writing this on a laptop with an Intel Core i5 running at 2.5 GHz with 4 GB of RAM.  Shot in the dark, but I think a couple of these suckers could crack DES in a day.  And if someone breaches your network and doesn’t get caught, then what is a day?  What is 10 days? 


Monday, January 19, 2015

The end of one thing, the beginning of another.

I finished the Security+ book, and I think it left me with more questions than answers.  At the moment, I’m questioning how to do a lot of things.  Network baseline analysis is the primary one of those.  At the moment, I’m doing some preliminary reading.  Sure, there are a lot of books out there that say “this should be done”.  None of them discuss how to do network baseline analysis.  I think the best answer I’ve seen so far “there isn’t a standard”.  Which sounds pretty normal with network security.  And that’s why network security is, as a general rule, very splotchy.

With Security+ being finished, it’s off to learning physics VIA a collection of books written by Benjamin Crowell.  Part of me wants to write a long, drawn out blog post describing in detail how I can believe in both science and God at the same time.  But I’m not.  The answer is pretty simple: most of life is not an either/or selection.  Despite simplistic arguments against, it is entirely possible to believe in both at the same time.  The two are not mutually exclusive.  Sorry folks, I can believe in both at the same time.

I’ve touched on the false idea of mutual exclusivity before.   I can’t remember the post, but it’s the argument of people who want to lead you down paths that are only valid if the two items discussed in the beginning really are mutually exclusive.  For the most part, there are very few mutually exclusive items in the world.  I guess in the end, you have to question the assumptions people push at you, and assume everyone has an agenda.  Despite the best arguments, the truth is not the real agenda.

I think Andy Andrews put it best:  People often think logically to the wrong conclusions. 


Really, there was an entire book about that subject.  It was pretty interesting.  

Friday, January 16, 2015

Moving towards success

It usually feels weird, turning dreams into reality.  By and large, people are taught to dream big.  But they are never taught how to turn those dreams into reality.  Probably because it’s not fancy enough.  There’s nothing slick or amazing about it.  I guess people are in love with the fancy and great.  But it’s really simplistic stuff that causes success.

It’s strange, the amount of gain that can be had from just showing up and participating.  That’s half the effort in most cases, and that half is more important than any of the rest.  You could be the fastest, best person in the world but you aren’t going to get anywhere unless you show up and participate.  I’ll start with a good example.

It doesn’t matter how much you want to lose weight or “get in shape”, unless you do the work you will not achieve your dreams.  A person putting in 20 minutes a day will go farther than a person that shows up when it’s fashionable.  Sure, fashionable is a good time to show up.  But you must keep showing up.  Unless you keep showing up, you will never make it where you want to go.  And it’s really pretty simple. 

Show up.  Perform.  Rinse. Lather. Repeat.

I don’t care how much you want to know or learn.  Until you show up and perform, you won’t go anywhere.  Sorry.  It’s just not going to happen. 

Once you’ve made it beyond the “show up” portion, it’s time to spend a bit of time on the effort itself.  My other piece of advice is thus: don’t try to find shortcuts when you are trying to establish the routine.  Just keep showing up and chugging along.


Wait until the routine is established before you look for refinement.  

Thursday, January 15, 2015

Plumbers and Janitors

After a long trip around the Panhandle, I’m back at home.  I think I drove 250 miles today in my trek to get things ready for PCI 2.0 compliance.  It ended up being about a 10 hour day, but I enjoyed it.  It’s not every day you get to see good actions and results.  Maybe more on that later.

I find a lot of people in my industry don’t really spend the time or effort to achieve much.  Whether it be a chain or a person, they all seem to be drawn to mediocrity.  Either that, or I just don’t know what motivates them.  It’s very likely they don’t know what motivates themselves, either.  Just a lot of slouching towards the weekend with no real goal in sight, and no plan. 

I think I read in one book or another that the average IT person is best equated to a janitor or a plumber.  Both experience the same problem.  It’s in how they deal with the problem that makes their job descriptions different.  The problem in question for a janitor and a plumber is a leak.  A janitor spends most of their time mopping up the same leak.  They deal with the same problem over and over again.  A plumber finds the source of the leak, and stops the leak. 

With that idea in mind, I set out to be a plumber.  In order to be a plumber in the IT world, you have to know a lot and you have to begin to understand root causes.  If you are app’ing 5 Ruby II’s a month (not to be confused with a Ruby 2) due to lost program on a reboot, then you need to figure out how to solve the problem.   The solution is app the Ruby.  The problem is not the random power fluctuation.  The problem is the Ruby doesn’t hold on to its programming.  So the answer is replace every single Ruby battery pack.  Guess what?  You then forget how to app Rubys because they retain memory through a reboot. 

Wednesday, January 14, 2015

Some programming... more about planning

I think I’ve thought of the problem with the threading function.  There’s really no problem with the thread function.  The thread works great.  My expectations of what the thread should do were wrong, though.  I incorrectly assumed the thread would run multiple times.  It doesn’t.  It just runs once.  And that’s the problem with it.  So it’s not the thread’s fault I told it wrong.  It is simply a matter of me assuming the wrong thing about how it would behave.

Essentially, I have to remember that the thread is nothing more than a function.  The function runs, and then the function quits.  Bu nothing ever calls the function again, so the numbers never change after the first press of the button.   Or at least I think that’s the explanation.

On a second note, my reading has gone past 20% complete.  I should be done with Security+ this week.  As a general rule, I’d say the book has good info but it’s so incredibly vague in most cases.  This is not an action oriented book.  This book is there to give you a gigantic overview.  From there, its’ up to the user to pursue whatever interests them.  Which takes the focus out of the reading.  I’m guessing a server book should go next.  At the moment, I’m not progressing down the security path though.  I’m heading towards a programming path.  Once the programming path is done, then it’s back off to other things. 

At the moment, I’ve read about 1000 pages of the 5000 I need to complete my current goal.  So that leaves me with another 4000 or so to read.  Do I really want to schedule the next 10,000 pages when I don’t know where I intend to go from here?  I could easily pick a number of books.  A Cisco Voice book probably needs to be in there somewhere.


For now, the examination of where I want to go is behind 4000 pages of physics, calculus, and artificial intelligence books and the last 50 or so pages of Security+.  Towards the end, I’ll probably have a better understanding of where I want to go.  But now?   The schedule is set, I just have to follow it.

Tuesday, January 13, 2015

Threads: I still hate them

Hmm…

Looks like implementing threads is going to be about what I expected.  The code is simple enough.  It’s getting that thread to run multiple times on a schedule that’s going to be the complicated part.  I have no idea how to get it to do that.  The thread.sleep() should cause it to work, but it’s not doing what it’s supposed to do.  I suppose I’m used to dealing with threading causing me havoc.

Grr…   Slight modifications to the system and it still doesn’t work.  But eh… 

The real problem is threading is critical to half of the stuff I have running through my head.  So I have to figure out threading, or the rest of my ideas need to go on hold.  And I really don’t want to put them on hold. 

But…  grr. 


Did I mention I’ve never been good at threads?  In general, they seem to be easy.  But I’ve never been able to implement them properly.  Though quickly looking through the Java documentation, there is also a timer implementation that would probably implement the countdown portion of the clock just fine.  It still annoys me…  

Yeah, I still hate threads.   I wouldn't bother trying the code, as it doesn't work...   

    private class CountDown implements Runnable
    {
        CountDown()
        {
            
        }
        public void start()
        {
            t = new Thread(this, "counter");
            t.start();
            
        }
        public void run()
        {
           
            try
            {  
            
                int ones;
                int tens;
                String txt = seconds.getText();
                char characters[] = txt.toCharArray();
                             
                ones = characters[1] - '0';
                tens = characters[0] - '0';
            
                ones = ones - 1;
                    
                if(ones < 0 && tens > 0)
                {
                    tens = tens -1;
                   
                    ones = 9;
                }
                else if(ones < 0 && tens == 0)
                {
                    tens = 0;
                    ones = 0;
                }
                
            
                seconds.setText( Integer.toString(tens) + Integer.toString(ones));
            
                Thread.sleep(20);
            }
            catch(InterruptedException e)
            {
                
            }
            
        }
    } 

Monday, January 12, 2015

Java StopWatch: the down buttons

I'm still working on my Java Stop Watch.  I got the down buttons working over the course of about 20 minutes.  10 or so of was copy/pasting the code, and updating a few definitions.  The other 10 was troubleshooting what wasn't working properly.

There is a simple realization when you code: it will be wrong.  From there, you will need to fix it.  Life works much the the same way.  Anyways, here's how the buttons work.

First the mintues up button.

        ones = ones - 1;
                if(ones < 0 && tens > 0)
                {
                    ones = 9;
                    tens = tens - 1;
                }
                else if(ones < 0 && tens == 0)
                {
                    ones = 0;
                    tens = 0;
                }

Now, the explanation.  In this system, you have two separate scenarios.  One is that the number becomes negative.  We don't want that.  The other option is a reduction in place value.   I deal with them in the program in reverse order.  So we'll go with what the program covers.

The reduction in place value is a move is a dual comparison.  So...  If the ones' place is negative, and the tens place is greater than or equal to 1, then reduce the tens place by one and set the ones place to 9.

The other option is the value goes negative.   You can't measure negative time, or at least that I know of.  So, if the ones place is negative and the tens place is zero, set both places to zero.

The main point of both of these systems is the ones place reduction happens immediately.  That way, if the either comparison fails, then nothing is needed to be done and the function is complete (mostly) complete.  You still have to output the information, but that was covered earlier.

After writing the part that decrements the seconds, I changed the seconds incrementer to be consistent.  Previously, the seconds incrementer would go to from 59 to 00 and start back over.  But I didn't write the reduction to work that way, so I changed the system to stay at 59.   No rollover.  It's a personal program, so I'm not concerned about the system going in circles.


Looks like everything is working properly.  Next time, I need to write the threaded portion of the system.  Basically, during the "on tick" event, reduce the the display by 1 second until countdown is complete.

Maybe I'll get that working tonight.  Or some time.   Don't know.  We'll see.



Friday, January 9, 2015

Java StopWatch: making the buttons move

Making textbox output is a bit of a pain, but it's not that terribly hard.

Here's a picture of the design for reference.  I still need to figure out how to center the items in the GridLayout().


I ended up writing a separate private subclass to implement the minutes up button.  So...  how does it work?

You start with a string as the current text box output.

String txt = minutes.getText();
char characters[] = txt.toCharArray();

Now, I could probably cram this on to one line, but I don't think I am.  I like the simplicity of the statement, and it's not that complex or hard to understand.  

So, now we've got a character array holding what is displayed in our minutes field on screen.  Where to next?  

I need to convert those to integers.

int ones = characters[1] - '0';
int tens = characters[0] - '0';

Simple enough?   Take whatever the unicode letter is and subtract it from the unicode character '0'.   Simple math, and then you have the ones and tens place.

As a side note, I learned the last bit back in 2000 when I was learning C++.  I have since fallen out of use in C++, but I still remember that trick to get a number out of a character.

Ok.  Now we know what our number is.   We need to increase it.  

Simple enough.

ones = ones + 1;

if(ones >= 10)
{
     ones = 0;
     tens += 1;


Easy enough to understand, I hope?   + 1 to the ones place.  The ones place can't be greater than 9, so if it gets bigger than or equal to 10, then make it zero and increment the tens.

That will give us a stop watch that will increase up to 99 minutes.

And for the final bit, pushing the new number back into the JTextBox

minutes.setText( Integer.toString(tens) + Integer.toString(ones));

After the rest of the complications, this one is easy.

I haven't written the code for converting seconds, but that is also simple enough.  The only question is what you do when you reach 59 seconds.  Do you go back to 0, or do you increase the minutes by 1 and go to 0?  

Either way can be done.  It's just a personal preference.  Generally, I count up minutes and seconds.  Though come to think about it, I count up every time and only could down seconds.  So my program is inconsistent.  I think with this one, I'll just make the seconds rotate.  It's another simple if/else comparison.  

But yeah, that's about it for the up buttons.  For seconds, just swap a few names.  The down arrow works pretty much the same way, except it decrements.  

As a random thought, I have thought about trying to cram the minutes/seconds up buttons into one class.  I'm sure it's possible, I just don't have the skill.   Essentially, both would have to have a separate actionPerformed, and I'm not sure how to do that.  


Thursday, January 8, 2015

A bit busy

Can you say busy?  Yup.  It’s been.  It’s been the good kind of busy, though.  I spent a few days building a new Active Directory Group Policy.  Default templates work well, but they still need tweaked.  Not everything works out as well as you’d think.  Or at least not always.

I’ve been contemplating security in depth, and I’m pretty sure my old beliefs about security are still true: security is an illusion we like to tell ourselves to ignore reality.  It really is.  Several companies I’ve dealt with are completely clueless as to what they do and how they operate.  They are no more aware of their failings than the man in the moon.  It’s moderately hilarious, but only in the sick, sad sort of way.  I guess there is always a need to upgrade and move forward in a technology related company.  The inertia of doing nothing often gets in the way of real accomplishment. 


I think that will be it for today.  I spent a few minutes working on the Java StopWatch, but not enough to do anything of interest.   Yay.   I have large letters and I set up a font.  But they aren’t centered in the boxes so they are kind of ugly.   But at least the numbers are large and readable.

Wednesday, January 7, 2015

Chemical Bombs / Games Theory / Candy Crush

Last night before bed I was contemplating Candy Crush.  I’ve played the game a lot before, and yet I can’t ever seem to say anything nice about it.  And yet, I continue playing over and over and over again until my lives run out and I’m told I have to go sit in a corner and wait.  And at some point, I come back and do the same thing over again. 

Why do I do it?  What makes me continue to play a pointless game?  Why do I continue playing when I can’t think of a nice thing to say about it? 

Better yet, how can I replicate that to create something that teaches?  I’ve messed with quite a few learning games before, but most of them are pretty much the same thing.  All of them allow you to participate as much as you want.  I think the scarcity mentality of the game is really what makes the game. 

I grew up on Super Mario Brothers.  We’re talking back in the in olden days when Nintendo and Sega were fighting like cat and dogs.  I had a Nintendo in those days, and my brother and I would play Super Mario brothers for hours.  And hours.  And hours.  At points, the game grew excruciatingly painful to play.  Certain sequences were just nightmares.  But eventually, through a combination of luck and skill the level could be defeated. 

The biggest thing about the game was its scarcity mentality.  There was a point in the game where it didn’t matter how good you had done the previous times, it was over.  When your lives ran out, it didn’t matter that you played for 30 straight hours.  It was over. 

And I think that scarcity mentality is part of what makes Candy Crush enjoyable.  If Candy Crush could be played for hours on end, it probably wouldn’t be played as much as it is.  But the scarcity mentality of only having a few lives makes the game slightly more interesting. 

Maybe I’ll turn it into a chemistry game called Chemical Bombs (a slight joke on Bonds) where you use a limited set of the periodic table to create balanced chemical equations.  The tiles would be the periodic table times, and the goal would be to create chemical bonds and create…  something.  Maybe several neutral equations, and seveal that were negative and some that were positive.  I think that depends on the level. 


Seems like a good idea to me…   

Tuesday, January 6, 2015

Program 2: Java Stopwatch

With the NetworkStatus application in a mostly working state, it’s time to shift gears to a separate application.  I like to build small, similar applications that will eventually use the same basic ideas.  The first application was designed to get a button working and responding to being pressed.  Program two is about threading.

And what better way to move to in to threading than my old favorite of the threading world, the Stop Watch.  StopWatch will be of similar design to NetworkStatus.  The thing would have several buttons allowing you to adjust the time, and display in the middle of the screen.  There should be a start and stop button.  So I guess the first thing is to pull up paint and create a generic mockup of the program design. 

I decided to go with a 3x4 grid layout simply because it’s different than the gridbag layout I went with earlier.  I’m still not impressed with Java FlowLayouts, and GUI design in general seems like a real pain.  But I’ve got to learn to work with what I have to work with.  Some systems just seem to be better suited for certain things than others. 


The number in location 0,1 and 2,1 will be independent of each other.  They will be separated by a colon.  The colon ends up being just a text field with the text size increased to make it look pretty.  Really, the 0,1 and 2,1 are text fields as well.  They will just be handled with some special code to make them operate properly.  It’s not complex code, and I’ve written the same thing in other languages before. See my C# example below.


Though after examining my old C# stop watch, I might put a reset button in the middle.  That could work out nicely.  So, half an hour into this project I have a reasonable (though ugly) facsimile of a StopWatch.  It is not fuctional, and I need about 200-300 more lines of code to make it work without threading.  But at least there’s been some progress made.  Maybe tomorrow, it will be counting. 


Probably not.  It will take all of tomorrow to get the buttons working properly.  

Monday, January 5, 2015

Working solutions

So it looks like the basics are working on the program. Now that it does what it’s supposed to, it’s off to creating the not so easy portion of the system.  There are still some minor portions or the program that aren’t working properly.

The answer to the initial question was…

this.setVisible(true);


Guess it was the simple stuff that was causing things to fail.  It almost always is.  The next question I’m wondering about is the scroll bar on the text box.  I’m sure it’s something easy, but easy isn’t hitting on the head right now, I’m going to have to keep guessing. 

The other items I’m wondering about are all style issues.  Simple things like why there is so much gap between the top grouping and where the list box starts.  I shouldn’t call it a list box, but that’s what it reminds me of.  It’s really a JTextArea.  

This is what often happens in many of my programs and projects.  I break down to fighting simple/stupid stuff that doesn’t really equate to how the program operates.  It’s just a visibility/design issue.  But design issues can make or break a program.  Certainly, there should be more to the program, but at the moment, everything seems to be acting like I think it should.  As a test, it works well. 

The next questions are all technical ones.  Such as, the InetAddress.isReachable implementation.  I question these things, because the creation I’m thinking of making is some sort of thing that examines the current state of hosts imported through an XML file and alerts based on whether hosts are reachable or not.  It then checks every 30 seconds or so and writes the information to a database.  From there, you can see the long term uptime of a network.

And I really want to know what it does and how it operates, because proper troubleshooting requires knowing why something is doing what it is doing.  And really, you need to know both what the results tell you and what the results don't tell you.  I've spent 3/4 of a day fighting an Internet issue because I quit listening to what everything was telling me.  I was being too quick to jump to conclusions. 

There are other things I’m contemplating, but I don’t know how to implement them.  In the end, almost all of my programs become horrendously ungainly things where feature creep becomes a dominant factor.  Well, feature creep and general GUI design flaws.  Like I said, I spend a lot of time fighting GUI design.


Other than something I wrote in C# that checks to see whether a collection of backup files are there, and the date on those files.  It then emails me, telling me whether things succeeded or not.  But that probably needs updated just to make sure it stays working.  Or,  I need to rewrite the entire thing in Java.

Friday, January 2, 2015

Java layout managers

My reference on all of this has been Java All-In-One for Dummies.

I have a feeling Java layout managers are going to drive me up the wall.  It’s strange, but if I get things just perfect, all the items display on screen.  And if I don’t, nothing shows up until I resize the screen.  Strange to say the least.

I spent a while fighting with the flow layout, but that wasn’t doing what I wanted.  Towards the end of this session I decided to move towards a gridbag layout.  I have to admit, I like the idea of what gridbag presents, but I’m not sure it’s going to do what I want it to.  Fighting miniscule stuff like this is really annoying.  I think that is part of the learning curve, and the reason I wanted to program every single day.  There are some things that are only learned through blunt repetition.  I’m guessing this is one of them.

I was planning on implementing a text area to deal with the output from the text box, but I haven’t made it that far.  Fighting the layout manager took more time than I expected, but eh well.  Yeah, it’s ugly but it’s starting to be functional.  The button will work when the code is written to handle it.  I tested it a few days ago, but I’ve since changed the code. 

The program itself has been redesigned slightly.  I was intending on settings up the button as a separate class, but in the end I had to get rid of that idea.  It because a private inner class of the display class.  I guess I should have known that from all my Visual Basic work, but meh.  It’s been a while since I touched Visual Basic. 

I have to admit I’m making decent progress faster than I expected.  I’m okay with that.  Fast progress on programming shouldn’t have come as a surprise to me.  Once you’ve learned one language, it’s a matter of learning syntax and what can and can’t be done in the language. 

Java does seem to be the predominant language of the day, and that’s the reason I decided to learn it.  Everything else still exists, but seems to be lessening in many aspects.  That’s just a personal opinion of mine, and based on no known fact or discussion.  Just vague observation.  And  I could be completely wrong.


Thursday, January 1, 2015

More on Java

Back to Java.  I was working on writing a test servlet application to run on the new (really old) computer, and spent some time fighting NetBeans until I figured out what I needed.  What I was missing was the entire javax.* import information.  It was under Tools->Plugins.  Despite my best attempts, it’s still not working as I write this.   The Javax import is there, just not the servlet portion.   I will fight that later.

I think I learned a bit that I’d forgotten in my rush to get an app together.  The idea was good, but the idea was a little more complex than my mind could really wrap itself around.  Learning any new programming language generally requires spending a certain amount of time building junk programs that do little things.  Most of those programs aren’t really good for anything except building a bit of muscle memory and learning.

I think I also took a step back with the realization that I need to grind out a few programs here and there and make something work before I try something I want to sell.  If I can’t write the code for what I want to do in Java without having to fight Eclipse, or any other IDE, then I don’t need to be trying to write the code.  Because there is a knowledge gap, and that knowledge gap becomes obvious when you start developing more complex applications.

So I’ve decided to spend a bit of time every day developing junk applications.  Things that might be useful to me, but are otherwise useless.  Maybe the simplicity of a button class that realizes whether a Boolean has been switched.  Really simple, stupid stuff.  But then, opportunity often comes dressed in coveralls and looking like work.

Because, despite my best interests at self-sabotage, if I read 11 pages per day for the next year, I’ll be done with my 5,200 page sprint through physics, calculus, and artificial intelligence.  And when those 11 pages per day are done, it’s time to start practicing to perform.  But there has to be a sufficient knowledge base reached before I can even begin to put that sort of knowledge into play.


To put it simply, I should have the ability to design a user interface that looks like what I’ve imagined before I try and develop something that can think.  I shouldn’t be wondering how to program a button so when I click it the thing starts to work.