Archive

Author Archive

Convert DVD to Windows Mobile AVI

December 24th, 2009

As part of my work, I occasionally travel, and often find myself getting stranded at either the airport, hotel, restaurant, etc.. With any travel there is down time, and Linux Journal will generally tide me over, once I have gotten caught up on Dave Yates’s LottaLinuxLinks(.com) podcast (no I don’t know Dave, but I am just a huge fan of his show). Well being both an AT&T customer, and corporate email user for my cell phone needs I am stuck with Windows Mobile as a my Phone of “choice” (though admittedly I would just soon skip corporate email if AT&T offered an Android). Nevertheless, the Windows Mobile Media Player doesn’t seem to support large AVI files, nor .OGG files (which means no lottalinuxlinks.com podcast), so I needed a solution. After a lot of digging I was able to find a successfully compiled version of TCPMP for my HTC pure. This is a good (not perfect) open source media player for anyone not familiar with it. Well back to the problem at hand I needed more to entertain me, so I did some digging and put together this quick (as in fast to write, no execute) script to convert a DVD movie into an AVI. This is by no means perfect, and could use some tweaking to keep the file size down and the scale more appropriate, but I thought this might be useful.
Pre-requisites:
TCPMP or some other pocket player that can handle larger AVI files     TCPMP
External storage (the end result is usually a couple of hundred MB).
mencoder (my initial experience of this encoding application, is that it has an insurmountable number of options, and that is specifically why it is incredibly powerful, and why I needed a script).     MPlayer and Mencoder Home

Next save this as a script appropriate to your OS. Mine is for Linux, but you can convert the lines to appropriate to any distribution. Just as a reminder prepare for this to take some time to run this is honestly a four pass encoding to allow for me to half the full video, and a mobile version.

