William Jiang

JavaScript,PHP,Node,Perl,LAMP Web Developer – http://williamjxj.com; https://github.com/williamjxj?tab=repositories

Perl 1

#! /usr/bin/perl -w

# Seq: fetch sequence seq_ data from  XML server, 
# then insert/update into william_test database.

use Getopt::Long;
use FileHandle;
use POSIX qw(setsid);
use SOAP::Lite;
use Data::Dumper;
use strict;
use Socket;
use Sys::Hostname;

use lib qw (/home/william/lib);
use config;
use xml_parser;


# -------------------------------------------------------------
# $counter: count the increment of db primary key: seq_id, address_id etc.
# $Seq_no: all formated sequence numbers (CSV, end with '0000000000').
# $db_href:  db data ref as { seq1=>[6s], seq2=>[6s] }
# $log_file: log file.
# $soap:     soap handler to control communcation with cci-ext.
# $parse:    xml parser for xmcst data.
# -------------------------------------------------------------
our ($counter, $Seq_no, $db_href, $log_file, $soap, $parse) = (0);

my $account = '';
my @entities = ();
my @seqnumbers = ();
my $Seqfile = '';
my $demo = '';
my $help = '';
my $network = '';
my $server = '';
my $logflag = '';


usage() unless (GetOptions(
		'account=s'				=> \$account, 
		'entities=s'			=> \@entities,
		'seqnumbers=s'	=> \@seqnumbers,
		'file=s'					=> \$Seqfile,
		'demo'						=> \$demo,
		'help|?'					=> \$help,
		'network'				=> \$network,
		'server=s'				=> \$server,
		'log'							=> \$logflag,
));

$help && usage();

init_environment();

print "\n[".localtime() . "]: Now Begin Seq Service ......\n";

$parse = new xml_parser() || die "$!";

setup_soap();

if ($network) {
	connect_xmltcp_agent();
}
else {
	connect_xmlipc_agent();
}	

# Seqfile include sequence number, CSV format.
# the format should be: 123,456,789, 901,
if ($Seqfile) {
	open (FH, $Seqfile) or die "can not open: $!";
	while (<FH>) { chomp; $Seq_no .= $_; }
	close (FH);
}

#if (! $Seq_no) {
if ($demo) {
	$Seq_no = '';
	while (<DATA>) { chomp; $Seq_no .= $_; }
}

# input should be: -t 123 456 789?
if( scalar(@seqnumbers) ) {
	$Seq_no = '';
	$Seq_no .= join(',', @seqnumbers);
}

