Coding

Learning Python with Udacity

udacity_cs101

Just a note, this is not any sort of advertisement…

So I know some basic programming syntax, generally centered around C and C++ which I learned in college.  The C was through several Engineering based classes and the C++ was from a single Computer Science course I took when I had a semester to fill before transferring schools and didn’t want to completely lapse on the studying, schooling lifestyle.  I also know how to code HTML but that is barely programming by any stretch. 

I have tried various self taught methods to teach myself more C++ and some Java with little success.  I have some books to make Android apps but I have yet to get anywhere with them.  Then, I believe through the Windows Weekly podcast, I found out about this deal called Udacity. The first course offering is to learn how to code a basic Search Engine using Python.  I’ve found it pretty well designed though a handful of the examples were a little too abstract to be meaningful (I’m looking at the one about cost and RAM and memory and compute cycles which I still don’t understand).

Anyway, I’m done three out of the seven modules and I’m rather proud of the fact that I’ve actually managed to stick with it and learn some things.  I’ve got a little script now that I could use to extract links from any webpage or even a number of webpages, though right now all I know how to do is display them.  Presumably we’ll learn how to compile them into some sort of file or database.  My biggest hurdle really is I keep wanting to use C and C++ syntax.  Things like adding ; at the end of lines or 1++ or variable++.

It’s not a terrible problem really.

Procrastination Isn’t Always Bad

I almost always have a couple of dozen projects I’m working on.  These are not projects for work or even household projects that my wife wants me to take care of.  These are personal projects of varying importance though generally of little overall *real* importance.  For example, at the moment I am working on:

– Building a solid automated online streaming radio service.

– Playing through several video games.

– Burning old family VHS tapes to DVDs

– Building a small corner shelf for putting my games and DVDs on in the bedroom to reduce the clutter in the closet.

– Repairing several laptops i have that don’t work.

Etc…

Anyway, Several of these projects I’m “working on” are continual, like playing through various games.  Others I have not even started on, though I still would say I’m “working on them”.  Some I may never start.  The point is that I tend to think about a large string of projects in the back of my mind almost constantly.

Often when i have “free time” I do something completely different when I should be doing “a project”.  I have a tendency to procrastinate on these things.  Often this procrastination though is good because inevitably, I get an epiphany on some project that makes it extremely simple and quick and it’s the best possible solution.

The latest example, which inspired this rambling blog post involves my home network.  It’s not huge but it is larger than most people’s home networks and it “evolves” much more than most people’s home networks.  Currently, the phone line feeds the cable box thing (we’ll call this the Residential Gateway or RG for lack of  better term though I’m not sure it’s actually accurate).  It comes out of the RG and feeds a router.  This router was put in by the cable guy when he came out to replace the RG when it broke.  The thing is, he left the old router in place (also provided by the phone company).  This initially created some issues since it gave me two IP address sets which is annoying when you’re doing a lot of NAT translations for things like streaming radio and VNC access to half a dozen machines as well as hosting FTP, HTTP, etc.  I also own a switch and a hub, though I don’t use the Hub because "hubs suck”. 

I lived with forwarding all ports to the internal router for a while but inevitably I swapped the Hub for the switched, changed the IPs of all my machines and rebuilt the NAT table.  it was a one time pain but it makes things simpler.

I put the old router aside until I discovered the the new router does not support the older less secure Wireless protocols that my Nintendo DS requires.  So the old router went back in almost exclusively for use of the NDS, whoes IP address I don’t care about.  It also serves as an access point for guests or whatever to keep them off of the main network.

The issue I had recently however involves a remote location in the house in my wife’s office.  She has a PC out there for “office use” and I put a second PC out there recently with a KVM for my “experimenting etc” use.  Currently it hosts Lameazoid Radio, an OpenSIM server, a session of Outlook that is attached to archives of all of my old email PST files and I use it for downloading Torrents.  The main point is, it creates a lot of network traffic.  The problem is, there’s only one physical cable running to the office and running a second one would be a pain.  the obvious answer is, put in a switch.  I could use the hub but I fear the high traffic of the one machine would cause lots of issues for the office computer and visa versa.