#!/bin/sh
# This requires two command line parameters this can be preset as appropriate.
if [ $# -eq 2 ];
then
# Audio stream is separated from the DVD.
# WARNING THIS IS SET TO THE CURRENT WORKING DIRECTORY, I WOULD DISCOURAGE THIS AND SET IT TO ANY DIRECTORY YOU WANT TO STORY THESE FILES IN.
    rm -f ./frameno.avi
    mencoder $1 -ovc frameno -o ./frameno.avi -oac mp3lame -lameopts vbr=3
# First Pass encoding
    mencoder $1 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o ./$2
# Second Pass encoding
    mencoder $1 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o ./$2
    ## Comment out the next line for standard AVI or non-mobile this also creates the mobile version with the name mob_xxxx
    mencoder ./$2 -vf scale=400:240 -oac mp3lame -ovc lavc -o ./mob_$2
else
    echo Usage:
    echo convertVideoToAVI.sh \(file or dvd:////dev/sr0\) \(outputfilename.avi - mob_ is tacked on for the mobile file\)
    echo “\t$0 FILE”
fi

As always thank you for reading, and happy holidays,
- - tekgnu - -

tekgnu General, OpenSource , , , ,

Pro - ble - bility

December 10th, 2009

I am sitting here at the tail end of the “C” concourse, in the Chicago’s O’hare airport, just surfing my
eyes across the flux of people droning by. Based on very very cursory estimates, it appears that there are about 150 people just milling around, coming and going. If an Oracle crept up (as they tend to do) and said, “if you wanted to know any probability here, what would you ask”?

So would you appeal to safety, or sick curiosity, and ask, how many here have committed a horrible crime?
Rape, or victims of, afflicted with some insidious ailment, etc..

Would you look for pedagogical data, as in, what percentage of X represents Y?
What is the wealth, race, or religion, in some sick probability census?

How about forward thinking, as in how many people here will win the lottery, die from cancer, heart attack, or build their own multinational corporation?

How about toilet throne data, such as, how many people with moustache’s live: in this country, this century, hide horses, homosexual, or are women?

How about more humanistic data, as in, how many people wish you didn’t exist, or would become euphoric if you would only ramble up and say ‘Hello’?

The true error in the probability may seem overt, but would you really want to know.
If knowing that 32% of all people that were there in that terminal at that given time,
would become ecstatic if only you said hello, while 5% would be become
infuriated, what would you do? How about if you found that the people with
moustaches seemed to react more harshly? Would you avoid them as a
statistic, how about if they had a Yarmulkes on? Was scratching a lottery
ticket? or had been featured on America’s Most Wanted?

The problem is without the event it’s all just probabilty.


Lesser known facts:
72% -     the number of Linuxers that are natural born leaders.
22% -     the number of key designers, and programming genius introverts.
6% -       the proverbial remainder of non-gnu eunuchs.


Sorry for the crazy post I was at the airport ALL DAY :) (hey its been awhile)

– tekgnu –

tekgnu General

IPConfig Output to CSV Tool

September 8th, 2009

Alright, so it has been a long, long, time since I have posted. Well that is why I am coming back with a bang (I guess that depends on how easily excite - able you really are). I am currently working on a project to perform some basic infrastructure cleanup. Nevertheless, part of this clean up is to validate that the servers are configured optimally for an impending DNS upgrade. Well that seems straight forward enough, except these are Windows 2000, and 2003 servers, and I need to validate the DNS Suffix List and DNS Search Order. So quickly looking out on the Internet, I found a common vb object, that honestly produced mixed results depending on the server. I just kept thinking all I need is the same data you get from ipconfig /all.
So after capturing the output from ipconfig /all, I decided I needed some way to parse the data. This quickly turned into a small programming opportunity. Amongst the limitless language possibilities, I wrote this program in java. My motivation was based on familiarity, and interest, as performance is not an issue, (give it a whirl you will see).

The Lessons (if you are not interested in the programming, skip to The Execution section)

The Reg Exp a very powerful tool, worthy of its own books (I believe there is an O’Reilly book out there). Regular Expressions, are really powerful, and surprisingly frustrating. That being said, they are a necessary evil, and can be used in most languages today. There gets to be a point of absurdness on traditional find functions, that requires too many conditional expressions. What’s nice, is that these kinds of conditionals can be performed within the Reg Exp, which, in theory, improves readability. My take on it, is you need to use tools. I use jedit as my normal text editor and it has plugins to help formulate the Reg Exp. I also discovered - http://www.regexplanet.com/simple/index.jsp, this site actually will help build out the Java Matcher class string.

The Enum is actually a really great programming enhancement (circa JDK 1.5). I never used it before (in java), and I thought it would be a good opportunity for exposure. It makes for a very clever way of organizing elements in an array. My only thought is it would have been more novel possibly to use a dynamic enum to allow for a variable number of adapters. The problem with that is I would have sacrificed the ability to change the output layout order by simply moving the elements of the enum around, which is quite simple and intuitive.

The Buffered Writer is a very common tool, that I have used many times. The problem is that as a hobbyist I had never really given any thought about the buffer, in the bufferedwriter class. Why, well I honestly didn’t really care, until magically I could only seem to get through 164 servers. After that clearly there was a lot of brain cells churning on the accursed number 165. Which of course there was no issue with. All I have to say is listen to your mom and flush (more appropriately BufferedWriter.flush()).

The Debugger I always figured was just another name for System.out.println :). Actually I have used one before, but I have perpetuated my hobby-ist status by using System.out.println, and as a matter of fact left almost all of mine in commented out. But the debugger truly is your friend. If I become extremely motivated, or more appropriately write something that warrants it, I will try the logging API.

If you are interested in this GPL v2.0 released code, it can be gleaned here. Shoot me an email and let me know where it evolves. Or if you have a need and no programming interest shoot me an email and I will look into it. As always, I am still tekgnu at this domain :).

The Execution

So I need to restate I have run this against Windows 2000, and 2003 servers (I did a cursory test of a vista laptop also with no issues). If there are any bugs or if you have any need for enhancements please let me know. Again, I am tekgnu at this domain.

You can download just the tool here.

To unleash this tool on a directory that contains your ipconfig /all files all you need to do is:

java -jar “/directory/path/to/this/jarfile/ipconfigParser.jar” “/Directory/To/Scan/” optional_output_file.csv

This should capture your data and dump it into your .csv file. If you don’t provide an output file then it gets dumped to standard out.

Good luck, and as always feel free to email!

- - tekgnu - -

tekgnu General, OpenSource, Programming ,

Revenge of the Power PC

July 9th, 2009