# collect Seq_no acquired from command line.
if ($Seq_no) {
	# $Seq_no =~ s/\s+//g;		# cut off space, no effect in command line.
	#$Seq_no =~ s/,*/,/g;	# cut off more ','
	$Seq_no .= TCP_TERMINATE_REQUEST;		 # end with ','

	print '<' . $Seq_no . ">\n";
	my $sqls = process_Seqs( $Seq_no, 1 );

	if (@$sqls) {
		print "============ procedure sql statements ============\n";
		foreach my $s ( @$sqls ) { 
			$s =~ s"\n""g;  #cut off newline.
			$s =~ s"\s+" "g;  #cut off multi-space into single space.
			print '<' . $s . ">\n";
		}
	}
}
elsif ( $account ) {
	$account = uc $account if($account);

	my $h; $h->{account} = qq{ "$account" };

	if( scalar(@entities) ) {
		my $entity = '';
		$entity = uc join(',', @entities);

		# bill3,bill2,bill, => "bill3","bill2","bill"
		$entity =~ s/,$//;			#  bill2,bill
		$entity =~ s/^/"/;			# "bill2,bill
		$entity =~ s/$/"/;			# "bill2,bill"
		$entity =~ s/,/","/g;		# "bill2","bill"

		$h->{entity} = $entity;
	}

	my $in = set_hash_for_soap($h);

	my $account_msg = soap_get_accountId( $in );

	#delete $in->{account};
	#delete $in->{entity} if ($in->{entity});
	my $last = @{$account_msg}[-1];
	print "+++++++++++++++++++The last on is $last\n";
	print Dumper($last);

	my ($Seq_msg, $entity);
	foreach (@$account_msg) {

		my $seq_id = $_->[0];
		my $account = $_->[1]; $account =~ s/\s+$//;
		$entity = $_->[2]; $entity =~ s/\s+$//;
		print "Begin to Process ACCOUNT [$account], ENTITY [$entity]\n";

		$in->{seq_id} = $seq_id;
		$in->{account} = $account;
		$Seq_msg = soap_get_sequenceNo( $in );
	}

	if ($Seq_msg) {

		my $seqs = p2( $Seq_msg );
		
		unless ($seqs) {
			print "Error in processing seq_id <$in->{seq_id}>, account <$in->{account}>, entity <$entity>.\n";
			exit;
		}

		my $sqls = process_Seqs($seqs);

		if (@$sqls) {
			print "============ procedure sql statements ============\n";
			foreach my $s ( @$sqls ) { 
				$s =~ s"\n""g;  #cut off newline.
				$s =~ s"\s+" "g;  #cut off multi-space into single space.
				print '<' . $s . ">\n";
			}
			$in->{account} = $in->{account}; 
			$in->{entity} = $in->{entity};
			$in->{sqls} = $sqls;
			# $soap->process_sql_statements( $in );
		}
	}
	else {
		print "There is no available scan sequence message for seq_id <$in->{seq_id}>, account <$in->{account}>, 
					entity <$in->{entity}>.\n";
	}
}
elsif (scalar(@entities)) {
		die "Please point the account related to the entity.";
}
else {
	get_seqmsg_from_db();
}

print "\n[".localtime() . "]: End of Loop ......\n";

close (SOCK) || die "close: $!";
close ($log_file);
exit 8;


#####################
# Subroutines
#####################

sub BEGIN {
	$ENV{ PATH } = '/usr/bin:/usr/local/bin:/home/william/bin/:.';
	$ENV{ HTTP_proxy } = 'http://dummy:8080';
}

sub init_environment
{
	# A well behaved daemon will chdir() to the root directory so it doesn't
	# prevent unmounting the filesystem containing the directory from which
	# it was launched.
	#
	chdir;		# or use Cwd; chroot( getcwd() );

	my ($l) = (`basename $0` =~ m"(\w+)");
	$log_file = BASEDIR . $l . ".log";

	# Reseve normal input and error input to a same file.
	if ($logflag) {
		open (STDOUT, '>>', $log_file) || die "stdout: $!";
		open (STDERR, '>>&STDOUT') || die "stderr: $!";
	}
	# Flush standard output buffer.
	select(STDOUT); $| = 1;

	# Many signal must be omited, use 'kill -l' to choose.
	# SIGPIPE for pipe.
	# Consider what happens when start up a pipe to a command that doesn't exist? 
	#
	my @signals = ('INT', 'QUIT', 'TERM'); # 'PIPE'
	foreach (@signals) {
		$SIG{ $_ } = \&exit_request_handler;
	}

	# send e-mail;
	$SIG{ 'ALRM' }  = \&postMail;

	#Zombies
	#You have to be prepared to ``reap'' the child process when it finishes 
	$SIG{ 'CHLD' } = \&child_handler;

	# It is bwilliam_tester to fork a child process to do the job.
	# Notice: 'unless' = 'not defined' + '0'.
	#
	my $pid = fork();
	die "Cannot fork, $!" unless defined $pid;
	exit 4 if $pid;

	# This will keep process is un-relative with the current shell.
	# use setsid() to generate new progress group.
	#
	POSIX::setsid() or die "Can't start a new session: $!";

	print "Initialize running environment is OK.\n";

	return 1;
}

