November 14, 2004
Pot Calling the Kettle Black
Conference Examines Blogs' Impact on News.
Mindy McAdams, a University of Florida journalism professor, applauded bloggers' efforts but urged them to adhere to ethical standards held by mainstream journalists.
"Our credibility is suffering with so many people rushing to publish things without checking them out," McAdams said after Cox's speech. "Blogging is really great. I like that more and more people have a voice. That's good ... But it doesn't give people who call themselves journalists an excuse to not check out the information."
Oh, puu-leeze. I hope we adhere to higher ethical standards than journalists. I wouldn't call bloggers journalists, anyway. They are ombudsmen because journalists do not have the standards that they claim. Therefore, we need to fact check them every step of the way. When blogs do act like journalists the rest of the blogosphere serves as their ombudsman.
Posted by Rich at 10:22 AM in Weblogs | Permalink | Comments (0) | TrackBack
September 09, 2004
The Effect of the New Media on Campaign 2004
Update: This just brewing: the CBS memo on Bush's National Guard service may have been forged. It used a proportional font that wasn't used in the '60s.
The Blinne Blog is back from summer hiatus. I spent the Labor Day weekend watching the political blogs and I noticed how the so-called new media are directly affecting this campaign. Now I am not talking here about Matt Drudge or talk radio or Fox News. No, I am talking about independent web publishers popularly known as blogs. Three stories from this weekend illustrate things that weblogs have done that even the old new media can not do well.
- John Kerry for President, a 404 Organization.
John Kerry's web page had a response piece [Note: this link is dead and the index of press releases skip pr_2004_0905a and going straight to pr_2004_0905b.] entitled The 2004 GOP Convention: Four Days Filled With Lies, Mischaracterizations, Distortions, And Half-Truths. This was a cut and paste job that merely quoted from the convention and there was nothing to explain why the statements were lies. Check this link that saved the web page. It also in effect called John McCain a lier. - The Steubenville Meltdown.
Here we have a witness that showed the main stream media completed missed John Kerry's rally going completely out of control. Steubenville is home to a Franciscan university and is very much pro-life. This had to be rescheduled from when the univeristy was not in session to when it was. They also had the rally in a public park. Here's an e-mail from a witness:
John Kerry came to Steubenville yesterday and quickly realized he was in the wrong city. Steubenville is a city where there are 6 Democrats for every 1 Republican, and the Steelworkers unions are alive and active. You would think this was solid John Kerry territory. The mob used to control Steubenville and now the unions think they do. Well, they are wrong.
The Kerry campaign first scheduled a visit to Steubenville two weeks ago but "scheduling conflicts" came up at the last minute. Oh, and did I mention that Kerry wanted to use a local gun range as a campaign stop, but the owner turned him down? And that the Fire Department Union President told the Kerry campaign that not only would he not organize the union to support Kerry at the rally, but that he was supporting President Bush! The Kerry campaign took for granted that this area was sown up. Mistake number one. So they rescheduled the campaign trip when Franciscan University was back in session. Mistake number two.
Before Kerry arrived there was a huge pro-life march led by Franciscan University students, 500 strong. "You can't be Catholic and pro-abortion", read some of their signs. Students and members of local Catholic parishes were full of energy and FoxNews reported that this was the largest protest against Kerry outside of the Democratic Convention. Just picture 500 pro-lifers marching from their college campus to meet Kerry. Where else but in Steubenville, Ohio! Though the Franciscan University did not organize the event, it is well known for its orthodox Catholic education which encourages students to put their faith into action. These students simply cherish their Catholic faith and could not stand to let Kerry use their faith as a political prop. I am proud of my alma mater.
….The Kerry campaign not only made a mistake in their timing, but they also chose to hold the rally in a public park which should be open to all the public. Mistake number three. The police chief, sheriff, and mayor all agreed with me that protesters and their signs would be allowed inside the Kerry rally site. Freedom of speech is alive and well here in Ohio. The Kerry campaign flipped out!
So, now add another 500 local Bush supporters to the Kerry rally. They tried to turn up the music but they could not drown us out. According to the Herald Star (local press), "The crowd, estimated by officials as 3,500 strong, was almost split in half with people for and against the Massachusetts senator." John Kerry must know he has a problem when over 15% of his audience was booing him. We were respectful and did not heckle him - but upon arrival and when he sought our applause he got something he didn't expect. As the press arrived a feisty nine year old little girl began shouting, "We want Bush!", and we all chanted along. The campaign staff was beside themselves. This is history in the making! Even places like Steubenville are not supporting John Kerry. He is in serious trouble.
My friends, John Kerry will not be coming back to Steubenville. Kerry was visibly shaken when he received boos from the audience.....
- AP Caught in Dirty Tricks
This one was picked up by Drudge but it was the bloggers who did the heavy lifting. Here the crowd was alleged to have booed President Clinton's heart problems. Audio files came out the woodwork showing it not the case. AP tried to say it was oohing, then deleted the reference to booing altogether along with the by line, the timestamp, and all previous versions of the story. They also purged Nexus of the trail. This goes beyond bias in my opinion and AP should launch an investigation of this.
Posted by Rich at 09:46 AM in Current Affairs, Weblogs | Permalink | Comments (0) | TrackBack
February 13, 2004
Blogging and Dirty Tricks
This may be the first "blogging" scandal. World Net Daily is reporting that Watchblog scooped Drudge on the current John Kerry scandal. They also noted that Watchblog was run by Wesley Clark blogger Cameron Barrett. While running this down I found the following complaint concerning Barrett and Watchblog:
Last August, I joined Watchblog, a group blog put together by left-winger Cameron Barrett that was supposed to represent the two major points of view on the 2004 election, and put out a call for other moderates and conservatives to join up. I was warned that Barrett's politics are pretty extreme, but I decided "hey, what's the worst thing that could happen?" and did it anyway. So I've just found out what can happen.Barrett morphed the blog into a tri-partisan effort and then ran off to join the Wesley Clark campaign as captive blogger (no doubt thanks to his freshly-minted political credentials) and left the keys to the Watchblog in the hands of fairly loopy Green Party weirdo named David Remer. Remer promptly kicked one of the regular Republicans off the blog, and when the other two complained about it, he kicked us off too. That left him with no Republican voices so he started a stealth campaign to back-fill the blog, making no public announcement of the massacre. My posts are still up on the blog, and you would get the impression that I'm still posting there and that I endorse it.
Well, I'm not and I don't. I've asked for my posts to be removed, and I want to encourage Republicans to boycott Watchblog. The basic setup is to give two-thirds of the space to a group of Republican-haters who post as both Democrats and Third Party (that means "Green Party" really) members, so they can drown out the Republicans with the same stuff. This is no way to run a group blog, a political blog, or any other kind of blog that claims to offer a fair and balanced perspective.
Friends don't let friends support Watchblog.
BTW, it's kind of interesting in a coincidental way that the Clark campaign has fallen prey to the same kind of heavy-handedness that's destroyed Watchblog. Just a coincidence, I'm sure.
Drudge noted that the story was coming out of the Clark camp.
In an off-the-record conversation with a dozen reporters earlier this week, General Wesley Clark plainly stated: "Kerry will implode over an intern issue." [Three reporters in attendance confirm Clark made the startling comments.]
Does this prove that there are dirty tricks being practiced by Lehane and company? No. But something sure smells rotten in Little Rock.
Posted by Rich at 10:43 AM in Current Affairs, Weblogs | Permalink | Comments (1) | TrackBack
November 17, 2003
New Open Source Project Dealing with Blog Spamming
A new open source project called blam! is starting up. I plan on helping out here and help kill this scourge before it gets out of hand. I also plan on contacting Six Apart to see if we can get Typepad to work with this. If you are both a blogger and a programmer please consider helping out here.
Bloggers of the world, unite!
Posted by Rich at 10:04 AM in Weblogs | Permalink | Comments (0) | TrackBack
October 14, 2003
Spam Traps for MT and Typepad Blogs
***Dave asked the question about what to do with blog spamming. So far, blacklist management has been the only answer. I have a solution that unless the spammer is very persistant he will have to manually enter comments on your blog.
First you will need to create a spam trap blog. Create an entry that will accumulate spam messages. Look at the source of that entry and write down the entry_id. The HTML will look like this:
<input type="hidden" name="entry_id" value="398723987" />
This ID will become the entry_id for all your comment forms. For my examples this will be spam_id. Replace spam_id with the number of the spam blog entry. New lines in the examples below will be in bold and modified lines will be in italic.
For MT blogs you will need to create a new index template with the file name obscure_script_name.js. In this template you will put the following code:
function doLoaded1 () {
document.comments_form.entry_id.value = obscure_variable_name;
}
onload = doLoaded1;
For the individual archive itself:
<head> <script type="text/javascript" src="<$MTBlogURL$>obscure_file_name.js"></script> </head> ... <script type="text/javascript" language="javascript"> ... var HOST=.... var obscure_variable_name = '<$MTEntryID$>'; ... <form ...> <input type="hidden" name="entry_id" value="spam_id" />
For Typepad the obscure_file_name.js template changes slightly to this:
function doLoaded1 () {
if (!document.comments_form) return;
setFormValues(document.comments_form);
if (document.comments_form.author.value)
document.comments_form.bakecookie.checked = 1;
document.comments_form.entry_id.value = obscure_variable_name;
}
onload = doLoaded1;
The individual archives look like this:
... <head> <script type="text/javascript" src="<$MTStaticWebPath$>comments.js"></script> <script type="text/javascript" src="<$MTBlogURL$>obscure_file_name.js"></script> <script type="text/javascript"> hostName = '<$MTBlogHost$>'; obscure_variable_name = '<$MTEntryID$>'; </script> </head> ... <form ...> <input type="hidden" name="entry_id" value="spam_id" />
Further cloaking can be done by having a .php program generate the javascript. To see how innocuous this looks, click on the permalink of this post and show the HTML source.
Posted by Rich at 04:27 PM in Weblogs | Permalink | Comments (2) | TrackBack
October 10, 2003
Free Find Integration Tips for Typepad
At this time Typepad does not have an internal search capability (coming soon). The workaround is to use Google site search as a substitute. The problem with that was Google has not been fully crawling my site. Typepad support gave a recommendation of Free Find. Free Find can be integrated in exactly the same way as Google find.
Setting this up was real easy. You go to freefind.com, sign up for an account, and cut and paste the HTML. The only issue I had with Free Find is that I get multiple hits for any article. That is, my individual archives get hit, along with my monthly archives, category archives, the front page, and the individual archives before and after a post (if the hit is in the title).
Fortunately, Free Find provides a way to control its indexing. So, if you are a Pro user of Typepad you can make the find more friendly. For the index archive, the template archive, the date-based, and category archives. You insert the following:
<body>For the individual archives you do this:
<!-- FreeFind Begin No Index -->
...
<!-- FreeFind End No Index -->
</body>
<!-- FreeFind Begin No Index -->You can see how it looks by doing a Free Find search of web site at The Blinne Blog.
<MTEntryPrevious>
<a href="<$MTEntryPermalink$>">«
<$MTEntryTitle$></a> |
</MTEntryPrevious> <a href="<$MTBlogURL$>">Main</a>
<MTEntryNext> | <a href="<$MTEntryPermalink$>"><$MTEntryTitle$> »</a>
</MTEntryNext>
<!-- FreeFind End No Index -->
Posted by Rich at 11:46 AM in Weblogs | Permalink | Comments (3) | TrackBack
October 08, 2003
Scriptygoddess Guest Post: Using .htaccess to Domain Map Typepad
Check out my guest post on scriptygoddess. Here's an excerpt:
Typepad just added domain mapping. This allows you to point your domain at your blogs.com subdomain via DNS. I wanted this because I didn't want my blog at blinne.blogs.com but rather at www.blinne.org. But, I also wanted other content at www.blinne.org. This meant I couldn't simply repoint www.blinne.org to blinne.blogs.com via DNS. My solution to this problem is outlined below.
Posted by Rich at 02:07 PM in Weblogs | Permalink | Comments (0) | TrackBack
October 01, 2003
I've Been Google Bombed (Update)
Beep beep went the cell phone. I had a comment on my blog. Was there going to be some interesting conversation? Nope, just the comment Mishka rules. Oh, well. Someone wanted to promote their site. I decided to let it slide. Then an hour later, beep. Another Mishka rules on the same blog entry. OK, time to delete the comments and ban the I.P. Then, again, beep. This time on my old blog. Lather, rinse, repeat.
Then I find mishka dot com listed high on blogdex, and google page rank of 4 (all this for a coming soon web page). Now time to play net detective. One blocked I.P. is from British Columbia. Another is from Lagos Nigeria. The web site is hosted by Hurricane Electric in San Jose and registered to a Rick Morbey in the Bahamas. Really weird.
Anybody else pestered by this Mishka fellow?
UPDATE:
I have been working with the owner of mishka.com to get to the bottom of this. He appears to be a victim, also. Just today, Boris, Mishka's cousin has shown up. It bombs the exact same comments. If you are being bombed by either of these close the comments on that post. The IPs have been traced to the U.S., Brazil, Canada, and Nigeria. Either this is a virus or worm, or the IPs are being spoofed.
Posted by Rich at 01:20 PM in Weblogs | Permalink | Comments (5) | TrackBack
September 19, 2003
Using .htaccess to Domain Map Typepad
Typepad just added domain mapping. They say they need to have your ISP DNS map for you. This is not completely true. If you are allowed to have an .htaccess file where you are hosted and can use mod_rewrite, then you can do this without remapping your DNS. Apache provides for proxying in the .htaccess file. This is what it looks like:
RewriteEngine on RewriteRule ^blog/(.*)$ http://blinne.blogs.com/blog/$1 [P] RewriteRule ^blog$ http://blinne.blogs.com/blog/ [P] RewriteRule ^/$ http://blinne.blogs.com/ [P] RewriteRule ^$ http://blinne.blogs.com/ [P] RewriteRule ^about.html$ http://blinne.blogs.com/about.html [P] RewriteRule ^foaf.rdf$ http://blinne.blogs.com/foaf.rdf [p]
I went to the control panel and then to the domain map, lied about DNS working, mapped www.blinne.org to blinne.blogs.com, and finally activated it. The result looked like this:

And I am now running www.blinne.org!
Posted by Rich at 07:21 PM in Weblogs | Permalink | Comments (3) | TrackBack
September 17, 2003
Manual Trackbacks in Typepad
This post has been updated. See update at the bottom.
ORIGINAL POST:
I found out last night that Typepad doesn't yet do autodiscovery of trackbacks like Moveable Type does. You can, however, do the trackback pings manually. This post shows you how to do it. First of all you need to discover what the URL is for trackback. For typepad this can be found in the individual archive of a post. Here's a screenshot of what this looks like:

For you own post you will need to turn on advanced editting. In the screen shot below, click on Customize the Display of this page and then select Advanced or Custom:TrackBack URLs to Ping. Take the URL that you found in the post you were referring to and place in the box, and save your post.

UPDATE:
Liza mentioned that this could be done with quick post. Here's how it is done. First set up your quick post bookmarklet like this:

When you have a post that has a trackback, then you see the following pulldown menu in your quick post:

Select the trackback ping that you want.
Posted by Rich at 11:50 AM in Weblogs | Permalink | Comments (7) | TrackBack
Buzz words, or how we all start using the same weird words...
Dappled Things is interested in the buzz words you are hearing in the blogosphere.
Have you ever noticed how a word you've never heard before or at least never used in general conversation suddenly takes on a life of its own? You start seeing/hearing/reading it everywhere. Sometimes it's a neat new word that really fills a niche; it conveys something that you never really had the exact right word for before. Or maybe it's just fun to say. You like to repeat it over and over and over, just to hear the sound of it. Then again there are some words that enter the mainstream or maybe just your personal sphere that almost immediately begin to grate on your sensibilities. Business jargon is great for this. I remember a number of years ago when everyone was talking about paradigms and paradigm shifts. Lately I've seen a couple of words take off in the blogosphere, although perhaps I'm late coming to them. Everyone and his brother is being described as snarky. And everyone else has a new meme to share and propagate. If you've never heard either of these words, where've you been???? :) Here are the entries in Merriam-Webster online ( a great dictionary source if you aren't aware of it. My officemate and I used it the other day just to make sure we were pronouncing template correctly. )Main Entry: snärky
Pronunciation: 'snarkE
Function: adjective
Etymology: dialect snark to annoy, perhaps alteration of nark to irritate
Date: 1906
: CROTCHETY, SNAPPISHMain Entry: meme
Pronunciation: 'mEm
Function: noun
Etymology: alteration of mimeme, from mim- (as in mimesis) + -eme
Date: 1976
: an idea, behavior, style, or usage that spreads from person to person within a cultureWhat are the buzz words you're hearing? which do you love? which do you hate? :)
Posted by Rich at 08:27 AM in Weblogs | Permalink | Comments (6) | TrackBack
September 15, 2003
Blinne Blog on Typepad
Being the blogging gadfly that I am, I try out new blogging software/setups. I am now using Typepad software. I will give my comments as I become more familiar with them. I am using the pro version primarily because I am familiar with the Movable Type stuff. I'll give my comments from time to time on what I have found.
Technical details: In order to transfer my site, I created index.php which looks like this:
<?
$URL = "http://blinne.blogs.com/blog";
header("Location: $URL");
exit;
?>
and I had the following .htaccess file in my home directory to redirect my RSS feed:
RewriteEngine on RewriteRule ^index.rdf$ http://blinne.blogs.com/blog/index.rdf [P]
Posted by Rich at 01:30 PM in Weblogs | Permalink | Comments (0) | TrackBack
September 12, 2003
Including an RSS feed on your site
Here's a really cool way of including an RSS feed on your site, care of the Unofficial TypePad Resources blog.
David Carter-Tod at Wytheville Community College has created a tool that generates a Javascript script that can be put onto any website. This script displays the contents of an RSS feed with a number of formatting options to allow you to display the feed the way you want. For an example of what it can look like have a look here (Right-hand side under the RSS Feeds heading). This is a great program, provided free of charge, that anyone with a website can use.
If you are comfortable with editing HTML & Javascript tags then dive right in. The Wytheville Community College page gives you instructions on what the code you need is.
For those less familiar with hand-coding pages, I have a tool that provided a limited set of functions for the Wytheville Community College script. There are seven options for this: the location of the RSS feed, the number of items to display, whether or not to display the description of the items, whether the links should open in a new window and whether or not to display the feed title, datestamp & description. There are many other options available, but these are the only ones I've gotten around to including. If people want others, then you'll have to do it by hand. (If people ask reeaally nicely, I may consider including some others)
Posted by Rich at 09:29 AM in Weblogs | Permalink | Comments (0) | TrackBack
September 10, 2003
New version of google-bombing
I have been google-bombed by auto-commenting scripts. Here's another technique reported by kasia in a nutshell:
Remember the good old days when you could make a search phrase on google point to a certain page? Who can forget when the phrase 'go to hell' brought you the Microsoft site as the first hit. That was referred to as 'google bombing'.. simply linking to a specific site with a specific phrase making google ranking for that phrase increase for that site (but you all knew that).
Now there's a new version! Everyone loves their statistics.. of course.. me included.. but many forget, that allowing Google to index your statistics is totally useless for you and the person searching.. and guess what.
Now not only are the bad guys (tm) using your statistic pages to increase their google ranking.. some have discovered this is a good way to play pranks by using google..
Yep, it's just more google-bombing .. Simply hit a lot of blogs that allow Google to index their statistic pages with that phrase as a referer.. and suddenly a whole lot of people wonder why, what where..
It's simple to stop google from indexing your statistic pages.. in your root site directory, add a robots.txt file with something like this in it..
User-agent: *
Disallow: /stats/
Where /stats/ is the location of your statistic pages.
[Matt pointed out that search phrase to me.]
Posted by Rich at 10:46 AM in Weblogs | Permalink | Comments (0) | TrackBack
September 07, 2003
Update script finally done.
In a comment to this post, I said I would ping him back with my new trackback mechanism. It is now done, so I am doing the promised ping. This works by adding a javascript source insert at the end of my blog. The script checks to see if an update is needed and then outputs when the last ping is done. This does both trackback and weblogs pings. Now for the script:
<?php>
// Use xmlrpc value
include('xmlrpc.inc');
function getval ($key) {
global $HTTP_GET_VARS;
if (get_magic_quotes_gpc()) {
return stripslashes($HTTP_GET_VARS[$key]);
}
return $HTTP_GET_VARS[$key];
}
//Make strtotime accept ISO formatted time often found in RSS
function toUnixTime($string)
{
$unixTime = strtotime($string);
if ($unixTime == -1) {
list($year,$month,$day,$hour,$minute,$second)
= split("[-:T\.]",$string);
$unixTime = strtotime("$year-$month-$day $hour:$minute:$second");
}
return $unixTime;
}
//Call the trackback script. If the trackback link ends with a slash
//then do an http POST otherwise do a get. A trackback ping includes
//title, excerpt, url, and blog name extracted from the rss.
function pingURL($trackback, $title, $url, $excerpt, $blog_name) {
$poststring = "title=" . urlencode(trim($title)) . "&excerpt=" .
urlencode(trim($excerpt)) . "&url=" . urlencode(trim($url)) .
"&blog_name=" . urlencode(trim($blog_name));
$tab = parse_url($trackback);
$host = $tab['host'];
$path = $tab['path'];
$query = $tab['query'];
if (strcmp($query, '') != 0) {
$file_name = $trackback . "&" . $poststring;
$file = fopen($file_name, "r");
if (!file) {
while (!feof($file)) {
$line = fgets($file, 4096);
}
}
} else {
$fp = fsockopen($host, 80, $errno, $errstr, $timeout = 30);
if ($fp) {
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($poststring)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $poststring . "\r\n\r\n");
while(!feof($fp)) {
$line = fgets($fp, 4096);
}
//close fp - we are done with it
fclose($fp);
}
}
}
// This function looks at a referenced site and looks for an RDF entry
// inside of an HTML comment. (Moveable type standard practice and
// added to the blinne.org blogger blog).
function pingSite($link) {
global $title, $blog_name, $description;
list ($url1, $aref1) = split("#", $link);
$file1 = fopen($url1, "r");
$aref1 = trim($aref1);
if ($file1) {
while (!feof($file1)) {
$line1 = fgets($file1, 4096);
$pattern = "a name=\\\"$aref1\\\"";
if (ereg($pattern, $line1, $reg)) {
break;
}
}
while (!feof($file1)) {
$line1 = fgets($file1, 4096);
if (ereg("\\]*href=\\\"([^\\\"]*)\\\"", $line1, $reg)) {
$link1 = $reg[1];
list ($url2, $aref2) = split("#", $reg[1]);
$file2 = fopen($url2, "r");
$aref2 = trim($aref2);
if ($file2) {
if (strcmp($aref2, "") != 0) {
while (!feof($file2)) {
$line2 = fgets($file2, 4096);
$pattern = "a name=\\\"$aref2\\\"";
if (ereg($pattern, $line2, $reg)) {
break;
}
}
}
$foundRDF = 0;
while (!feof($file2)) {
$line2 = fgets($file2, 4096);
if (ereg("\\$foundRDF = 1;
break;
}
}
if ($foundRDF) {
$linkFound = 0;
$trackbackFound = 0;
while (!feof($file2)) {
$line2 = fgets($file2, 4096);
if (ereg("dc\\:identifier=\\\"([^\\\"]*)", $line2, $reg)) {
if (strcmp($reg[1], $link1) == 0) {
$linkFound = 1;
}
}
if (ereg("trackback\\:ping=\\\"([^\\\"]*)", $line2, $reg)) {
$trackback = $reg[1];
$trackbackFound = 1;
}
if ($linkFound && $trackbackFound) {
$trackbackFound =0;
$linkFound = 0;
pingURL($trackback, $title, $link, $description, $blog_name);
}
}
}
}
}
if (ereg("QSM.item.end", $line1, $reg)) {
break;
}
}
}
}
// Do an XML RPC to weblogs and blogrolling. Weblogs is commented out
// because Blogger pro automatically is pinged by blogger and it is slow
// to ping to boot.
function ping_weblogs($name, $address) {
$f = new xmlrpcmsg('weblogUpdates.ping', array(new xmlrpcval($name),
new xmlrpcval($address)));
//This is done by blogger.
$c = new xmlrpc_client("/RPC2", "rpc.weblogs.com", 80);
$r=$c->send($f);
$c = new xmlrpc_client("/pinger/", "rpc.blogrolling.com", 80);
$r=$c->send($f);
}
// XML parser support routine
function startElement($parser, $name, $attrs) {
global $insideitem, $tag, $title, $description, $link,$date;
$tag = $name;
if ($name == "ITEM") {
$insideitem = true;
}
}
// XML parser support routine
function endElement($parser, $name) {
global $insideitem, $tag, $title, $description, $link, $date, $last_update, $needed_update, $latest_time;
if ($name == "ITEM") {
$time = toUnixTime($date);
if ($time > $last_update) {
if ($time > $latest_time) {
$latest_time = $time;
}
$needed_update = 1;
pingSite($link);
}
$title = "";
$description = "";
$link = "";
$date = "";
$insideitem = false;
}
}
// XML parser support routine
function characterData($parser, $data) {
global $insideitem, $tag, $title, $description, $link, $date, $blog_name;
if ($insideitem) {
switch ($tag) {
case "TITLE":
$title .= $data;
break;
case "DESCRIPTION":
$description .= $data;
break;
case "LINK":
$link .= $data;
break;
case "DC:DATE":
$date .= $data;
break;
case "PUBDATE":
$date .= $data;
break;
}
} else {
switch ($tag) {
case "TITLE":
$blog_name .= $data;
break;
}
}
}
//main starts here
error_reporting(E_ERROR | E_PARSE);
$insideitem = false;
$tag = "";
$title = "";
$description = "";
$link = "";
$date = "";
$needed_update = 0;
$latest_time =0;
$blog_name="";
$rss = getval("rss");
$name = getval("name");
$address = getval("address");
$rss_update = $rss;
for ($i=0; $i < strlen($rss_update); $i++) {
if ($rss_update[$i] == ':' || $rss_update[$i] == '/') {
$rss_update[$i] = '_';
}
}
$file = fopen($rss_update, "r");
if (!$file) {
$last_update = 0;
} else {
$last_update = fgets($file, 4096);
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen($rss,"r")
or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);
if ($needed_update) {
$file = fopen($rss_update, "w");
$last_update = time();
if ($latest_time > $last_update) {
$last_update = $latest_time;
}
fwrite($file, time());
ping_weblogs($name, $address);
}
$time_string = strftime("%c", $last_update);
echo "document.write(\"Weblogs Last Updated: $time_string\");";
?>
Posted by Rich at 04:13 PM in Weblogs | Permalink | Comments (0) | TrackBack
September 05, 2003
Update Script Working
I have created a new script called update.php that looks at the rss file for this blog and pings weblogs and blogrolling, it it is fresh. A future version will do trackback pings. Once this is completely done, I will give all the technical details.
Update: See Sunday's post on the final version.
Posted by Rich at 06:17 PM in Weblogs | Permalink | Comments (0) | TrackBack
September 04, 2003
Why I Like Google/Blogger
I had been patiently waiting for the pro version of Blogger, but Blogger Pro ordering was down for retooling. So, I asked their support for an ETA when the site would be back up. I got the following reply!
Since we don't have an ETA for being able to order upgrades again, I just went ahead and gave you a complimentary upgrade to Pro. You should see the extra features next time you log in. Enjoy!That's the way customers should be treated. I plan on upgrading as soon as it is available.
Sincerely, Graham
Posted by Rich at 05:05 PM in Weblogs | Permalink | Comments (0) | TrackBack
August 29, 2003
Welcome to the New Blinne Blog
I am creating a new Blinne blog, blogger edition! This integrates the enetation comment system. I created a permalink.php file, an enetation template and a blogger template.
This does two things:
- Allows for limited HTML editting of enetation comments.
- Creates permalinks with comments in-line.
Posted by Rich at 01:54 PM in Weblogs | Permalink | Comments (0) | TrackBack
August 23, 2003
A New Kind of Spaming
I'm back. The summer has been a busy time and my blogging went on hold. I did receive two comments from postal code and whois, a couple of "people" whose URLs were commercial web sites. It looks like there are some autocommenters of pages that are listed by -- I suspect -- Google. Just a warning to fellow members of the blogosphere to check their comments and expunge the spam. I left the comments but deleted the URLs. Given the topic, it was ironic that this post was spamed. :-)
Posted by Rich at 08:14 AM in Web/Tech, Weblogs | Permalink | Comments (0) | TrackBack
March 17, 2003
Testing Scripturize Plug In
This plug-in should give links for Bible verses such as John 3:16 and Jude 12 and don't forget Psalm 23.Posted by Rich at 05:47 PM in Weblogs | Permalink | Comments (2) | TrackBack
Edit Link for MT That's Visible Only to Authors
Here's how I add an edit link that shows up only for authors. First, go to manage templates and set the output file for your main index to index.php. Then, goto weblog config and set the default extension for archives as php.
In your templates you add the following code wherever you want your edit link:
<?php
if(isset($_COOKIE['user'])) {
echo " | <a href=\"<$MTCGIPath$>mt.cgi?__mode=view&_type=entry&id=<$MTEntryID$>&
blog_id=<$MTBlogID$>\" target=\"_blank\">Edit";
}
?>
How it works:
When you log into MT, it sets a cookie called user that saves your login information. The PHP code checks for the set cookie. If someone is able to hack a forged cookie, the link will still fail to work because the password is wrong.
Posted by Rich at 03:47 PM in Weblogs | Permalink | Comments (0) | TrackBack
March 04, 2003
Terror Alert Level -- Sesame Street Style
I have added a terror alert level to the Blinne Blog thanks to "Geek and Proud":http://www.geekandproud.net/archives/000143.html
Somehow it seems a lot safer that we are at level Bert. Maybe if OBL had a rubber ducky he might not have so much repressed anger. :-)
Posted by Rich at 05:26 PM in Weblogs | Permalink | Comments (0) | TrackBack
Bugs Found in MT-Textile (Greedy PERL expressions)
MT-Textile is a really cool formatting text langauge for MT. Unfortunately, some of the regular expressions used have what are known as _greedy_ regular expressions. These can be fixed as follows:
Change line 200 of textile.pm:
$text =~ s!\^(.+?)\^!$1!gm;
Change line 197 of textile.pm:
$text =~ s!(^|\s|>)$f\b(.+?)\b($punctre*)$f(($punctre{0,2})(\s|$)|<)!$1<$r>$2$3$r>$4!gm;
==
What I have done is replace the greedy expression .+ or .* with the non-greedy expression .+?
==
So now, *this works* and ^1^ this *works*.
For
So now, *this works* and ^1^ this *works*.
Posted by Rich at 10:40 AM in Weblogs | Permalink | Comments (0) | TrackBack
February 21, 2003
Welcome
Welcome to the Blinne Blog. This is the comings and goings of the Blinne family. Feel free to add your comments and say hi.
For those who are not internet savvy, a blog is a weblog. This is the 21st century version of a diary.
Posted by Rich at 06:00 PM in Weblogs | Permalink | Comments (0)