Well if you stumbled upon this page, then you were probably unscathed by THE migration, and hence you can skip ahead on to the article you accidented on in Google.  For those of you (namely I am talking about myself here) that subscribe to the feed, you may have noticed that the feed itself has been rather anomalous.  In fact it really didn’t work.  This is the effect of inheriting a Big Bubble Mac PowerPC, from my sister in law.  After some floundering I was going to go with installing Debian on the L’il guy, but looking back I had some issues (I can’t remember now, but I think I spent more then five minutes looking for a PowerPC repository or something).  Nevertheless, I decided to give Ubuntu server a whirl, and have pretty much a headless server (which is ironic considering it was the first of its kind where the computer is the monitor, but for sake of explanation, we’ll just say I poked they eyes out of this floating head).  Once built, it sat.  And it sat.  Until my wife asked for me to add Urban Baby Gourmet. I then proceeded to power the L’il guy on, but then it sat, and it sat. Eventually my wife was ready to go, and so I was in a scramble to get mibbit online, and all of our websites migrated over:

                http://www.urbanbabygourmet.com
                http://www.digitalanomaly.com
                http://www.avividdesign.com
                http://www.perrytribe.com
                http://www.nsgierer.com

            (Glib advertisement yes, but nonetheless true)

So to skip to the chase, there was some effort involved in getting everything off of my workstation, and onto this old machine. I just forgot to enable the mod_rewrite module on this server. No harm done, next I hope to create a semiautomatic fail over, just in case mibbit, should have any hiccups, I will keep you posted (right now I am looking at Monit as a possible solution, and running it from my workstation, hence the SSMTP article :) ).

Thanks again and pardon the dust,

- - tekgnu - -

tekgnu General

Simple Email (SMTP) Relay - Using Google

July 8th, 2009

Alright you can probably use a whole cornucopia of MTA’s (or Mail Transfer Agents), to allow you to proxy mail out on the Internet, but I wanted to mention a very simple one, SSMTP.  Why would anyone care to want to send email from some intermediary you ask.  Well simple, with SSMTP you can automatically send email via script or from the command line.  This is particularly useful if you want to use an application to monitor your server and send alerts, or if sending email from the command line is your fancy.  You could try to set up your own email server at home, but the problem with that is two fold: one SMTP (port 25) is often blocked by ISPs, and secondly, even with a static IP address most Email servers will have ISP IP Address ranges Black listed (that is the effect of the wonderful world of spam).

So now with your Gmail or Google for Domains email address you can simply use an application called sSMTP. There are excellent instructions on the Debian Website here. There is only one correction I wanted to make, (and I added the comment to the wiki), and that is to add in one missing parameter: AuthMethod=LOGIN to your ssmtp.conf file.

Once you have it setup, all you need to do is test your email forwarding by dropping me an email from the command like this:

user@digitalanomaly:~$ ssmtp tekgnu (this is the part where you can put in my email @ digitalanomaly.com) and hit enter.

subject: Testing SSMTP (or any subject you prefer followed by an enter).

The command line is clearly going replace my email client.  With SSMTP I can send emails without ever receiving them.

Thanks, from your anonymous user. (Or any such commentary to your liking :) , hit enter.)

(and finish her off with a Ctrl-D on a blank line).

Thanks again for reading,

- - tekgnu - -

tekgnu General

First Impressions

July 1st, 2009

the Story -
So my wife and I figured we were up for the challenge of going out to breakfast on Saturday.  Anyone with a ten month old knows all too well the adventure in eating out. Nevertheless, with so many choices out there we angled for some basic comfort food and ended up at a local “The Egg and I” restaurant. These places have the comfort of a Village Inn, Perkins, Big Boy, etc. wrapped in a single breakfast track like that of an IHOP (only better). Well our breakfast went uncommonly well, and my daughter spent most of the time hamming it up with the rest of the natives. After we finished our meal, that is when the seemingly innocuous event occurred.  I stood in line to pay, in my Saturday’s best, which for plot points, was jeans and a tee shirt. When, out of nowhere, a woman well in her early sixties darted out from the kitchen smiling, asked if she could see the back of my shirt. Confused, I obliged, and she went about reading the back of my shirt.  I said her, “Oh this is just a computer shirt”. I was in fact wearing a Sun Grid computing shirt that I got for free online.  I then went about my merry way, paying my bill.

the Judgement -
Yes the meal was good and what have you. While standing in line I stood there trying to groke what this lady, hinging on retirement, was gleaning from my back. And then it came to me. I think we all know full well these midnight tech junkies. I am no Columbo, but I could tell by the dent on her head and the dried drool on her chin that she spent the night like many of us, passed out on the keyboard. Yeah, I could see it, row upon row of servers stacked on ol’ doily covered coffee tables, and Window air conditioners sucking the air out of her musty basement. Clearly every dime she makes doesn’t go to some paltry knitting addiction, or to supplement social security, it goes directly to feed her babies. Naturally a discussion on Grid computing, open source, or common language search algorithms would be like asking Stephen Hawking about the origins of the earth. Nevertheless, I ducked out in time to save myself the indignation.