I’d pretty much resolved myself that I can afford a 30 dollar switch to throw out there.  The problem is that i just got off of a huge backup with my “personal budget” from buying several expensive items “in advance” and then paying back the budget.  I’m tired of being broke for the past 2 months on my personal budget.  Also, Black Friday is coming up and I intend to have a chunk of change to spend on good deals.

So I can drop money and be short on BF, or i can wait a few weeks and listen to my wife occasionally complain that the office PC doesn’t have internet access.  So I decided to “sit on” or procrastinate this project.

Then I had the epiphany.  I can move the main Router over to where the switch is now and swap them out.  The only thing plugged into the main router besides the long network cable running across the room tot he switch is an old laptop I was trying to project but i can’t keep running anyway.  It can be dropped.  I was going to plug a media center PC into it for Hulu but Netflix on the Wii eliminates the need for that and I already have a long cable running back to the TV area from before the newer Router was there anyway I can use.

The point is, that I don’t NEED it to be where it is.  Then I get my switch back.

The real point is, because I didn’t rush into putting in the hub or rush out to buy a switch, i came up with the best solution AND it doesn’t cost me anything. I do this a lot.  I did it at my old job all the time.   I’d sit on a project until I’d realize I can combine two obsolete items into something useful or whatever.  The point is, sometimes it’s good to procrastinate.

Project: Radio DJ Automation

If I earned a nickel for everything I’ve ever created that no one else cares about I’d probably be about to earn another nickel with this next post.

Anyway, one of my many pet projects has been setting up a private internet radio stream.  I actually toyed with the idea for a bit of building a small FM transmitter and going full on Pirate Radio but I decided that the current state of media doesn’t necessitate the need for radio waves when the internet is right there just waiting with a much broader reach.  The real issue is that it mostly just reaches me.

The nice part is, I don’t really mind.

I plan to put up a little page for Lameazoid Radio, but I’m still fleshing out the details.  A few people know the URL of the stream (hint: stream DOT) but I have no idea if they remember it and I doubt anyone listens.  I suppose the question is, why would anyone want to listen?  Can’t you get the same thing from your iPod?

This question includes myself.  Wouldn’t it be more beneficial to just load up the iPod and let it rip?  I do have some answer to this.  For example, my iPod isn’t large enough to hold my entire music library if I want it to.  It also is incredibly poor at shuffling music in a meaningful manner.  The Radio Automation software I’m using lets me sort things into nice themed play rotations.  i can interject little funny clips in at intervals as well to help break up the flow. 

I also run a lot of Podcasts.  The problem with using the iPod for Podcasts is that when it’s in my iTunes library, waiting to be played, I feel obligated to listen.  If it’s out of my control and playing on it’s own I can forgive and forget the playout if I miss one or come in partway through and leave early.  It’s expected I guess with radio that I may miss something.  It’s basically a subtle psychological point that works behind the scenes.

Anyway, I’ve managed to work the kinks out of the automated updates on Podcasts which leaves a few other projects that I want to implement on the table. 

First, I need to record some promos.  I want to make a few music based tags and a few others promoting the shows on the stream.  This basically requires time and a microphone.

Second I need to finish fleshing out the lineup.  I want to run new shows 7 days a week at 4 and 7.  I’ve got both slots about half filled now.  I also would like to find another short bit repeating news segment to compliment Tech 5 which plays every hour where there isn’t a show right now.

I also need to come up with something for the over night.  It’s likely no one will ever listen in the overnight so just running music all night is the easiest bet but I do like the idea of having some sort of “programming” there.  I’m thinking of pushing some audiobooks or something for lengthy periods but missing part of an audiobook is worse than missing part of a podcast.  I’m also thinking of compiling together my longform Techno mixes and running those.  Also possible some concerts in order.  Basically I’m looking to run longer blocks of related content in the overnight.

Thirdly i want to add Live Reporting.  I’ve set up Skype on this PC with auto answer for known callers.  This means i can call in and it’ll pick up.  Right now doing this kills the stream audio and it doesn’t return.  I have some software (freeware) that I believe I can use to create a gate that will shut off the stream when a call comes in and then resume it afterwards.  This would mean if I wanted to do “live reporting (to no one) I could call in through Skype on my phone.  Or better yet, if say, the GNR crew wanted to broadcast live they would simply call into the Skype and it would play.  On top of this I want to set up Skype to auto record and possibly auto rotate these short news bits.