sub connect_xmltcp_agent
{
	my ($host, $addr, $remote, $port, $iaddr, $paddr, $proto);

	# $0 IP address or hostname.
	my $h = hostname();
	if( $server ) { $host = $server; }
	else { $host = hostname(); }
	$addr = inet_ntoa(scalar gethostbyname($host || 'localhost'));
	$remote  ||= SERVER;
	$port    ||= PORT;  # random port
	if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
	die "No port" unless $port;

	$iaddr   = inet_aton($remote) || die "no host: $remote";
	$paddr   = sockaddr_in($port, $iaddr);
	$proto   = getprotobyname('tcp');

	socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";

	connect(SOCK, $paddr)    || die "connect: $!";

	autoflush SOCK 1;

	print "Server name: <$host>, Server address: <$addr>\n";
	print "Server service port:<$port>, Client name: <$remote>\n";

	return 1;
}

sub connect_xmlipc_agent 
{
	my $rendezvous = shift || BASEDIR . '/.IPC_PATH';

	socket(SOCK, PF_UNIX, SOCK_STREAM, 0)       || die "socket: $!";

	connect(SOCK, sockaddr_un($rendezvous))     || die "connect: $!";

	autoflush SOCK 1;

	my $host = hostname();
	print "Server name: <$host>, IPC path: <$rendezvous>\n";
	
	return 1;
}

# Write common proxy() and uri() swilliam_testings for all SOAP::Lite objects.
# All objects created after this will be cloned from the default object
# and hence get its properties.
#
# proxy: service address (endpoint): server.cgi
# It will dispatch SOAP calls on 'modules' directory.
# endpoint: 'http://dummy:80/william/cgibin/server.cgi',
# proxy server to pass through firewall: http://dummy:8080.
# uri: uri for SOAP methods.
sub setup_soap
{
	$soap = SOAP::Lite
		->uri( 'db')
		->proxy( 'http://dummy/cgi-bin/server.cgi')
	;

	# can ignore.
	$soap->transport->proxy( 'http' => 'http://dummy:8080' ) unless(defined $ENV{HTTP_proxy});

	# switch on.
	use SOAP::Lite
		on_fault => sub {
			my ($soap, $res) = @_;
			die ref $res ? $res->faultstring : $soap->transport->status, "\n";
		};

	print "Fetching sequence Message from SOAP Server.\n";

	return 1;
}

sub get_seqmsg_from_db
{
	my %william_tests = (
		'william' => ['william'],
		'bill' => [ 'william'],
		'william_2'=> [ 'W1', 'W2', 'W2', 'W4', 'W5', 'W6' ],
	);

	my $account_msg = [];
	foreach (keys %william_tests) {

		my $t = $_;
		my ($a, $h, $in, $aref);
		$a = join(',', @{$william_tests{$t}} );
		$a =~ s/^/"/;			# bill2,bill => "bill2,bill
		$a =~ s/$/"/;			# "bill2,bill"
		$a =~ s/,/","/g;	# "bill2","bill"

		$h->{account} = $a;
		$h->{entity} = qq{"test"} if ($t =~ m/bill/); # only test

		$in = set_hash_for_soap( $h );

		$aref = soap_get_accountId( $in );

		$account_msg = [ @$account_msg, @$aref ];
	}

	my $Seq_msg;
	foreach (@$account_msg) {

		my $seq_id = $_->[0];
		my $account = $_->[1]; $account =~ s/\s+$//;
		my $entity = $_->[2]; $entity =~ s/\s+$//;
		print "Begin to Process ACCOUNT [$account], ENTITY [$entity]\n";

		# how to set {'dataserver'=>'dummy_server','database'=>'dummy','seq_id'=>'dummy_id'} ?
		my $in = set_hash_for_soap( {seq_id=>$seq_id, account=>$account} );

		$Seq_msg = soap_get_sequenceNo( $in );

		if ($Seq_msg) {
			my $seqs = p2( $Seq_msg );
			
			unless ($seqs) {
				print "Error in processing seq_id <$seq_id>, account <$account>, entity <$entity>.\n";
				next;
			}

			my $sqls = process_Seqs( $seqs );

			if (@$sqls) {
				print "============ procedure sql statements ============\n";
				foreach my $s ( @$sqls ) { 
					$s =~ s"\n""g;  #cut off newline.
					$s =~ s"\s+" "g;  #cut off multi-space into single space.
					print '<' . $s . ">\n";
				}
				$in->{account} = $account; 
				$in->{entity} = $entity;
				$in->{sqls} = $sqls;
				# $soap->process_sql_statements( $in );
			}
		}
		else {
			print "There is no available scan sequence message for seq_id <$seq_id>, entity <$entity>.\n";
		}

	} # end of foreach
}