the Lesson -
Watch what you wear, and be either a good runner, or someone that can speak a second language as though you are a foreigner. For me I have mastered the perplexed, in a hurry, gaze, (or more appropriately, ‘deer caught in headlights’).

I haven’t written anything in some time, so I thought I would throw something of no technical merit out there. Be well and take care,

- - tekgnu - -

tekgnu General

JavaFX Production Suite 1.2 on Linux

June 9th, 2009

So they have finally added support for JavaFX in Linux.  but the JavaFX Production Suite hasn’t been migrated yet.  Which is understandable, because the Adobe Suite isn’t exactly ported over, but you can still use the SVG Converter.  To port it over you first need to download the JavaFx Production Suite 1.2 Windows package.
Next run the cabextract utility, to pull all of the files out of the Windows executable (in the Debian distros, you should be able install cabextract with a - sudo apt-get install cabextract).  Just move the javafx_production_suite-1_2-windows-i586.exe to a separate directory and then run the cabextract from the command line:

cabextract javafx_production_suite-1_2-windows-i586.exe

Ultimately all you need is the svg2fx.jar file, and then you can run the interface with:

java -Xmx512M -classpath ./svg2fx.jar com.sun.javafx.tools.svg2fx.main.UIMain

If all of that sounds too annoying you can just download the jar file and the script to launch it from here.

tekgnu Linux, Programming , , ,

JavaFX 1.2

June 3rd, 2009

JavaFX has been quite a pleasure to learn thus far. If you have seen my tutorial on creating an SVG drawing, and adding functionality to it, you know I have been trying to learn the intricacies of the JavaFX scripting language.
Up to now, I have been plugging away on either my work laptop with Windows, or have implemented the necessary work-a-rounds to get the SDK to work in Linux. Such as the one proposed by Weiqi Gao, which by the way was a very cool work around on mounting the MAC JavaFX 1.0 SDK .dmg file as a loop back device.

And then came 1.2

Clearly JavaOne increased whipping the development horses. This truly is no minor release. Aside from the added support for Linux and OpenSolaris, there have been a bunch of additional changes from the core language (in support for Java Arrays, and the addition of Math functions) to significant addins (I am looking forward to investigating the new Task class). That being said, there comes some retrofitting. The first I noticed while opening my DialUI is that the UIStub, is no more.  Thus, when I opened the newly updated Netbeans to 6.5.1, I discovered a lot of RED. The UIStub has since been replaced by FXDNode, and there are some additional finite language changes.
Keep your eye out for my next article on JavaFX, I am sure there should be quite a few changes to the tutorial.  To get an excellent run down on some of the changes take a look at this article from Stephen Chin.

tekgnu Linux, Programming , , ,

Part 3. Breathing life into our JavaFX Dial

May 20th, 2009

Aeons ago when I wrote part 2, JavaFX was in it’s infancy at version 1. part3_javafx_dial Now we have leaped forward to version 1.1, ( :) ). The 1.1 release is clearly more of a bugfix, and by designed more of a teaser for some of the missing elements. We have the SDK where are the phones? And more importantly to the OS community where is my formal Linux release (fortunately there are work arounds).

Where we left off
In Part 2 of this article we took the very flat drawing, and turned it into a much more pretty dial. This only touched on the graphical horse power of JavaFX.  In this article, I address adding functionality into the JavaFX dial, by hitting some of the key functionality of JavaFX. From Animation, and Multimedia, to Event Handling to Transformations, this has been somewhat of a bumpy road.

The Good, the Bad, and the Ugly
Yes, the road has been very bumpy. Maybe my lack of experience, or maybe it is the
youth of the JavaFX environment, but I have learned alot by adding functionality to
the JavaFX dial.

The Good: Clean, logical code, that reads very well.
I didn’t find that I had to create any creative logic flows (man do I miss the goto command (simple, yet confusing), or for those C(++) programmers out there, man do I miss troubleshooting pointers (there is nothing that can expedite gray hair and baldness quite like it)).
Also anyone familiar with Event Handlers in Java will love this:

top.onMouseReleased = function(event : MouseEvent)
{
  if (enableAudio) { sndMuted = true; }
}

Yes that’s it, I released the mouse button, and (if I had enabled sound) then the sweet
clicking sound pilfered from my daughter’s toy would stop (more appropriately mute, a topic best left to the ugly).
Click the mouse again, and the sndMuted variable which is bound to the MediaPlayer itself, gets set to false,
and the clicking knob audio continues.
Another short snippet that is new, and very intuitive:

var animRotation = Timeline
{
  keyFrames:
  [
    at(0ms) { currAngle => currAngle }
    at(5s) { currAngle =>
      dialRotation tween Interpolator.LINEAR }
  ]
}

That is purely and simply animation. The dial is a’ spin’in.

The Bad - the lessons learned
So admittedly I am my own worse enemy. Rotating the dial represented a series of interesting challenges. First challenge: rotating the dial with the mouse. I appeal to anyone to provide a more simplistic answer, and will gladly throw them some street cudos. When I started pondering rotating an object based on the distance of the pointer, my head begain spinning (that’s when I realized that the speed at which my head was spinning was the more I thought about the problem). Then came the math (not my forte). So I thought myself into a triangle, and realized the three points as where the mouse was, where the mouse is, and the center of the circle.
The reasoning here is that the furhur you are from the center of the circle, the slowere the dial would rotate.
Nevertheless, I found the Law of Cosines to Trigonometrically solve my puzzle.
Yes that was ugly:

currAngle = dialRotation;
pointCurrent = Point2D
{
  x: event.x;
  y: event.y;
}
sideA = pointHub.distance(pointClick);
sideB = pointHub.distance(pointCurrent);
sideC = pointClick.distance(pointCurrent);

var cosC: Number = 0;
cosC = (Math.pow(sideA, 2) +
Math.pow(sideB, 2) -
Math.pow(sideC, 2)) /
(2 * sideA * sideB);

// Radians to Degrees + pointer alignment factor.
dialRotation +=
cosC * 57.2957795 + 30;

if (dialRotation < 0)
dialRotation = dialRotation + 360;
if (dialRotation > 360)
dialRotation = dialRotation - 360;

The second challenge: rotating a circle within an invisible box is seamless, but the second you add a pointer protruding outside the radius, you have a problem. The problem makes complete sense, the second you rotate the dial and the pointer hits the containing box, the entire dial shifts just enough to keep itself contained within the invisible box.  My workaround was I cheated. I started going down the path of maybe extending the containing scene, but then I realized that I just preferred the look of a smaller pointer. Yes, of course it worked but the lesson here is to be aware of the bounding rectangle to each object when a transform is applied.  The last “Bad” in the rotation challenge is around using the transforms. I wanted to utilize the rotate transforms to manage the load of constantly executing the trigonometric functions.  Ultimately I ended up using Animation (I hate to say it, but without direct support for Threads in JavaFX, I can see using Animation as a process controller).

The Ugly - the smoking mirrors.
So there are really two points where I became hung up, and found myself fishing for a work around. The first work around: The illusory init method which was discussed in part 2. I am still not exactly sure what the role is with the init and update methods are with the UIStub Class.
There is a definite method to the madness, and maybe the correct answer would’ve been to extend the javafx_dialUI class. Any feedback would be appreciated, commented, and inserted.  The second work around: Sound. The MediaPlayer has an issue, I have poked around to find that
I wasn’t the only person out there asking the questions around getting my WAV file to play.  First and foremost: How ever you create your audio, I would strongly recommend saving it at 1411 kbps as a WAV file.  Next until they fix this, the sound needs to have a length greater than two seconds.  I would recommend if you have a sound or need to create a sound to look to using Audacity. This is an excellent program with a lot of functionality, and still easy enough to use.  Nevertheless, the audio clip was over two seconds long which just running the audio when someone rotated the dial doesn’t make much sense. So here is where I used the functionality of the builtin MediaPlayer object.  The media player has two attributes that I needed to implement, one was the repeatCount, and two was the mute.  Fortunately for me the click wav file I created from my daughter’s teething toy, was a consistent sound.  This allows me to repeat the sound with having to worry where in the sound I was at.  I am assuming that if the sound was not loop-able, or if I needed to chain different sounds together I could just use the MediaPlayer currentTime attribute to select where I needed to be in the audio file.  So what also I did was bind the mute attribute of the player to the sndMuted variable I created, as described above.  Well once I got past these hurdles I was able to enable the basic functionality of the dial.

