I've been working like a crazy man the last couple of weeks. Putting in hours the normal individual wouldn't consider sane. But it's done. Or at least at a temporary standstill. I started writing an article about the time spent. It wasn't worth a shit. I haven't moved on.
I started writing, and it seemed like a good thing. Then I realized I sounded like a whiny little bum.
Too much "oh poor me".
And another part of me started speaking up.
"What would haji do?" Do they care that you haven't slept in 36 hours? Are you still sane?
When your friends die, what's your excuse? Did you do your best, or did you roll over like a little bum?
What could you have done? Why are you living a life of regret? Grab the wheel and force the ship in the direction you want it to go. Damn the torpedoes.
Quit making excuses. Grab the wheel. Put your back in to it.
And if it isn't moving, start kicking it. Kick until it moves. Make it move.
"Does haji care you had a bad day?"
"Does haji care you haven't slept?"
Move the damn wheel.
Make it move.
Haji will kill you and not think twice. He will drop a bomb on your day and completely fuck your world.
Adapt. Improvise. Overcome.
Don't let that asshole keep you from your goals.
Don't be an excuse. Be an answer.
Dedicated to 3/4 and 3/5. The assholes that saved my ass in a firefight. Because when I was weak, they were strong.
Ooh rah.
A blog about the things that interest me. Includes random thoughts, Cisco, programming, and business related stuff from convenience store world.
Sunday, December 20, 2015
Wednesday, December 2, 2015
Useful Cisco Commands
Here's a collection of Cisco commands I still haven't been taught by Cisco. But I learned through various other methods.
terminal monitor
and
term no mon
Terminal monitor is the answer to all remote diagnostic issues. So when you ssh or telnet into a client, you then get the output you would if you were on site. The only problem is that output occasionally drives you mad as you try to figure out the solution to a problem. How in the world do you turn it off? That's where term no mon comes into play. It turns off console connections for after they have been turned on with terminal monitor. Terminal monitor is taught in class. Term no mon is not.
term len 0
Another terminal command. The terminal length command tells how many lines of output to display when you hit a key. But term len 0 has a special use. Let's say you want to do a quick examination of the entire running config of a site. How do I do that?
Using Putty, turn on logging. I'd actually recommend setting logging to default so it logs every piece of output forever. Might be useful when you have other issues. Next, remote access the system via telnet or ssh. Next. term len 0. You now just set the terminal length to 0, so it will display the entire output without having to press a single key. Guess what? No more parsing crud out of text files. You now have a complete running config stored in the Putty log file that only needs minor parsing. No more removing typing, input characters, or what not. Just open the file and remove the login/logout sections.
Next, exit. Do not save. No not write. That way, the next time you log in everything will be just as you found it before. No weirdness or strangeness. Otherwise you might have to use term len 10 or something to that effect to put it all back together again.
monitor session 1 source interface interface_name/number
monitor session 1 destination interface interface_name/number
The only pair of commands in my list. I've only used these commands on switches. They might work on routers as well. Not sure. But here's the great thing about these commands: along with Wireshark, you can kick back and examine all the traffic going through a device in order to try and troubleshoot communication issues. It's kind of like a programmable hub, but better. And, you can monitor as few or as many ports as you want. I'm sure there's limitations to the commands, but like I said, these are things I've learned that classes have never taught me.
So, there you go. A short collection of Cisco commands that seem to make life easier. Or get rid of terminal monitor after you start it up. Hope it helps.
terminal monitor
and
term no mon
Terminal monitor is the answer to all remote diagnostic issues. So when you ssh or telnet into a client, you then get the output you would if you were on site. The only problem is that output occasionally drives you mad as you try to figure out the solution to a problem. How in the world do you turn it off? That's where term no mon comes into play. It turns off console connections for after they have been turned on with terminal monitor. Terminal monitor is taught in class. Term no mon is not.
term len 0
Another terminal command. The terminal length command tells how many lines of output to display when you hit a key. But term len 0 has a special use. Let's say you want to do a quick examination of the entire running config of a site. How do I do that?
Using Putty, turn on logging. I'd actually recommend setting logging to default so it logs every piece of output forever. Might be useful when you have other issues. Next, remote access the system via telnet or ssh. Next. term len 0. You now just set the terminal length to 0, so it will display the entire output without having to press a single key. Guess what? No more parsing crud out of text files. You now have a complete running config stored in the Putty log file that only needs minor parsing. No more removing typing, input characters, or what not. Just open the file and remove the login/logout sections.
Next, exit. Do not save. No not write. That way, the next time you log in everything will be just as you found it before. No weirdness or strangeness. Otherwise you might have to use term len 10 or something to that effect to put it all back together again.
monitor session 1 source interface interface_name/number
monitor session 1 destination interface interface_name/number
The only pair of commands in my list. I've only used these commands on switches. They might work on routers as well. Not sure. But here's the great thing about these commands: along with Wireshark, you can kick back and examine all the traffic going through a device in order to try and troubleshoot communication issues. It's kind of like a programmable hub, but better. And, you can monitor as few or as many ports as you want. I'm sure there's limitations to the commands, but like I said, these are things I've learned that classes have never taught me.
So, there you go. A short collection of Cisco commands that seem to make life easier. Or get rid of terminal monitor after you start it up. Hope it helps.
Monday, November 30, 2015
It's always easy
I was going to write something on a subject I conjecture about, but really know nothing about. So I decided to scrap that and go with something else. Perhaps this. This might get scrapped before I finish writing it. If not, lucky you!
I'm struck by how everything is always described as being "easy" as long as you use the correct method. Which seems really strange because you need to know the correct method in order to use the correct method, and learning the correct method is generally trial and error.
Anyways. I really see two variations in this theme. One sells books, and the other is the truth. The first is that everything is always easy. Which is strange, because I can't describe anything I do as easy. Sure, I make it look easy. But I've got 5 years of hard experience in my job. I've also done an okay job at learning how to learn. I also understand that the primary way to learn is something I call blunt force trauma. The goal with blunt force trauma is simple. Beat a subject into your brain until it sticks. Keep doing it over and over and over again. I've heard of plenty of shortcuts, but none of them work as well as blunt force trauma. That's how I've passed my Cisco classes.
Because really, learning is work. And work by and large is hard. But it is fulfilling. But it's hard. It's a lot easier to kick back and use some passive method of studying. I could watch videos all day long and not gain anything out of them. Nor could I tell you what I read. It just doesn't stick. Because it requires no interaction and no concentration on my part. Perhaps if I'd trained my brain differently, then I would instantly start learning the instant I sat in front of a TV. But in reality I've spent years telling my brain to sit down and shut up when I'm in front of a TV. And usually, my brain rebels. So I watch about 30 minutes of TV a week. There's far too many other things that I find interesting and would like to engage my brain in besides passive non-interaction.
At the moment, I happen to be reading Peak Learning by Ronald Gross. He has a tendency to use the "it's so easy" method quite a bit. But I've also covered 1/6 of the book, and he has yet to begin discussing learning how to learn. And that's the purpose of the book, right? So the question becomes when does the author try to get into the material so I can start learning how to learn? In general, I'll probably gain 2-3 good insights out of the book.
I also happen to be reading Computer Vision by Dana H Ballard and Christopher Brown. In comparison, I haven't heard anything described as "easy". In comparison, it's better described as dense and/or heavily packed. There is little room for fluff in this book. Unfortunately, there's not really an easy way to go through that book.
I'm struck by how everything is always described as being "easy" as long as you use the correct method. Which seems really strange because you need to know the correct method in order to use the correct method, and learning the correct method is generally trial and error.
Anyways. I really see two variations in this theme. One sells books, and the other is the truth. The first is that everything is always easy. Which is strange, because I can't describe anything I do as easy. Sure, I make it look easy. But I've got 5 years of hard experience in my job. I've also done an okay job at learning how to learn. I also understand that the primary way to learn is something I call blunt force trauma. The goal with blunt force trauma is simple. Beat a subject into your brain until it sticks. Keep doing it over and over and over again. I've heard of plenty of shortcuts, but none of them work as well as blunt force trauma. That's how I've passed my Cisco classes.
Because really, learning is work. And work by and large is hard. But it is fulfilling. But it's hard. It's a lot easier to kick back and use some passive method of studying. I could watch videos all day long and not gain anything out of them. Nor could I tell you what I read. It just doesn't stick. Because it requires no interaction and no concentration on my part. Perhaps if I'd trained my brain differently, then I would instantly start learning the instant I sat in front of a TV. But in reality I've spent years telling my brain to sit down and shut up when I'm in front of a TV. And usually, my brain rebels. So I watch about 30 minutes of TV a week. There's far too many other things that I find interesting and would like to engage my brain in besides passive non-interaction.
At the moment, I happen to be reading Peak Learning by Ronald Gross. He has a tendency to use the "it's so easy" method quite a bit. But I've also covered 1/6 of the book, and he has yet to begin discussing learning how to learn. And that's the purpose of the book, right? So the question becomes when does the author try to get into the material so I can start learning how to learn? In general, I'll probably gain 2-3 good insights out of the book.
I also happen to be reading Computer Vision by Dana H Ballard and Christopher Brown. In comparison, I haven't heard anything described as "easy". In comparison, it's better described as dense and/or heavily packed. There is little room for fluff in this book. Unfortunately, there's not really an easy way to go through that book.
Thursday, November 26, 2015
Last Projects for Cisco 3
So I just finished my last two packet tracers for my Cisco 3 class. Presented, for all your wonderful glory, is a picture of my EIGRP capstone project.
Which I have to admit is about as complicated as some things I've designed for work, and are actually in operation. The fun thing about this one is I ended up setting up DHCP on every single one of those networks in there, so the end user connections are all DHCP assigned. The EIGRP portion wasn't that difficult. Mostly, it was just labor.
The interesting thing was in creating the ISP connection. Really, it's just a router with an assigned public IP. From there, I added a default route back towards the network I designed. It might have been more interesting to design the thing as a multiaccess network, but who cares. The system wanted a multiple location EIGRP network. So I used serial connections. And funny thing is, I've never had to set up a serial connection in real life. All Ethernet based. One was PPPOE, and that was a bit annoying to set up.
So now, all I have to do is study for the final and start working on the next book. In the process of taking over four stores. Isn't work fun?
Friday, November 20, 2015
Correlation/Causation
I think there are two big difficulties in the IT world. Both are especially relevant to the C-Store world. One is turf wars. Turf wars are when departments are more concerned with covering their own behind rather than working with other departments. You can only hope to fix that one, but it's not likely going to happen.
The second issue is this: correlation does not equate to causation. In laymans terms: just because two things happened around the same time doesn't mean one caused the other. I had a failed Verifone Commander install a few days ago. I could never get the gas pumps to talk. They happened to be Gilbarco Advantages. This was my first site with more than 16 pumps. Interestingly enough, this was my first site with more than 12 pumps. That number becomes relevant in a minute.
Anyways, credit processing worked fine. Ran like a champ. But I couldn't get the pumps to talk. The site was Gilbarco with a PAM 1000 and 2 D-Boxes. I spent a long time trying to get it to work, but never could.
So I decided to put the old equipment back in place, and attempted to get it back to working. Pumps still wouldn't talk. I finally called in some pump techs, and we got 5 of the 10 dispensers communicating. We decided that was good enough for now. After the weekend, I called the pump company and scheduled them to come install the site.
The install was done in 4 hours.
What happened? Remember that magic number 12 I was talking about before? The PAM 1000 can only address 12 pumps with a single board. You can add more boards to talk to more pumps. But you start over the pump addressing. This is not information I knew prior to installing.
So, when I plugged 16 pumps into one board, nothing would talk. Why? Because there were duplicate addresses out on the system. Not only that, there were multiple duplicate addresses. Because fueling position 13-20 had internal pump number of 1-8.
The fix (had I known the situation) would be renumber the pumps. Which is what the pump company did.
Or, start over on the 2nd fuel board at position 13. That would have solved the issue quite easily.
So where does causation/correlation come in to this argument? Simple. The belief that changing out the point of sale system caused the pumps not to communicate.
I'm not a pump tech, and that's rare in this industry. I am a Verifone VASC and a CCENT, but my knowledge stops at the 2 wire going to the pump. I have to work with other pump techs and hope they know what they are doing. And hope that they aren't having turf wars.
As a footnote to the story.
As I was leaving the parking lot, I noticed the site was changing gas prices. After getting back ot hte office, I had conversations with 4 different people about why the price sign wouldn't change, and no one seemed to believe what I was saying. The gas price sign was changed by a key fob. Always has. I didn't mess with that during this install. But now, the gas price sign wouldn't change.
It took a bit of convincing to for people to realize that the gas price sign was at fault, not the point of sale system.
Anyways...
The second issue is this: correlation does not equate to causation. In laymans terms: just because two things happened around the same time doesn't mean one caused the other. I had a failed Verifone Commander install a few days ago. I could never get the gas pumps to talk. They happened to be Gilbarco Advantages. This was my first site with more than 16 pumps. Interestingly enough, this was my first site with more than 12 pumps. That number becomes relevant in a minute.
Anyways, credit processing worked fine. Ran like a champ. But I couldn't get the pumps to talk. The site was Gilbarco with a PAM 1000 and 2 D-Boxes. I spent a long time trying to get it to work, but never could.
So I decided to put the old equipment back in place, and attempted to get it back to working. Pumps still wouldn't talk. I finally called in some pump techs, and we got 5 of the 10 dispensers communicating. We decided that was good enough for now. After the weekend, I called the pump company and scheduled them to come install the site.
The install was done in 4 hours.
What happened? Remember that magic number 12 I was talking about before? The PAM 1000 can only address 12 pumps with a single board. You can add more boards to talk to more pumps. But you start over the pump addressing. This is not information I knew prior to installing.
So, when I plugged 16 pumps into one board, nothing would talk. Why? Because there were duplicate addresses out on the system. Not only that, there were multiple duplicate addresses. Because fueling position 13-20 had internal pump number of 1-8.
The fix (had I known the situation) would be renumber the pumps. Which is what the pump company did.
Or, start over on the 2nd fuel board at position 13. That would have solved the issue quite easily.
So where does causation/correlation come in to this argument? Simple. The belief that changing out the point of sale system caused the pumps not to communicate.
I'm not a pump tech, and that's rare in this industry. I am a Verifone VASC and a CCENT, but my knowledge stops at the 2 wire going to the pump. I have to work with other pump techs and hope they know what they are doing. And hope that they aren't having turf wars.
As a footnote to the story.
As I was leaving the parking lot, I noticed the site was changing gas prices. After getting back ot hte office, I had conversations with 4 different people about why the price sign wouldn't change, and no one seemed to believe what I was saying. The gas price sign was changed by a key fob. Always has. I didn't mess with that during this install. But now, the gas price sign wouldn't change.
It took a bit of convincing to for people to realize that the gas price sign was at fault, not the point of sale system.
Anyways...
Tuesday, November 17, 2015
Defeated
What to do during adversity? Most of the time I think of decisions I've made. Generally always the wrong ones. Would it have been smarter to get in the situation three months earlier and without a second loan?
The last month has been a roller coaster of adversity. I've found myself mostly responding badly. The answers seemed logical, but all turned out to be the wrong thing. What happens when you have such a colossal string of bad decisions? It's been mentally defeating. The debt I'd paid off this year returned in a matter of days, despite my best attempts to get rid of it. One step forward, one entire year back. Right back to the beginning. Did I mention I hate cars? I really do.
This is 5 years in a row of cars that can't seem to last a year. And around Christmas time every single time. I feel hopeless and helpless. Part of me wonders about fate. Part wonders about things I can't control. Part goes back to the old ideas of God teaching people lessons. Part goes to the Millionaire Next Door. Part goes to blame. Part goes to self blame.
It's a cycle I don't seem to be able to break. I don't understand the causes or effects. I keep repeating the same lesson over and over again.
Tired of the lesson.
Must find myself so I can drag myself out of the mud hole. Just have to find the right mud hole.
Friday, November 6, 2015
Back to SNMP and other things
I used to hate SNMP.
I’m not sure I still don’t. It’s
been annoying to set up. I’m still
fighting with SNMPWALK on SNMPv3 and getting data from a Cisco router and
switch. Eh well. I’ll get into that at some other point.
I have to admit Cacti was one of the better than I thought
it could be. I followed the right
instructions and have started doing some SNMP polling and producing some
decently relevant graphs on information someone in IT would think could be
important. Luckily, I happened to set it
up on a site that had Internet issues later that day. It worked out great because I ended up
diagnosing the issue while trying to connect to my Cacti web page. Turns out there was interference on the
network in the area and the site was dropping about 18% of packets. Which explains why they were having network
connection issues.
The other thing I keep looking and thinking about is network security. Which seems to be something everyone says they need, but no one does anything about. I pissed off a networking vendor because I told the person I wanted three single purpose servers instead of one multipurpose server. Everything I've ever read on servers says one purpose per server. Don't end up with a multipurpose server.
Eventually, the server needs replaced. And then you have numerous tools that need replaced or fixed in order to solve all the problems you used with that server. I mean sure, the RADIUS / print / file server / new thing part two server is great. But wouldn't it be simpler to have a RADIUS server that does nothing but RADIUS authentication. Or a print server that does nothing but handle printing. And then, when you need to upgrade that server you take down one function. Instead of the 25 different things running on one server.
I guess the second part of that conversation is "don't turn on any service that you don't need" on a server. Great. That's a lot simpler with a single purpose server. The print server doesn't need to do anything but print. The file server needs fat bandwidth to reach it, and that's about it. Virtualize it all. It's not like you need a physical server for all that.
But what do I know?
Friday, September 25, 2015
Exoneration
Let's talk about exoneration for a minute. Exoneration is the idea that I can do something for a period, and then quit doing it forever. The concept is usually introduced when talking about money or fitness, but it's generally used all throughout life.
The mindset is generally this: if I can make it to X, then I won't have to do this sacrifice ever again.
The X factor is always different, based on the mental picture that has developed. But it's all based on the concept of exoneration. And the hard part is there is no point of exoneration. Almost never.
Yet people reach endlessly for the exoneration point. I'm not saying you shouldn't reach. What I'm saying is you can't ever quit. Because if you quit, you go back to being what you were before you started. Dieting is generally a big exoneration subject. The key to success with diet and exercise is a long term plan.
You are not going to fix whatever problem you have with your weight or health in three weeks. It's just not going to happen. You can take almost anyone and put them on an exercise plan for three weeks, and they'll lose weight. Why? Because they weren't putting in any effort before. But long term, the weight loss will stop or slow down. Then the person will quit, and regain everything they lost.
Several months later, the same person will find a new "quick fix" and proceed to quick fix and lose 20 pounds. Then the new will wear off, and then 20 pounds will recover. My wife found a book that was talking about clients losing over 100 pounds. Except it was the same 20 pounds over and over again.
Most multilevel marketing plans are sold as exoneration plans. I'm not saying they are not worth the income if you can get them to succeed. But they are sold as quick fixes in a world that needs long term solutions.
Quit trying for exoneration. It doesn't work. There is never a point at which you get to quit doing what you've been doing.
Unless you don't like what you are doing. You do like what you are doing, right?
The mindset is generally this: if I can make it to X, then I won't have to do this sacrifice ever again.
The X factor is always different, based on the mental picture that has developed. But it's all based on the concept of exoneration. And the hard part is there is no point of exoneration. Almost never.
Yet people reach endlessly for the exoneration point. I'm not saying you shouldn't reach. What I'm saying is you can't ever quit. Because if you quit, you go back to being what you were before you started. Dieting is generally a big exoneration subject. The key to success with diet and exercise is a long term plan.
You are not going to fix whatever problem you have with your weight or health in three weeks. It's just not going to happen. You can take almost anyone and put them on an exercise plan for three weeks, and they'll lose weight. Why? Because they weren't putting in any effort before. But long term, the weight loss will stop or slow down. Then the person will quit, and regain everything they lost.
Several months later, the same person will find a new "quick fix" and proceed to quick fix and lose 20 pounds. Then the new will wear off, and then 20 pounds will recover. My wife found a book that was talking about clients losing over 100 pounds. Except it was the same 20 pounds over and over again.
Most multilevel marketing plans are sold as exoneration plans. I'm not saying they are not worth the income if you can get them to succeed. But they are sold as quick fixes in a world that needs long term solutions.
Quit trying for exoneration. It doesn't work. There is never a point at which you get to quit doing what you've been doing.
Unless you don't like what you are doing. You do like what you are doing, right?
Thursday, September 17, 2015
Before work, kitchen table thoughts
I came up with an idea to teach my kids reading. They are 5, 4, and 1. I know I want to teach all three of them the same way. That means I'll be repeating the same content three times.
The computer part of me says rebuilding the same content three times is ridiculous. And it is. So all I have to do is build the content the correct way once, and then start the next kid on their lesson. In many ways, I think Khan Academy is revolutionary in the academic space. I would love to see something like that for English.
The program I'm writing is based on Teach Your Child to Read in 100 Easy Steps by Siegfried Engelmann. It's been a pretty awesome book so far, even though I've only made it through lesson 20 with my oldest child.
So the goal is to create something like Khan Academy for English, based on Englemann. It's going to be interesting.
The computer part of me says rebuilding the same content three times is ridiculous. And it is. So all I have to do is build the content the correct way once, and then start the next kid on their lesson. In many ways, I think Khan Academy is revolutionary in the academic space. I would love to see something like that for English.
The program I'm writing is based on Teach Your Child to Read in 100 Easy Steps by Siegfried Engelmann. It's been a pretty awesome book so far, even though I've only made it through lesson 20 with my oldest child.
So the goal is to create something like Khan Academy for English, based on Englemann. It's going to be interesting.
Tuesday, September 15, 2015
Kitchen Table
It's formica, and it's my kitchen table. At least it doesn't look like it came from 1999. Maybe 1975.
Maybe I should spend more than 5 minutes on the background.
Or, I could go back to studying Scaling Networks.
Back to studying.
Maybe I should spend more than 5 minutes on the background.
Or, I could go back to studying Scaling Networks.
Back to studying.
Sunday, September 13, 2015
why....
Why do I go to church?
Because Jesus is there.
And if he's not, you are going to the wrong church.
Seriously.
If you don't feel the presence of Jesus at your church, there's a problem. It's probably your church. It might be you. You'd best investigate.
Also....
The blue background seems to come straight out of the Matrix. 1999 called. They want their meme back.
Because Jesus is there.
And if he's not, you are going to the wrong church.
Seriously.
If you don't feel the presence of Jesus at your church, there's a problem. It's probably your church. It might be you. You'd best investigate.
Also....
The blue background seems to come straight out of the Matrix. 1999 called. They want their meme back.
Friday, September 11, 2015
Circling the globe (the thoughts in my head)
I went on vacation this last week. I didn’t spend any time working. It was wonderful. Now, it’s Saturday and I’m back to getting
ready for work. The mental processes are
starting to grind away, and get back to what I was working on. At the moment, I’m updating Visual Studio so
I can work on the program I was writing in C#.
I know I’ve heard a lot of disparaging things about C#, but I’m not
terribly concerned. There are too many
purists in the world.
C# is a tool. Nothing
more. If it’s not the tool you need for
the job, then don’t use C#. C++ is a
tool. Java is a tool. Visual Basic is a tool. They are all tools. Nothing more, nothing less.
Each tool out there has a specific use, and some tools are better
for certain applications. I can’t say C#
is any better a tool than Java in this case, but it’s a tool I can manipulate easier. I also spend a lot less time fighting the
interface and more time working on what I’m interested in working on. As such, the thing already reads XML files,
runs threads, and generally works like I want it to. It’s not complete by any means, but it’s on
its way there.
In the period since I started writing this (it’s been about
a week) I read Seth Godin’s Small in the New Big. It’s quite a remarkable book, and there’s a
lot I’d like to say about it. I’m really
not sure what to say, though. There truly
has been a paradigm shift and in the world, and those trying to follow the old
paradigm seem to be getting left behind.
It’s much easier to follow the new paradigm.
But what is the new paradigm? I think the answer is release early, release
often, and benchmark everything. Quit
trying to make something perfect, and make something you can release.
So I think I’m going to go with that, and make something I
can release. I’ve already started working
on it, but it’s neither groundbreaking nor amazing. But it’s something.
When you release often, you end up basically throwing a lot of
stuff up, and hoping some of it sticks.
I’m not sure if that makes sense, but it does to me. If I release something in the next month or
so, then I’m doing better than I have in the last few years. Too much thinking and trying to come up with the
perfect idea. Too little time
releasing.
I think I also realized the background for the past few months (maybe a year) has been chemistry related. I like the picture, but this has nothing to do with chemistry. I should probably change that.
Wednesday, August 26, 2015
C# this time, and Lua
Well, after a bit of digging, I'm back into C#. I'm looking at that because of the need to examine the current status of a network. And I had something like that built in VB.net, but i couldn't figure out threading. So the program didn't play nice or update very well.
Well, I found a few webpages and figured that out. This post on dailycoding.com was one of them. That really helped get the ball rolling, so now I can run a ping function in the background and invoke updates to get things changed during program execution. I'm guessing that I finally learned something out of that one because the code had been stripped down enough to where there wasn't a huge collection of extemporaneous junk that needed beat past. Is it that hard to write code documentation that gives basic understanding without having to reinvent the wheel?
Which brings me to Lua. I started using some products from Digital Loggers. Basically the Rack Mount AC PDU. It's a great product with a great concept, but changing from Basic on the Web Power Switch to Lua on the Rack Mount AC PDU causes havoc. All the scripting type stuff that used to be easy with the Basic scripting language now has to be rewritten from scratch.
Did I mention you have to fight past bad Lua documentation? I'm not necessarily saying Lua has bad documentation. I'm saying Digital Loggers implementation of Lua is a pain.
For example...
Well, I found a few webpages and figured that out. This post on dailycoding.com was one of them. That really helped get the ball rolling, so now I can run a ping function in the background and invoke updates to get things changed during program execution. I'm guessing that I finally learned something out of that one because the code had been stripped down enough to where there wasn't a huge collection of extemporaneous junk that needed beat past. Is it that hard to write code documentation that gives basic understanding without having to reinvent the wheel?
Which brings me to Lua. I started using some products from Digital Loggers. Basically the Rack Mount AC PDU. It's a great product with a great concept, but changing from Basic on the Web Power Switch to Lua on the Rack Mount AC PDU causes havoc. All the scripting type stuff that used to be easy with the Basic scripting language now has to be rewritten from scratch.
Did I mention you have to fight past bad Lua documentation? I'm not necessarily saying Lua has bad documentation. I'm saying Digital Loggers implementation of Lua is a pain.
For example...
function test_display() DISPLAY "\1Percent %%\v" DISPLAY "\2Backslash \\\v"
DISPLAY "\1%a\v" -- current Bus A
This is an example of some code provided to change the display.
Great. Can someone tell me where the variable name is in that code block? I know the -- blocks are comments. DISPLAY is a command to show something on the display. Got that working. Great.
Secondly, on the script bit I know the line \1% indicates the first line, and anything afterwards is printed out. But where is the variable?
So if I want to put in a wait function, and then display on the screen "rebooting computer", I have to write individual reboot functions for every single device.
I could just write a wait(time in seconds, device name as string) function and call that whenever I needed. But as is, it looks like I'm having to write inline functions.
Joy. That defeats the entire purpose of object oriented coding and complex scripting languages.
Thursday, July 30, 2015
More Programming
So. After a bit of
time away, I finally had some time to work on programming. I’ve been working on the idea of a program
that teaches speed reading. Essentially,
the goal is to present words to a sentence faster than the subject can normally
read. Sounds like a great idea,
right? Except that Java isn’t really a
real time system, so getting threads to sleep for 240 milliseconds just doesn’t
work. That would equate to 250 words per
minute reading pace.
What I end up getting is entire lines of the text, in speeds
that are considerably less than 250 words per minute. Though… a little messing and reading made me
realize my conversion factor was off. It
seemed like the answer should be…
(1000 milliseconds X 60 seconds) / (word per minute pace)
I revamped the equation to take a different method. I think I was running into too many float to
integer conversion errors. Or at least
that’s what I’m going to blame.
But it looks like Java can’t do that kind of precision in
waiting. Googling lead me to a lot of
the same answer.
If the speed is slow enough then the pacing works correctly. But it looks like either 1) Java isn't capable of printing 1 piece of string at a pace of less than 300 ms, or 2) I'm not a capable enough programmer.
So, that's that. Perhaps it's time to go back to looking at C++.
Saturday, July 18, 2015
On Call
Part of my unofficial job title is trying to figure out how to solve fundamental problems. Fundamental problems are those that cause a collection of other issues. One such issue is replacing the battery pack in a Ruby. Replace the battery pack, and then you have fewer boot fix issues. Getting rid of Buypak 6.00.06 seems to be one as well. Maybe Buypak 6.00.10, too.
Anyways, solving those kind of issues involves a lot of thinking and some decent analytic software. We use SysAid for our helpdesk/ticket management software. It works pretty good. Anyways, looking at categories of service requests is hard when you have serial offenders of people who don't categorize or assign service requests. When you've got 100+ open service requests, and around 60 haven't even been given a category, it's hard to deal with the real issues. With that many open service requests, it's hard to even identify where the real issues are.
I guess I'm used to using intuition and on calls to figure out where issues really exist. On call is a special time. I'm not going to lie. Most of the time, they suck. It's a soul grinding time of 60-70 hour weeks of nothing but pure panic level. Everything is a crisis and the world is always falling apart. Very few of the crisis are real crisis. But it's a necessary evil.
Almost every on call teaches me something. Moving in towards network administration, I get less of the day to day breakage and problems that occur. In many ways, that separates my time away from crisis to solving bigger problems with longer term solutions. But it is hard to solve long term problems if you don't know what those problems are.
Its fundamental root problems that need solved to really make a difference in the amount of service requests. If you don't solve those problems, then you don't decrease the work order load. Is the issue training? Or is the issue user error? Some user error issues can be traced to training issues. Others can be traced to bad software. It's a matter of figuring out which is the real issue.
What does anyone else do to solve fundamental issues? What about on calls?
Anyways, solving those kind of issues involves a lot of thinking and some decent analytic software. We use SysAid for our helpdesk/ticket management software. It works pretty good. Anyways, looking at categories of service requests is hard when you have serial offenders of people who don't categorize or assign service requests. When you've got 100+ open service requests, and around 60 haven't even been given a category, it's hard to deal with the real issues. With that many open service requests, it's hard to even identify where the real issues are.
I guess I'm used to using intuition and on calls to figure out where issues really exist. On call is a special time. I'm not going to lie. Most of the time, they suck. It's a soul grinding time of 60-70 hour weeks of nothing but pure panic level. Everything is a crisis and the world is always falling apart. Very few of the crisis are real crisis. But it's a necessary evil.
Almost every on call teaches me something. Moving in towards network administration, I get less of the day to day breakage and problems that occur. In many ways, that separates my time away from crisis to solving bigger problems with longer term solutions. But it is hard to solve long term problems if you don't know what those problems are.
Its fundamental root problems that need solved to really make a difference in the amount of service requests. If you don't solve those problems, then you don't decrease the work order load. Is the issue training? Or is the issue user error? Some user error issues can be traced to training issues. Others can be traced to bad software. It's a matter of figuring out which is the real issue.
What does anyone else do to solve fundamental issues? What about on calls?
Tuesday, July 7, 2015
Antiquated, Arbitrary Systems
I home school my children. Why I do that is a subject of a different post. The subject of this post is to understand the contrast between public, private, and home schools. It is fairly obvious to me that public schools as we know it are a way of the past. The need to learn more material at a faster rate needs better methods of teaching that are more reproducible. The herd mentality isn't going to work as a system much longer.
Think of the average public school. You have a collection of subjects taught in a micro landscape with no tie to the rest of the world. Secondly, you have students at differing levels of interest being forced in with those students who have no interest. Third, you have an arbitrary knowledge level system that forces every student, regardless of ability, into a group. Tackling these issues has been something home schooling has never had to deal with.
And before I move on, class size doesn't matter. I had a high school size of 140 and no class I took had more than 20 people. And yet there were still people who passed high school barely capable of reading.
Now, I'm thinking the answer is going to be a combination of software and hardware. Software provides the basis and the consistency of the system, while hardware produces the interaction. Would an hour of class be as bad if the student spent their entire time standing, working on the board?
Secondly, you could have the program tailor itself to each individuals skills and abilities. No more passing because the teacher just doesn't want to deal with you any more. Computer programs have infinitely more patience than the average teacher. The converse to that is now the gifted students will move at the pace that keeps them challenged as well. If they learn a subject in five minutes and can prove competence in the next twenty, then there would be no need to keep going on for another fifty minutes. Move on to the next subject so that gifted mind can keep up.
And when the mind hits a roadblock, the system slows down and doesn't let them move on until they have mastered the subject.
I think I envision the next generation being raised by computers in individual rooms or cubicles. The teacher still exists in this environment, but their purpose is to help frustrated kids and give the hands on approach to the child that needs it.
I know the system we currently have does not work. That's quite evident. So the goal is to radically redesign the system to something that does work, and is reproducible.
I also seem to remember something years ago that stated Algebra was a college level course. And now, it's a junior high course. If you want the next level on movement, you have to get more people up to a higher level learning faster so those people can spend more time with the requisite knowledge to figure out the hard problems.
Think of the average public school. You have a collection of subjects taught in a micro landscape with no tie to the rest of the world. Secondly, you have students at differing levels of interest being forced in with those students who have no interest. Third, you have an arbitrary knowledge level system that forces every student, regardless of ability, into a group. Tackling these issues has been something home schooling has never had to deal with.
And before I move on, class size doesn't matter. I had a high school size of 140 and no class I took had more than 20 people. And yet there were still people who passed high school barely capable of reading.
Now, I'm thinking the answer is going to be a combination of software and hardware. Software provides the basis and the consistency of the system, while hardware produces the interaction. Would an hour of class be as bad if the student spent their entire time standing, working on the board?
Secondly, you could have the program tailor itself to each individuals skills and abilities. No more passing because the teacher just doesn't want to deal with you any more. Computer programs have infinitely more patience than the average teacher. The converse to that is now the gifted students will move at the pace that keeps them challenged as well. If they learn a subject in five minutes and can prove competence in the next twenty, then there would be no need to keep going on for another fifty minutes. Move on to the next subject so that gifted mind can keep up.
And when the mind hits a roadblock, the system slows down and doesn't let them move on until they have mastered the subject.
I think I envision the next generation being raised by computers in individual rooms or cubicles. The teacher still exists in this environment, but their purpose is to help frustrated kids and give the hands on approach to the child that needs it.
I know the system we currently have does not work. That's quite evident. So the goal is to radically redesign the system to something that does work, and is reproducible.
I also seem to remember something years ago that stated Algebra was a college level course. And now, it's a junior high course. If you want the next level on movement, you have to get more people up to a higher level learning faster so those people can spend more time with the requisite knowledge to figure out the hard problems.
Sunday, July 5, 2015
post CCENT
I passed the CCENT. Grading criteria was between 300 and 1000, and passing was 803. I scored a 907. Hooray for me.
The test was copyrighted 2013. There was a lot of subnetting through out. Not much IPv6. There was four question problem on OSPF. Another was on security settings. Which reminds me. I need to test one of the configurations they performed. Because I think I know the answer, but I don't know if I was correct or not.
I guess now on to something else. Back to studying the stuff I've been studying. I'm currently reading Simple Nature by Benjamin Cromwell. After that, it's on to Mechanics and then my study of physics takes a temporary break.
Other stuff I'm currently reading include The Book of Five Rings by Miyamoto Musashi. After that one is finished, it's off to The Hacker Playbook by Peter Kim.
There's an entire list of books after that, but that collection will keep me good for several days.
Remember: people don't grow without intentional effort.
The test was copyrighted 2013. There was a lot of subnetting through out. Not much IPv6. There was four question problem on OSPF. Another was on security settings. Which reminds me. I need to test one of the configurations they performed. Because I think I know the answer, but I don't know if I was correct or not.
I guess now on to something else. Back to studying the stuff I've been studying. I'm currently reading Simple Nature by Benjamin Cromwell. After that, it's on to Mechanics and then my study of physics takes a temporary break.
Other stuff I'm currently reading include The Book of Five Rings by Miyamoto Musashi. After that one is finished, it's off to The Hacker Playbook by Peter Kim.
There's an entire list of books after that, but that collection will keep me good for several days.
Remember: people don't grow without intentional effort.
Wednesday, July 1, 2015
As the world burns...
The world burns. I
study.
I’m concerned with Dora (Discover, Offer, Request, ACK) the
DHCP explorer and her friend Bubu (broadcast,
unicast, broadcast, unicast) and learn on source, forward on destination.
Open suckiest path first:
Hello, dead beat dad. Losers suck
right? Losers suck up. Ack.
(link state packets for OSPF.)
Basic ACL near destination
Extended ACL near source
Deploy access class to limit access to console
Default information-orginate
Ip helper-address
I’ll know Thursday if I pass. Wish me luck.
Sunday, June 14, 2015
Rats vs Unicorns and the educational system
I’ve been spending a lot of time thinking about many
different things. Mostly “why” type of
questions. Perhaps I should
elaborate. Or not. I don’t know.
I think the real problem is two-fold.
See, I don’t think I learned what I should have learned in school. Reading, writing, and arithmetic are general
subjects, but those aren’t the primary purpose of sending people though
school. As a creator of success, school
is an absolute failure. It’s been highly
touted, though I’m not sure highly researched, that if you take 100 people out
of any school the results will be vastly different. Out of those 100, perhaps 10 will be
moderately wealthy. 1 will be supremely
wealthy. And 90 will have zero or
negative net worth.
If that’s the case, then what are schools teaching? Because if 90 out of 100 have a negative net
worth, then that’s a fairly large failure rate.
What metric is being used to measure success?
I went through those systems. I spent a lot of time learning the wrong
thing. And I’ve also spent a lot of time
trying to learn and relearn the correct things.
The only problem with that is I
don’t know what I need to be learning.
This shouldn’t be something that I have to redesign by hand. It’s 2015.
Why haven’t we figured out how to train and teach for success yet? Is the answer so complex that humans are
incapable of understanding or developing the solution? Or is it that our mental concept is so
self-centric that we can’t think of long term solutions for education?
I’m beginning to think the answer relates to rats and
unicorns. There’s a mental separation
between those two animals. They are more
different than they are the same.
Unicorns are special, unique creatures.
They are these magical beings that are impossible to catch.
Rats are simple creatures.
There are more of them than humans.
There are rats everywhere. There
is roughly nothing unique about them. A
good 80% (assumption thrown in based on Pareto principle) of what makes a rat a
rat is no different than any other rat.
It’s only via minor parts is the average rat ever special.
So what do rats and unicorns have to do with education and
technology in general?
There aren’t any unicorns.
There are a lot of rats.
Remember those two facts.
The next time someone discusses the uniqueness of what their selling,
try to determine what is truly unique.
Mostly what you will find is a rat in a hat. 80% the same as every other alternative. Really.
There are no unicorns.
Just a bunch of rats with different color fur, or a hat, or something
else that makes the rat not look like a rat.
Sunday, June 7, 2015
Garbage In/Garbage Out
I’ve been thinking of the concept of garbage in / garbage
out. It’s a computer science
concept. It’s an interesting
concept. The idea is that a computer is
capable of processing all sorts of data, not just good data. So if you give a computer bad data, it will
spit out bad results. Makes perfect
sense in the computer world. But what
about applying the concept to life?
Seems perfectly applicable to me, but it’s hard to interpret
what constitutes good or bad information.
The basic concept I’m trying is limit the type of music I intentionally
listen to. I find that it’s hard to
maintain the correct mindset when being assaulted by lyrics that preach the
wrong kind of information.
Building the concept of where I want to be in relation to
where I am is only limited by what my mind thinks I’m capable of. But when you feed your mind information
telling it that something can’t be done, then you are defeating yourself. Logically, your brain is sitting there
telling you that the music you are listening to is not affecting you. But it is, and the effect is incredibly
subtle. It’s something easy to test,
though it requires a bit of discipline.
What I did was eliminate music with words from my day to day
listening.
I guess I spent too much time listening to people doing bad
things to other people. Or listening to
music written by people who are convinced the world is out to get them. Or those that think the world owes them something. I’m generally more inclined to think the
world is ambivalent to individual existence.
Life is not fair, or easy. But
that doesn’t mean there is plenty of great stuff to pull out of the world. In the grand scheme of things, the individual
human life spans a very short period and has very little impact. So really, our lives don’t matter all that
much.
But mentally, people don’t want to believe that. They want to believe in the importance and
reach of their life. But it’s simply not
the case for the most part. So you get a
collection of garbage thrown in your brain that tells you the wrong thing and
leads you to the wrong conclusions. And
generally, these conclusions are very logical.
Andy Andrews describes it as “thinking logically to the wrong conclusion”.
So my recent approach has been to take in less garbage with
the hopes of getting better information out.
I recently took a 4 day weekend after 17 straight days at work. I had to work 17 straight days because I had
been focusing on solving the wrong problem.
See, there’s the right problem and the wrong problem. If you solve the wrong problem, you have to
keep solving the problem over and over again.
It just doesn’t work. What I
finally realized in those last three or four days was I could have easily
avoided working 17 days straight if I had done the correct thing. What I needed to do was document better. If I had documented better, then I could have
turned anyone calling me to look at the document in question and follow it to
its conclusions. If the document was
incapable of producing an answer, then there must have been some other issue.
What good does it do to create wonderful systems that have
no documentation or notes?
Monday, May 25, 2015
Leg Work
I always wanted to write a program that took forever to run
just due to the amount of processing it did.
Now, I think I’ve got one.
Unless I remember to run the thing frequently, it takes
about 85 minutes to process through all the files I’ve collected to watch the
status of my network. That’s not
pleasant, but it’s working on getting better.
It shouldn’t take as long the next time, as I’ve written in a few checks
and balances that prevent it from re-checking every single file over
again. I end up running a “select
everything and see if you return nothing” comparison. Afterwards, I move the folder off to a
different directory to archive and eventually clean up that directory.
Which, all of that seems to be working properly. For the most part. There are still some issues I need to debug,
and some error conditions that need to be solved. But it’s working better than it did. The second part is that I’ve finally got it
to where it will take multiple input units in the same file, so you don’t have
to have multiple scripts logging in every five minutes. The next part is to start working on NAT
table translating and interpretation.
I’m not sure how I want to do that as of yet. Show
ip nat translations gives all the translations, but is that enough
information? What else would I want?
I think that’s the basic problem of all network security
people. You want to gather information,
but it begs the question of what the correct amount of information is, and what
really needs stored. And there is always
the question of when enough is enough.
Flipping back through my Cisco book, it looks like I’m going
to need show ip nat translations verbose
for several different reasons. The main
reason is that is tells when that connection was last used, and that’s vital to
proper identification of what has happened.
It provides the “when” and “how long” needed to trace information back
to the source.
Show ip nat
translations just gives a static view of an event that happened. The
connection could have lasted for seconds or it could have lasted for
hours. There is no way to tell. So the need is to translate the verbose
method of the call.
Where do I go from there?
I don’t know. At some point I’ve
got to figure out how make Apache work the way I want it to. But that?
That’s another day.
Tuesday, May 19, 2015
The next steps
Now that the Routing and Switching class is over, it's time to get ready for the CCENT. I'm aiming for that in the next month. I was aiming for two weeks, but I can get a voucher for half-priced testing, so I'm going to go for the voucher.
That being said, let's go back to network security.
I had a AHA! moment last week on network security, and it leads me to believe a very large vendor does not really provide security updates. They also have some serious problems with their code. It's all Apache web server, but it's an unpatched version of Apache that still has some serious vulnerabilities.
About a year ago, or maybe a little less, I realized when we replaced a router, all of our internal vulnerability scans started passing. It was weird. But I didn't know what it could have been. Over the past couple of weeks, I've been working on replacing their router with my own. After breaking our internal vulnerability scanner for a couple of weeks, our vendor finally fixed the device.
About the same time, we ran into a situation where a location suddenly started showing up as failing when it had been passing. Thinking back, during the intervening period we had upgraded the site and swapped out the equipment. At that point, we had swapped out a router. And suddenly the site started failing scans.
Not suddenly, but it seems like it. So I started thinking about what could have gone wrong during the upgrade. Everything is built from standard equipment. The results are pretty predictable and cookie cutter. So how did this cookie fall out of the cutter mess up? We'd tried a different configuration with the router, and the site ended up failing internal scans.
So, why did this router fail and other pass? It's pretty simple: access control lists. There was an implicit deny on the VLAN with the internal scanner.
Now I know why my scans are all passing. The door to the scanner is closed. And the equipment we're dealing with is no way near as secure as we thought. All because of Apache.
It's also the realization that I can fake a passing scan in less than 30 minutes by simply throwing an ACL in every single router we have. It'd be easy. I already know the syntax. Come to think of it, I could make it highly precise, so it wouldn't be something I could automate.
Anyways.
It just pisses me off that a multi-national company can't patch Apache. Or, that I have to find the holes in their system.
Now, off to figure out Apache on my own so I can ramp up my network base lining and turn all the data I've collected into something usable.
I should probably write an article on that. It's basically a combination of Java, mySQL, and some Ubuntu cron jobs.
That being said, let's go back to network security.
I had a AHA! moment last week on network security, and it leads me to believe a very large vendor does not really provide security updates. They also have some serious problems with their code. It's all Apache web server, but it's an unpatched version of Apache that still has some serious vulnerabilities.
About a year ago, or maybe a little less, I realized when we replaced a router, all of our internal vulnerability scans started passing. It was weird. But I didn't know what it could have been. Over the past couple of weeks, I've been working on replacing their router with my own. After breaking our internal vulnerability scanner for a couple of weeks, our vendor finally fixed the device.
About the same time, we ran into a situation where a location suddenly started showing up as failing when it had been passing. Thinking back, during the intervening period we had upgraded the site and swapped out the equipment. At that point, we had swapped out a router. And suddenly the site started failing scans.
Not suddenly, but it seems like it. So I started thinking about what could have gone wrong during the upgrade. Everything is built from standard equipment. The results are pretty predictable and cookie cutter. So how did this cookie fall out of the cutter mess up? We'd tried a different configuration with the router, and the site ended up failing internal scans.
So, why did this router fail and other pass? It's pretty simple: access control lists. There was an implicit deny on the VLAN with the internal scanner.
Now I know why my scans are all passing. The door to the scanner is closed. And the equipment we're dealing with is no way near as secure as we thought. All because of Apache.
It's also the realization that I can fake a passing scan in less than 30 minutes by simply throwing an ACL in every single router we have. It'd be easy. I already know the syntax. Come to think of it, I could make it highly precise, so it wouldn't be something I could automate.
Anyways.
It just pisses me off that a multi-national company can't patch Apache. Or, that I have to find the holes in their system.
Now, off to figure out Apache on my own so I can ramp up my network base lining and turn all the data I've collected into something usable.
I should probably write an article on that. It's basically a combination of Java, mySQL, and some Ubuntu cron jobs.
Wednesday, May 13, 2015
end of a semester
Routing and Switching is over. Finished the final with an 85, closed book closed notes.
That should give me an A for the semester. I need to prepare for the CCENT for the next 2-3 weeks, and then go take that. Based on the Routing and Switching final, I need to study OSPF more. I missed more than I would have liked on that.
Scaling Networks is next. The book is on order. I spent a few minutes looking through the chapter headings on the final book, and found the PPPOE section. Yeah. Book 4, right before the CCNA.
Moving on. Back to site construction tomorrow, now that finals are complete. Yay.
That should give me an A for the semester. I need to prepare for the CCENT for the next 2-3 weeks, and then go take that. Based on the Routing and Switching final, I need to study OSPF more. I missed more than I would have liked on that.
Scaling Networks is next. The book is on order. I spent a few minutes looking through the chapter headings on the final book, and found the PPPOE section. Yeah. Book 4, right before the CCNA.
Moving on. Back to site construction tomorrow, now that finals are complete. Yay.
Monday, May 11, 2015
construction
Working on a site out of town. Learning many new things. The crash course in PPPOE was interesting.
Routing and Switching class final is tomorrow. Need to schedule the CCENT for about 2 weeks from then. That should give me enough time, without being too much time.
I think I've come to the conclusion that IPv6 will permanently be a WAN interface technology, while the world uses dual stack routers to NAT into IPv4 private addresses.
One bad tracert and a nefarious person could find your entire inner networking scheme. But that doesn't work if NAT is involved. The door shuts at the front door, and not somewhere inside. That's really the problem with globally routable IP addresses inside your network. If you don't have tracert blocked, you'll end up giving away your entire network structure.
It's not the "one shot, one kill" approach to network security. There isn't such a thing. There is only security in depth. Walls and trenches and gates and guards and ACLs and NAT and every other thing you can possibly through between you and the outside world. Maybe some machine gun nests and razor wire, as well.
Routing and Switching class final is tomorrow. Need to schedule the CCENT for about 2 weeks from then. That should give me enough time, without being too much time.
I think I've come to the conclusion that IPv6 will permanently be a WAN interface technology, while the world uses dual stack routers to NAT into IPv4 private addresses.
One bad tracert and a nefarious person could find your entire inner networking scheme. But that doesn't work if NAT is involved. The door shuts at the front door, and not somewhere inside. That's really the problem with globally routable IP addresses inside your network. If you don't have tracert blocked, you'll end up giving away your entire network structure.
It's not the "one shot, one kill" approach to network security. There isn't such a thing. There is only security in depth. Walls and trenches and gates and guards and ACLs and NAT and every other thing you can possibly through between you and the outside world. Maybe some machine gun nests and razor wire, as well.
Friday, May 1, 2015
Onwards towards mastery (not even .01% complete)
I’m still continuing with my project towards mastery of
Java. I’ve said this before, but that’s
10,000 hours of working on Java programs.
I should probably be working on something like C++, but I’d rather
not. I spent a lot of hours on C++, and
I just got pissed rewriting the same program over and over. Or forgetting what one section meant and having
to rebuild the entire thing from scratch when something impossibly stupid quit
working.
Anyways, after 4 and a half hours, I can tell a difference
in my technical abilities. Yeah, there
is still a lot of things to do and places to go. I can tell you I’ve gone off in directions
I’ve only contemplated going before.
Now, those areas are becoming a reality.
And I’ve picked up this blog at over 7 hours. Yeah.
Can you say leaps and bounds? I’m
beginning to see what is described when mastery is discussed. 7 hours of programming later, Java makes a
lot more sense and doesn’t seem to be causing me near as many headaches. I’ve probably done things in the slowest and
most backwards way, but I don’t care.
It’s been a great learning experience.
I wish I could code for hours and hours on end, but I don’t have that
kind of time. Though I do admit, what
I’m working on would definitely be useful in the creation of things I do.
It really feels good watching an idea come together, even
though it has taken a considerable amount of time. What was originally just some random pipe
dream is moving towards half complete.
There’s still a lot of changes, and some hard information to go
through. But I’m becoming convinced the
path to mastery is a worthwhile path.
Though mentally, there’s the realization that I haven’t even
completed 1/10th of 1 percent of the task. But there’s a lot of fun to be had along the
way. Because really, the idea of staring
at nothing and producing something great off the top of your head only works
when you’ve done the prerequisite work.
And most haven’t.
Thursday, April 9, 2015
Logical fallacies
I keep seeing posts wander through the Internet about a
husband that wants to pay his wife to stay home with their child. In the end, he’s mad because he can’t pay her
his perceived salary of close to $100,000 per year and still pay the
bills.
Let me say this up front: my wife is a stay at home mom of
three kids, not one. She has a very hard
job in taking care of the household.
The value my wife adds to my life is incapable of being counted. If I lost my wife, my life would be devastated from the loss of her. Not from the loss of what she does. I love her to death.
But it’s not a $100,000 a year job on the open market.
It’s a horrible argument that is used to trump up the job of
stay at home moms. It’s an argument made
by people who don’t know business. It’s
an argument made by people who want money for breathing. If any one of these people really forked out
the kind of money they talk about, they would quickly change their
standards.
But let’s get to the real problem with the argument. The original writer of the argument assumes
that everything a stay at home mom does should get charged at a different
rate. That’s just crazy. Let’s make an adequate comparison. I have an office. I keep it relatively clean most of the
time. I don’t get paid a dime to clean
my office. I clean it because I’m not a
slob, and because I’m an adult. I clean
it because it’s part of presenting a professional appearance. But I don’t get paid a separate rate to clean
my office. I don’t work for a union that
says I can only do one single job. I do
it all because that is what I was hired to do.
I have to do my job, plus all sorts of other little things that
seemingly have nothing to do with my job.
Clerical? Tied in with the
package. Negotiation? With the package. Data entry?
Part of the job.
The major invalid assumption of the argument is that each
service is being purchased ala carte from an outside vendor. That can be done, but hiring ala carte is
about hiring a professional. And hiring
a professional means you get someone who works faster than the average person
at their job.
Let’s compare laundry.
If I was to hire ala carte for laundry, then I would bag my laundry up,
and leave for work a few minutes early.
I would stop by a laundromat and drop off my laundry, and pay by the
pound to get someone else to clean my laundry.
I would come back on my way home to find my laundry complete and ready
for pickup. Total amount of my time: 20
minutes. And laundry goes for about $1 a
pound. Given an adequate clothes supply,
laundry could be dropped off once or twice a week without real problems.
Following that same line of reasoning, you could easily
negotiate salary positions to handle every single household task. And once the child becomes school age, then
the amount of time hired to do those tasks drops dramatically due to the child
being in school. The average day would
go from 10 hours to 5. Half the time
involved? Half the pay involved. Unless the nanny is hired at salary. And that’s what the intelligent nanny is going
to do to even out their paycheck.
Now, I'm excluding places where living expenses are out of control Those places are just flat crazy. And $100,000 in those local dollars is really not the same amount in comparison to other locations.
Realistically, I've had to think about what would happen if my wife died. And in that case, what would I do? Really, I could replace my wife with a 15 year term life insurance policy for about $500,000. In comparison, I need about $800,000 on me. That's from the purely financial perspective.
Due to getting out of debt, I don't have $800,000 on me. I have $400,000. So should I die, my wife is good for 5-6 years. Should my die, I'm screwed as I don't have anything on her. Kids each have a $10,000 burial stipend tied to my life insurance policy. And term life is cheap. I pay about $35 per month.
Saturday, April 4, 2015
Speaking of Java and MySQL
So, I finally got my Java/MySQL connection working.
Hooray!
https://help.ubuntu.com/community/JDBCAndMySQL
Was where I learned to fix the "class not found issue".
After that, I dug up http://www.tutorialspoint.com/jdbc/jdbc-quick-guide.htm to get instructions on how to use/connect to the database.
Afterwards, I was capable of spitting out information to the system console from the database. Holy crud!
Definitely making progress today.
Yay.
Hooray!
https://help.ubuntu.com/community/JDBCAndMySQL
Was where I learned to fix the "class not found issue".
After that, I dug up http://www.tutorialspoint.com/jdbc/jdbc-quick-guide.htm to get instructions on how to use/connect to the database.
Afterwards, I was capable of spitting out information to the system console from the database. Holy crud!
Definitely making progress today.
Yay.
Wednesday, April 1, 2015
The first two hours
In trying to program 10,000 hours worth of stuff in Java, I
realized I was going to be building a whole lot of stuff. After two hours, I’ve finished the first
program. It’s a translator that takes
CIDR notation information and turns it into Snort rules. The entire purpose is to block entire
countries. The problem is countries are
large and have a lot of IP addresses.
Blocking China takes a few thousand lines of CIDR notation. And aggregate it all into smaller
routs? Highly unlikely. So you end up with 3,000 lines that you can
either manually parse through or write a program to parse through. I chose to write a program.
And I’ve also come to the realization that in the run to get
10,000 hours, I’m going to program a lot of stuff. That is a lot of time. At 30 minutes per day, that’s 54 YEARS. So at some point, I’m definitely going to
have to put in a lot more effort than I currently am.
So now that the Snort builder is done, what’s next? Probably moving back to my automatic network
test application. Which is mostly
writing text parsing. From there, I’ve
got to figure out how to design a database structure and get the information
into a database. From the database, I
have to get data into a web form and display it on a web server that doesn’t
exist.
Just a slight bit complicated, but I’ve got nothing but
time.
After that, there's a SHA application I've been contemplating. SHA is secure hash algorithm. It's essentially a long number that indicates the properties and data of a file. Well, if the SHA is the same for two files, then the file is the same. So if you have a desire to back up data, you can create a SHA of every file on your system, and every file on the remote system. Compare those two files together, and identify which files need transferred. Do so, and you synchronize the data on both systems.
It's an idea. Like I said, 10,000 hour is a lot of time. A whole lot of time.
side note: I realize this is April Fools Day. I am not a practical joker.
Friday, March 27, 2015
Pareto Principle in Action
My last experiment started as a practical examination of the
Pareto principal, otherwise known as the 80/20 rule. I had been making straight B’s on my Routing
and Switching tests, and I wanted to consistently improve them to A’s. In order to do that, I needed to know how much
time I was spending getting that B.
So I changed my study habits slightly, and decided to keep
track of time spent studying. I’d also
read something about two competing South Pole expeditions. One ran as much as they could every day. Some days they didn’t go anywhere because the
weather was bad. The other went 15 miles
a day, regardless. They went 15 miles,
and stopped for the day. So I decided to
try that principal with studying. And
the results were pretty remarkable.
I went from an average low B to a high A on the next
test. Hooray for me. Anyway, this was the process.
Read any previous notes I had made.
Grab a highlighter, and read 15 pages, highlighting what I
thought was important.
Copy those highlighted notes into my printed notes.
Quit for the day.
Return tomorrow.
In doing this process, I found it only took about an hour a
day, so I really had more time to work on other things. Normally, I would have spent 3-4 hours
straight on Saturday or Sunday reading and highlighting. Granted, chapter 7 took me 387 minutes to
complete, but that only averaged 64 minutes per day. I have yet to take the test on that chapter,
so I’m not yet sure how effective this process has been for that chapter. But I do know the previous chapter resulted
in huge positive results.
I think I missed a lot of the main part of this that makes
it so effective. The main effective part
is that you study a little bit every single day. It’s not a brain destroying group done once
or twice per week. It’s simply an hour
per day, every single day. In that way,
your brain doesn’t have time to stop thinking about what you have studied. On top of that, by the end you’ve read and
reread your notes numerous times. Then,
the information is more likely to stick.
We’ll see what happens with chapter 8. Though I have to admit, single area OSPF just
doesn’t interest me that much.
Monday, March 23, 2015
Outliers
I read Malcolm Gladwell's book Outliers. I think I've come to a distinct set of realizations afterwards. It's a collection of things rumbling through a head that doesn't quite understand what is trying to be said.
I've watched through the YouTube version of Patterns of Conflict once, and I'm working on watching it again. I've often wondered if I could write distinct lines in my life between things I read or done with the realization that those things are the future points of tomorrow. They are the points when life departed and the old fell away.
I know Patterns of Conflict will have an impact on my life. It already has. Several statements have already begun sticking in my mind, leading to wanderings down paths that just aren't normally taken. The ability to deconstruct and reexamine thoughts gives way to new perspectives. I've often thought going to college is like staring in through the wrong side of a peep hole into a three story house, without the realization that there is even a house to be looked at.
I've also began wondering what would happen if one intentionally went to spend the 10,000 hours it takes to reach mastery of a subject. In doing so, I contemplated buying the www.10000hours.com domain name, but it was taken. I don't even know what I'm going to do with it, but I think I've got an idea. I think it's what Driven was initially created to do. I just never finished that project, and it went by the wayside.
I guess the goal is then quite simple. Pick a project, and start a timer. Figure out how much of your free time you have spent on the path towards mastery. It would be great if you could suddenly know where you are on that path. But without extensive time management analysis, I don't think that's possible.
But it might make a good story here and there.
I've watched through the YouTube version of Patterns of Conflict once, and I'm working on watching it again. I've often wondered if I could write distinct lines in my life between things I read or done with the realization that those things are the future points of tomorrow. They are the points when life departed and the old fell away.
I know Patterns of Conflict will have an impact on my life. It already has. Several statements have already begun sticking in my mind, leading to wanderings down paths that just aren't normally taken. The ability to deconstruct and reexamine thoughts gives way to new perspectives. I've often thought going to college is like staring in through the wrong side of a peep hole into a three story house, without the realization that there is even a house to be looked at.
I've also began wondering what would happen if one intentionally went to spend the 10,000 hours it takes to reach mastery of a subject. In doing so, I contemplated buying the www.10000hours.com domain name, but it was taken. I don't even know what I'm going to do with it, but I think I've got an idea. I think it's what Driven was initially created to do. I just never finished that project, and it went by the wayside.
I guess the goal is then quite simple. Pick a project, and start a timer. Figure out how much of your free time you have spent on the path towards mastery. It would be great if you could suddenly know where you are on that path. But without extensive time management analysis, I don't think that's possible.
But it might make a good story here and there.
Monday, February 2, 2015
I've got a thought running through my head. What if everything we do can be described as the difference between attrition warfare and maneuver warfare?
Attrition warfare is the tactical decision of the 19th century, and was codified by Carl von Clausewitz in On War. von Clausewitz argued heavily for the kind of attacks seen during World War I, in which soldiers lined up and charged at each other. These were heavily destructive battles that were exceptionally costly and ineffective. This strategy persisted far into the Cold War and beyond.
It has mostly persisted due to simplicity. It's a lot easier to teach Attrition War versus Maneuver War. Now, jump back to the point at which von Clausewitz was writing On War. He was a Prussian, writing about the battles of Napoleon. Shortly after, the Prussian level of thinking also created the basis of the modern education system. Prussia needed to move into the 20th century as fast as possible to prevent something like Napoleon from happening again.
Now, what the Prussians created was an attrition war versus the under-education of the the people. In many aspects, that is still what the entire education system is based on. But Attrition War has numerous problems. It is costly in terms of human lives, and generally ineffective versus a decent defense.
Against the proper defense, attrition warfare costs thousands of lives.
Where does that all tie back towards Maneuver Warfare? I think Boyd can answer that question.
Attrition warfare is the tactical decision of the 19th century, and was codified by Carl von Clausewitz in On War. von Clausewitz argued heavily for the kind of attacks seen during World War I, in which soldiers lined up and charged at each other. These were heavily destructive battles that were exceptionally costly and ineffective. This strategy persisted far into the Cold War and beyond.
It has mostly persisted due to simplicity. It's a lot easier to teach Attrition War versus Maneuver War. Now, jump back to the point at which von Clausewitz was writing On War. He was a Prussian, writing about the battles of Napoleon. Shortly after, the Prussian level of thinking also created the basis of the modern education system. Prussia needed to move into the 20th century as fast as possible to prevent something like Napoleon from happening again.
Now, what the Prussians created was an attrition war versus the under-education of the the people. In many aspects, that is still what the entire education system is based on. But Attrition War has numerous problems. It is costly in terms of human lives, and generally ineffective versus a decent defense.
Against the proper defense, attrition warfare costs thousands of lives.
Where does that all tie back towards Maneuver Warfare? I think Boyd can answer that question.
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?
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.
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)
{
}
}
}
Subscribe to:
Posts (Atom)