sub p2
{
	my $t1 = shift;
	
	@$t1 = grep{ $_->[1] =~ s#\s+$## } @$t1;

	my $total_records = scalar(@$t1);
	print "There are totally <". $total_records . "> records.\n";

	%$db_href = map{ $_->[1] => $_ } @$t1;
	$Data::Dumper::Varname = "db_href";
	# print Dumper( $db_href );

	my @t2 = map( $_->[1], @$t1 );

	if (scalar(@t2)) {
		# assemble $Seq_no.
		$Seq_no = join( DELIMITER, @t2 );

		# How about sequence_no like this 'NO DELIVERY, SALES RETURN'?
		$Seq_no =~ s/\D{2,}/,/g; # non-digital.
		$Seq_no =~ s/,+/,/g;

		# after sed, there still some Seq_no?
		return 0 unless ($Seq_no);

		$Seq_no .= ",1111111111,";		 # end with ','
		$Data::Dumper::Varname = "sequence_no";
		print Dumper( $Seq_no );

		return $Seq_no;
	}
	else {
		print '<' . __LINE__ . " line> Never come here.\n";
		return undef;
	}
}

sub soap_get_accountId
{
	my $in = shift;
	my $aref = [];;

	#select seq_id,key from william where resource="vancouver"
	#and test_1 = "$in->{account}" and test_2 in ($in->{entity})
	#
	eval {
		local $SIG{ALRM} = sub { die "alarm\n" };
		alarm SOAP_TIME_OUT;
		$aref = $soap->select_accountId( $in )->result;
		alarm 0;
	};
	if ($@) {
		if ($@ =~ m/alarm/) { die "$!"; }
		else { die "Error in fetching select_accountId."; }
	}

	return $aref;
}

sub soap_get_sequenceNo
{
	my $in = shift;
	my $aref = [];
	eval {
		local $SIG{ALRM} = sub { die "alarm\n" };
		alarm SOAP_TIME_OUT;
		$aref = $soap->select_sequenceNo( $in )->result;
		alarm 0;
	};
	if ($@) {
		if ($@ =~ m/alarm/) { die "$!"; }
		else { die "Error in fetching select_sequenceNo."; }
	}

	return $aref;
}

sub process_Seqs
{
	my ($Seq_no, $demo) = @_;

	send( SOCK, $Seq_no, 0) or warn "problem send: %!\n";

	my ($sqls, $numbers, $xmldata) = ( [], 0, '');

	while (1) {
		eval {
			local $SIG{ALRM} = sub { die "alarm\n" };
			alarm TIME_OUT;
			recv(SOCK, $xmldata, MAX_MSG_SIZE, 0);
			alarm 0;
		};
		if ($@) {
			if ($@ =~ m/alarm/) { die "$!"; }
			else { 
				close(SOCK);
				die "Error in receive from xmlagent server\n";
			}
		}

		my $ret = validate_xml( $xmldata );
		next if ( $ret == -1 );
		last if ( $ret == -2 );

		# XML process.
		# Firstly, parse the xml_data stream.
		# How about error occurs ?
		my $flag = $parse->run( $xmldata );

		unless ($flag) {
			print "Parse Error???\n";
			next;
		}
		# next if ($demo);

		my $pod = $parse->get_pod();
		my $scans = $parse->get_pickup(); # get all scan data [].

		print "\n\n\n";
		$Data::Dumper::Varname = "pod";
		print Dumper($pod);
		$Data::Dumper::Varname = "scans";
		print Dumper($scans);

		my ($podpick, $scanpicks, $proc_sql) = ({}, [], '');

		my $seq = $parse->get_sequence_no(); # get sequence number.

		my $id = $db_href->{$seq}[0] || 'testing';

		my $pod_status = $parse->get_pod_status();

		$podpick = shift (@$scans) if $pod_status;

		# $scanpicks = compare($seq, $scans);
		$scanpicks = $scans;

		# If POD, then fill up Shu table.
		if ($pod_status) {

			my $test_date = $parse->get_testdate();
			my $delivered = $parse->get_pod_delivery_location();			
			my $sign = $parse->get_pod_sign();			
			my $service = $parse->get_pod_service();			

			print "test date <$test_date>, sequence number <$seq>, delivery location <$delivered>, service <$service>\n";

			$proc_sql = generate_prod_insert($id,$podpick,$delivered,$service);
			push (@$sqls, $proc_sql);

			$proc_sql = generate_proc_sql_update($id,$sign);
			push (@$sqls, $proc_sql);
		}
		else {
			my $city = $parse->get_pod_delivery_city() || ' ';
			my $country = $parse->get_pod_delivery_country() || ' ';

			$proc_sql=generate_proc_sql_update($id,$city,$country);
			push (@$sqls, $proc_sql);
		}

		# next if ($demo);

		# There is no suitable record if $scanpicks return undef.
		next unless $scanpicks;

		# If new pickup exists, then insert them.
		foreach (@$scanpicks) {
			$proc_sql = generate_proc_modify($id, $_);
			push @$sqls, $proc_sql;
		}

	} # End of while(1)

	return $sqls;
}

sub compare
{
	my ($seq, $onlypicks) = @_;

	unless ($onlypicks) {
		print "No Pickup Data (scanType=08), not integrity!\n";
		return;
	}

	my $scanpicks;

	# get 3 comparing elements: city, country, timestamp.
	my ($timestamp, $city, $country) = @{$db_href->{$seq}}[4,3,2];

	# If no record, then $timestamp=undef.
	if (defined $timestamp) {

		# '2007/06/12 10:24:00'	=>	'2007-06-08 18:06'
		$timestamp =~ s":(\d)\1$"";
		$timestamp =~ s"/"-"g;

		foreach my $lastScan (@$onlypicks) {

			my $date_time = $lastScan->[2] . ' ' . $lastScan->[3];
			if ( ($date_time eq $timestamp) &&
					($lastScan->[0] eq $city) &&
					($lastScan->[1] eq $country)
			) { last; }
			else { push (@$scanpicks, $lastScan); }

		} # End of foreach()
	}
	else {
		$scanpicks = $onlypicks;
	}

	return $scanpicks;
}

sub validate_xml
{
	my $xmldata = shift;

	unless ($xmldata) {
		print "Nothing received, xmlcst server can't return anything, terminate.\n";
		return -2;
	}
	elsif( ($xmldata=~m"TERMINATE") || ($xmldata=~m"\n") ) {
		print $xmldata;
		print "\n\n\n\n";
		print "The sequence number batch is processed OK.....\n";
		return -2;
	}

	elsif( $xmldata=~m"AGAIN_LOOP" ) {
		print "This sequence number batch is processed OK, re-again.....\n";
		return -2;
	}

  if($xmldata =~ m{
      <Number>(.+)</Number></sequenceNumber>
      <Error><Code>(\d+)</Code>
      <Message>(.*?)</Message>
    }sgx ) {
    print "\n=============== Invalid sequence#: $1 ===============\n";
    print "<$2>: <$3>\n";
		return -1;
  }
	elsif ($xmldata =~ m{
      <Error><Code>(\d+)</Code>
      <Message>(.*?)</Message>
    }sgx ) {
    print "\n=============== Invalid sequence#: UNKNOWN ===============\n";
    print "<$1>: <$2>\n";
		return -1;
	}
	else {
		print $xmldata;
	}
	return 1;
}

sub set_hash_for_soap
{
	my $h = shift;

	my $in = $h;

	if($h->{account} =~ m/william/i && defined $h->{entity} && $h->{entity} =~ m/test/i) {
		$in->{dataserver} = 'bill';
	}
	elsif ($h->{account} =~ m/william/i) {
		$in->{dataserver} = 'william';
	}
	else {
		$in->{dataserver} = 'william_2';
	}

	$in->{database} = 'william_test';

	$Data::Dumper::Varname = "input_soap_href";
	print Dumper( $h );

	return $in;
}

sub generate_proc_modify
{
	my ($seq_id, $scan) = @_;

	my $seq_details_id = generateRandom();
	my $location_address_id = generateRandom();

	my $datetime = $scan->[2] .' '. $scan->[3] || ' ';
	my $comment = $scan->[4] || ' ';
	my $city = $scan->[0] || ' ';
	my $country = $scan->[1] || ' ';

	my $sql = qq{ exec proc_modify
		 "$seq_id", "$detail_id",	 "$location_id", "$datetime",	"$comment", "$city", "$country"
	};

	return $sql;
}

sub generate_prod_insert
{
	my ($seq_id, $scan, $delivered, $service) = @_;

	my $detailsid     = generateRandom();
	my $addressid     = generateRandom();
	my $unclassifiedid= generateRandom();

	my $datetime = $scan->[2] .' '. $scan->[3] || ' ';
	my $comment = $scan->[4] || ' ';
	my $city = $scan->[0] || ' ';
	my $country = $scan->[1] || ' ';

	my $sql = qq{ exec prod_insert
		"$detailsid", "$seq_id", "$datetime",
		"$comment", "$addressid",
		"$city", "$country", "$unclassifiedid",
		"$delivered", "$service"
	};

	return $sql;
}

sub generate_proc_sql_update
{
	my ($seq_id, $sign) = @_;
	return qq{ exec proc_sql_update "$sign", "$seq_id" };
}

sub generate_proc_sql_update
{
	my ($seq_id, $city, $country) = @_;
	my $addressid = generateRandom();

	my $sql = qq{ exec proc_sql_update
				"$seq_id", "$city", "$country", "$addressid" };

	return $sql;
}


# sendmail for positively control.
sub postMail {
	my $message = shift;
	my $emailaddr = shift || "william\@dummy.com";
	$message = "No message" unless ($message);

	open (SENDMAIL, "|/usr/lib/sendmail -oi -t -odq")
		or die "Can't sendmail: $!\n";

	print SENDMAIL <<"EOF";
	From:   xml_Seq <william\@dummy>
	To:		$emailaddr
	Subject: Perl Demo Report

	$message

EOF
	close(SENDMAIL) or warn "sendmail didn't close nicely";
}

sub usage
{
print <<HELP;
Usage: $0 [-a account] [-e entities] [[-t seqnumbers]...] [-f Seqfile] 
          [-d] [-h] [-n] [-s server] [-l]
Description:
  -a  specify account, e.g: william (only 1 account every time)
  -e  specify entity, e,g: bill,bill2 (1 account can have many entities)
  -t  specify sequence number, e,g: 825938046407,494756258188
  -f  sequence file which include sequence number
  -d  using demo to see sequence message
  -h  this help text
  -n  choose xmlagent: TCP or IPC, default is IPC
  -s  server name (default: localhost)
  -l  log output. default to screen, if set, write to logfile)
Default Usage: $0
HELP
exit 1;
}