Enhancing the Functionality
After some pondering I figured on an assignment for this dial, which I will unveil in my next article (cheap teaser I know).  I did have to add a lot of additional public writable attributes:

// currAngle: is exactly that, but both readable and writable.
// To calculate the value on the
// currAngle, use public function currentValue(): Number {
// instead.
public var currAngle: Number;
// Don’t want the Pointer, remove it.
public var hasPointer: Boolean = true;
// Minimum and Maximum are the values that the Dial represents,
// while spinning from the 0th degree, to the 360th degree.
public var minimum: Number = 0.0;
public var maximum: Number = 100.0;
// enable Audio I have already discussed allows you to turn
// the sound off on the dial, and rotationWav
// allows you to change the sound made.
public var enableAudio: Boolean = true;
public var rotationWav = Media { source: “{__DIR__}click2.wav” }
// The incKey, decKey, are used for adding key handlers
// instead of using just the mouse.
// They need to be assigned to a KeyCode Object.
public var incKey: KeyCode = KeyCode.VK_MINUS;
public var decKey: KeyCode = KeyCode.VK_EQUALS;
// keyPressChange and mouseWheelChange, are the
// degree changes that will occur with each
// execution of either of those events to the dial.
public var keyPressChange = 5;
public var mouseWheelChange = 10;

For the Java files, or for the SVG Dial . just click.

< previous Part 2. Turning an SVG drawing into a JavaFX Dial

javafxdial

tekgnu OpenSource, Programming , , , , ,

Democracy NOW

May 14th, 2009

Amy Goodman at the Denver Convention Center
Alright another personal post, which I promise will be paused soon enough, and I will upload additional JavaFX goodness.  For the int

erim however, I had the opportunity to attend the, “Think of Green Festival” at the Colorado Convention Center on May 2nd.  I was hoping to have more time there, but I must admit I came with one goal in mind, to see Amy Goodman present.  For those that don’t know who Amy Goodman is, she is the reporter for Democracy Now.  For those unfamiliar with Democracy Now, I believe it can be best defined as the news that is

n’t reported, but profoundly impactful.  Amy Goodman is a no holds barred reporter, and passionate proponent of ethical journalism.  She has written several books, and is currently featured on New York Times best seller list under paperback nonfiction for her recent release, “STANDING UP TO THE MADNESS“.  Yes after her speech, or should I say rally I was itching to get my greedy little paws on it.  But I am ge

tting ahead of myself.  When I walked into the conference room where Amy was to give her impassioned speech, I became overwhelmed by the current speakers doom and gloom.  Albeit normally I would be transfixed, and sucking in all of the data from an author spelling out how man is proceeding to undo itself, but not today.  I am not sure if it was the monotone voice, the people cutting in to get a seat upfront waiting for Amy, or just the pure audacity of this guy to say that he was going to take an additional ten minutes, but I was getting a little itchy.  Nevertheless, the wait was tremendous, and instead of just calmly listening in on the beauty of the end of the world, all I could do was psychically bitch slap

this pompous ass off of the stage (once again the impertinent effect of impatience no fault of the author).  Once my telekinetic powers hit fruition and the man was gone, I looked up to see the crowd pulse to easily three times the size.

It was the beginning of amazing.   When Amy came out, she was immediately adored by quite a large following, (and even though I have never seen her outside of Democracy NOW, I too became a twelve year old choked up on several two leaders of Mountain Dew).  Amy was pretty zen, and I half expected her speech to roll out like her reporting, with calm thought provoking data.  That is not what happened.  For her size she beamed larger than life - she started with a little data, emotional appeal; then rolled into, hard hitting personal stories,  shocking video, sweet, sweet Data; then proceeded to finish the audience off with more stories of personal endeavor, ironic humor, and of course, her unparalleled and unrelenting hard hitting DATA.  Needless to say, she finished in a whirl wind, where the audience themselves were exalted, and pumping their fists.   It was well worth the wait.  I only wish I would have had the opportunity to stick around.  I can only encourage people to check out Democracy NOW and to take the opportunity to see Amy Goodman in person.  Take my word for it, as a strong advocate for human rights, the environment, and ethical reporting, ( why else would there be seven results for Amy Goodman in Facebook, including one title, Smart is sexy–i wanna marry Amy Goodman), it was well worth the trek downtown.

P.S.  The best photograph I could get was this comical little thumbnail on top (as though this validates that I was actually there and I didn’t take a picture of my television).

Be well

- - tekgnu - -

tekgnu General , ,