Finally, at least on the list now, is to set up an automatic “now playing” Tweet.  I’m not sure the best way to accomplish this yet though the software does support a now playing.txt that is used by Icecast to set the title.  What wil be more likely is I’ll set up timed tweets for the time each show starts, like on @lameazoid.

Automatic Updating of New Podcasts with Radio DJ

That has to be one of the lamest topics I’ve ever made for a blog post but it’s at least descriptive.

This is a short guide for users of the Free RadioDJ software who want to automate the process of adding new podcasts to the rotation.  This is mildly complicated but not overly so and it does require the use of outside programs to make it work.  For this example, I’ll be using the NoAgenda podcast.

The first thing you’ll need is a pod catching program.  I use gPodder but if you have a preferred alternative you can use whatever you like.  The key here is that the program needs to download the files into one regular location that you can reference with some batch files.

For those who are less familiar with the old school DOS environment and batch files, basically, a batch file, or .bat is a file which contains command line commands which will be executed in order.  It’s similar to making scripts in Linux only for Windows/DOS.  For simplicity, I recommend making a single .bat file for each show you want to run and naming them something like renameSHOW.bat.  I keep mine in the c: Root directory but you can put them in a folder somewhere if you’d like.  It’s probably better to try to keep all files in folders without spaces since DOS and the command line can get funny when spaces are involved.  This goes for your downloaded Podcasts as well.

To change the default download directory in gPodder, right click a Podcast and change the name description to one without spaces.  For example, if the default picked up is “No Agenda”, change it to “NoAgenda”.  For other programs you’ll have to figure this out on your own.

Next, create a batch file.  If you have file extensions turned on you can right click in the c: directory and do a “Create new –> Text File” then name it, for example “renamenoagenda.bat”  Alternately, simply open up Notepad, then save as “renamenoagenda.bat” in the appropriate directory.

Edit the file with Notepad or any preferred basic ASCII editor.  Add the lines shown below.

if exist d:PodcastsNoAgendanoagenda*.mp3 del d:PodcastsNoAgendanaradio.mp3

rename d:PodcastsNoAgendanoagenda*.mp3 naradio.mp3

You’ll want to replace the paths in this manner. “d:PodcastsNoagenda is the directory where the Podcasts are stored.  This will be dependant on your program and settings.  I have a second drive in my Pc where I store all the music RadioDJ uses.

“noagenda*.mp3” is the generic name of what’s downloaded by gPodder.  Each episode is something like “Noagenda-Episode-Date-Whatever.mp3.  They ALL start with “noagenda” and all end with “.mp3”.  using this will pick any episodes in the directory.

The file “naradio.mp3” is the file used by RadioDJ.  It is a generic file that RadioDj has in it’s list and it is of the type “Variable Length Audio”.  This will make RadioDJ get the length when it goes to play this file.  i use this format “radioXXXX".mp3” for simplicity.  For example, I’m also rotating FLOSS Weekly, which is called “radiofw.mp3”.  The key here is that the file CANNOT have the same starting name as the downloaded podcasts.  If I were to call it “noagendageneric.mp3” for example, then it would be picked up by the “noagenda*.mp3” call which would screw everything up.

Now, the essense of what this file is doing. 

if exist d:PodcastsNoAgendanoagenda*.mp3 del d:PodcastsNoAgendanaradio.mp3

 

This line says “if there is a file named noagenda*.mp3*, then delete the generic file.  I had trouble originally because I simply had the .bat delete the generic file.  This presents and issue if a Podcast has not been updated and there is not a new file to replace it.

rename d:PodcastsNoAgendanoagenda*.mp3 naradio.mp3

This line says “Rename noagenda*.mp3 to the generic file.”  This will create the new generic file that Radio DJ will use.  Also of note, this will “consume” the new episode.  This whole process requires that there is only one new episode.  if you’re clever this script COULD be adopted to create a series of rotating episodes.  I’m not going to get into that detail here however.  Essentially it would be a series of scripts that run daily.

Which brings up the next step.  You’ve created a batch file, now you need to schedule it to run using Windows task scheduler.  Simply set it up to run as needed.  For example, i run new episodes at 7PM, so i run the file at 6:30 PM on the day it’s needed.  The changes are essentially instantaneous so i could run them as 6:59 if I wanted.  I also have a short new segment which runs hourly.  This one runs at 4AM.

The thing that will sort of break this is if the downloaded new episodes do not use a regular file name.  Also if your Podcast feed isn’t updated in time.  The result hwoever will be that the generic file won’t change and an old episode will run in it’s place, so at least something should run.

Programming (Part 2)

I promised a part two so here it is…

The first post can be found here.

As previously mentioned, my previous self taught programming experience involved BASIC and whatever the TI-85 uses.  I had my first official taste of taught programming in College a couple of years after High School with C.  My Engineering degree required I take “Programming for Engineers” which was basically C programming to solve iterative math problems.  Most of the programs we did were by the book style involving arrays and graph style equations.  The book for the course was actually two books and we only got through maybe one of them since Engineers aren’t computer programmers.

This was fun but at the time I was rather busy with school so I didn’t to doo much beyond what was required for class.  A couple semesters later however was different.  I finished my Associates in 2.5 years meaning I finished in December.  I wanted to start the Bachelor’s track in the Fall since it makes all of the class schedules work out better so I had a semester to kill.  So in addition to working a whole bunch, I took two classes just for fun, Basic electronics and Computer Science 101.

CS101 was essentially C++ Programming for beginners.  There are some keys here.  I’ve had experience with C, which is very similar to C++, especially at this level of programming.  Also The TI-85 language is reasonably similar to C at this level of programming.  Basically, I’ve had a decent amount of experience at this.  The end result was that I excelled in this class, I did better than everyone else (most of which were actual Computer Science Majors).  The teacher also set up a side class for whomever wanted to attend learning some visual windows based elements.

The fun was in the larger assignments though.  Most of the quick assignments didn’t leave much room for creativity.  “Mr. Shopkeeper needs a program that will calculate 7% sales tax for his sales.  Make a program that takes the total bill in and outputs the total with tax” doesn’t leave much room for expansion.

The larger assignments were all simple games with variable elements that allowed for much more fun.  We also got more time to work on these, maybe a week or two.  I could easily code the basic assignment in a day leaving me, well, a week or two, to code “extras”.

This is where I created my first three “real games”.  Note the scare quotes.  Truth is, these are all rather buggy as evidenced by the fact that they don’t like unexpected input and are generally pretty crummy.

So I present to you, Tug of War, Pearl Diver, and Let’s Win at the Races.  All of these titles were given out by the class as was the basic premise of the game.

The parts that I added was anything graphical, even if it is ASCII graphics.  The requirement was only for a text based input and output.  Ok, yeah, it’s pretty simple, big deal.

I’ve done a few other projects that never got completed, the most ambitious was a PC based sequel to my previously mentioned Dragon Quest series.  This one was somewhat Zork like with a text based interface only it added a one on one random battle system like Final Fantasy and a level up system similar to Final Fantasy 2 where skills build as you use them and class is based on your skills.  I got as far as completing the map (without descriptions).  So you can wander around an empty world in it’s current state.  One day I hope to get back to it.

My other self taught programming project involves HTML, if you want to call it programming.  A better word is probably “coding”.  Back in 1998 when I first started building webpages I started in MS Frontpage.  I noticed there was a lot of flack for people who used Frontpage so I bought this big fat HTML book (HTML Complete, $20, great value).  So I taught myself basic coding of HTML.  These days I don’t use this skill as much since blogs make things much much easier but this skill does come in hand a lot when I’m trying to manually tweak my WordPress templates.

Programming is something I enjoy when I have time though my main complaint is always finding a decent free compiler.  The only free C++ complier I’ve ever found was by Borland and it is absolutely TERRIBLE for user friendlyness.  I plan to do some additional programming in the near future for fun it’s mostly a matter of finding time.  I’d love tog et into more visual element and make actual graphics and program that run in Windows.  Also there are quite a few more modern languages out there now.

Anyway, if I build anything new, you’ll be surely seeing it here.