sub exit_request_handler
{
	my ($recvsig) = @_;

	foreach (('INT', 'QUIT', 'TERM')) {
		$SIG{ $_ } = 'IGNORE';
	}
	close( SOCK );
	die "Qutting on singal $recvsig\n";
}

sub child_handler
{
	wait;
}

sub generateRandom {
  $counter = 0 if ($counter > 7000);
  return  sprintf("S%lu%05u%04u", time(), $$, $counter ++ );
}

sub getNowDateTime 
{
	my $time; 
	@$time = localtime(time);

	my $nowtime = sprintf ("%02d%02d%02d", $time->[2], $time->[1], $time->[0]);
	my $nowdate = sprintf ("%02d%02d%02d", ($time->[5]+1900)%100, $time->[4]+1, $time->[3]);

	return "$nowdate|$nowtime|";
}

__DATA__

470005042337,470005042360,470005042521,470005042532,470005049835,470005049846

Advertisements

36 responses to “Perl 1

  1. Blogging to the Bank 3.0 02/15/2011 at 11:01 am

    I am grateful to acquire observed this site. Retain up the excellent postings.

  2. binary options 02/22/2011 at 7:58 pm

    Hello there, just became alert to your blog through Google, and found that it’s truly informative. I am gonna watch out for brussels. I’ll appreciate if you continue this in future. A lot of people will be benefited from your writing. Cheers!

  3. malware 02/24/2011 at 11:59 pm

    Very nice post. I just stumbled upon your weblog and wished to say that I have really enjoyed browsing your blog posts. In any case I will be subscribing to your feed and I hope you write again soon!

  4. Cathey Matas 02/25/2011 at 6:55 pm

    Sensational info. I look forward to seeing much more.

  5. Serp 02/27/2011 at 11:35 am

    Heya i’m for the first time here. I found this board and I find It truly useful & it helped me out much. I hope to give something back and aid others like you helped me.

  6. double bull blinds 03/07/2011 at 9:57 pm

    Awesome post, are you on facebook?

  7. FROSTWIRE 03/08/2011 at 8:18 am

    I like the valuable information you provide in your articles. I’ll bookmark your blog and check again here frequently. I’m quite certain I will learn many new stuff right here! Best of luck for the next!

  8. Hayden Hohenstein 03/09/2011 at 5:27 pm

    I’m really impressed with your writing skills as well as with the layout on your blog. Is this a paid theme or did you customize it yourself? Either way keep up the nice quality writing, it’s rare to see a great blog like this one nowadays..

    • williamjxj 03/10/2011 at 12:06 pm

      Actually I customize it.
      In the control panel, choose ‘Pages’ -> ‘Add New’ to add new pages.
      Cascade the new pages, and you will get the same layout.
      Just have a try, and it would easy.

  9. Stacey Strausberg 03/10/2011 at 8:36 am

    Heya i am for the first time here. I found this board and I find It truly useful & it helped me out much. I hope to give something back and aid others like you helped me.

  10. Darron Cranney 03/11/2011 at 12:28 am

    We’re a group of volunteers and opening a new scheme in our community. Your site provided us with valuable info to work on. You have done a formidable job and our entire community will be thankful to you.

  11. Yang Quatrevingt 03/11/2011 at 6:58 pm

    Hey there, You have done an incredible job. I will definitely digg it and personally recommend to my friends. I’m sure they’ll be benefited from this web site.

  12. hair straighteners 03/13/2011 at 5:32 am

    *I’d have to check with you here. Which is not something I usually do! I enjoy reading a post that will make people think. Also, thanks for allowing me to comment!

  13. Susie Bechman 03/13/2011 at 9:20 pm

    Hi there, just became alert to your blog through Google, and found that it is truly informative. I’m going to watch out for brussels. I’ll be grateful if you continue this in future. Lots of people will be benefited from your writing. Cheers!

  14. pool lighting 03/14/2011 at 8:13 pm

    I was very pleased to find this site.I wanted to thank you for this great read I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post.

  15. marketing software 03/21/2011 at 8:39 pm

    Thank you very much Great postthanks for share this..

  16. seo software 03/24/2011 at 3:14 am

    Super-Duper site! I’m loving it!! Will come again once more – taking you feeds additionally, Thanks.

  17. rate online poker systems 03/28/2011 at 6:12 pm

    Nice recommendation and ideas, Thanks so much!

  18. seguro auto online 04/01/2011 at 3:58 am

    Was seeking on a variety of directions on this topic and i must confess your approach could be the one that can make far more sense to me. thanks for sharing

  19. seguro auto 04/01/2011 at 6:17 am

    Magnificent submit and a pleasant information simple to study for certain. please share a lot more of these high quality.

  20. relatorio de credito 04/01/2011 at 9:02 am

    This is for positive a need to examine 🙂 , many thanks for sharing this facts i really recognize and will try out on my own diligences. many thanks a bunch.

  21. debt free calculator 04/03/2011 at 1:03 pm

    Searched the google and discovered your website.!.I need to say i’m very impressed and this info just arrived very handy. I’ll bookmark and join rss feed. realy great publish thanks for sharing

  22. infant car seat covers 04/11/2011 at 8:32 pm

    *There are certainly a lot of details like that to take into consideration. That is a great point to bring up. I offer the thoughts above as general inspiration but clearly there are questions like the one you bring up where the most important thing will be working in honest good faith. I don?t know if best practices have emerged around things like that, but I am sure that your job is clearly identified as a fair game. Both boys and girls feel the impact of just a moment’s pleasure, for the rest of their lives.

  23. Ching Simcox 04/12/2011 at 8:59 pm

    hopefully this comment doesn’t appear multiple times (it seems to freeze once i try to post my comment.. not certain if it’s actually posting), but all I really wanted to say was great post and thanks for sharing.

  24. posicionamiento google 04/17/2011 at 2:14 pm

    Heya i am for the first time here. I found this board and I find It truly useful & it helped me out a lot. I hope to give something back and help others like you aided me.

  25. traductor 04/18/2011 at 5:04 am

    Simply desire to say your article is as amazing. The clarity in your post is just great and i can assume you’re an expert on this subject. Fine with your permission allow me to grab your RSS feed to keep up to date with forthcoming post. Thanks a million and please carry on the enjoyable work.

  26. money online makers 04/20/2011 at 1:33 am

    Heya i’m for the first time here. I found this board and I find It really useful & it helped me out a lot. I hope to give something back and aid others like you aided me.

  27. money online makers 04/20/2011 at 4:01 am

    Great post. I was checking constantly this blog and I’m impressed! Extremely helpful information specifically the last part 🙂 I care for such info much. I was looking for this particular information for a long time. Thank you and good luck.

  28. thin for life diets 05/09/2011 at 10:47 pm

    Please let me know if you’re looking for a article writer for your site. You have some really good articles and I feel I would be a good asset. If you ever want to take some of the load off, I’d love to write some content for your blog in exchange for a link back to mine. Please send me an email if interested. Kudos!

  29. acai weight loss reviews 05/19/2011 at 11:42 pm

    Does your blog have a contact page? I’m having a tough time locating it but, I’d like to shoot you an e-mail. I’ve got some ideas for your blog you might be interested in hearing. Either way, great site and I look forward to seeing it grow over time.

  30. how to unlock iphone for free at&t 05/22/2011 at 7:57 pm

    Great post however , I was wondering if you could write a litte more on this subject? I’d be very grateful if you could elaborate a little bit more. Many thanks!

  31. Zack Thigpin 06/16/2011 at 9:50 pm

    Heya! I’m at work browsing your blog from my new apple iphone! Just wanted to say I love reading your blog and look forward to all your posts! Keep up the great work!

  32. Weight Loss Systems 07/27/2011 at 3:49 am

    I am delighted that I have noticed this blog. Finally something not junk, which I read extremely frequently.

  33. Security Jobs in Clarkia 07/31/2011 at 11:18 am

    I was glad I found your internet site, you created a fan.

  34. powercashadvance.com 10/26/2011 at 5:56 pm

    What would many of us do devoid of the marvellous thoughts you discuss on this web site? Who has got the persistence to deal with crucial topics for the health of common readers like me? I and my buddies are very fortunate to have your web site among the ones we typically visit. We hope you know how very much we enjoy your efforts! Best wishes through us all.

  35. Arron Penzel 09/20/2012 at 10:12 pm

    You are a very capable individual!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: