text:
My indie comic
Hey you! Reader! Want to be a part of the GREATEST COMIC BOOK AND GEEK COMMUNITY on the web?! Well, they're not accepting new members, but we'll take anyone here, so why not sign up for a free acount? It's fast and it's easy, like your mom! Sign up today! Membership spots are limited!*
*Membership spots not really limited!
Hey you! Reader! Want to be a part of the GREATEST COMIC BOOK AND GEEK COMMUNITY on the web?! Well, they're not accepting new members, but we'll take anyone here, so why not sign up for a free acount? It's fast and it's easy, like your mom! Sign up today! Membership spots are limited!*
*Membership spots not really limited!
by GHERU » Thu Mar 01, 2012 9:30 pmI tried to read chapter 1 but the writing really turned me off
I love the art, and the way the book's writing is displayed all over the place reminded me very strongly of Sam Keith (and that is a big complement, IMO)
But, the reader is is presented with such a shocking and hardcore opening sequence that is more of a rant and doesn't really provide any context to what is, obviously, a very different time and world then what we are accustomed too. There are books and writers that can present a different world and new slang with no explanations, and some that cannot, and unfortunately the way issue one starts off is too much with too little guidance.
Example - Decima stands toxed and enraged
at first I thought "toxed" was a typo for "taxed" and by the time I realized that it was short for "intoxicated" I was already taken out of the story by feeling like I had to do too much work to understand what was going on.
again, great art, and I kinda get whats going on, but I think you could benefit from a co-plotter to help you smooth out your ideas.
by GHERU » Thu Mar 01, 2012 9:31 pm
bender doesn't like it when new people come to a comic book forum to try and get interest in thier comic book
by j2040 » Sun Mar 11, 2012 1:15 pmTy for the feedback Gheru, and the Sam Keith complement, >= )
I hope you keep reading despite initial writing turn off, I do get better with it as I go, it being my first comic I've learned LOTS along the way,
If you do keep reading further feedback will be appreciated as well, I've started inking book 2 already so i'm taking everything I've learned and that others have suggested and I'm pouring all that new knowledge into it.
the J.
by j2040 » Thu Mar 15, 2012 2:15 pmChapter 6 is up! Enjoy >=)
Chapter 7 (2nd last chapter) will be up around April 1rst. Char profiles soon.
I have started book 2, 4 1/2 pages are inked. Plz help me make Purg by donating (paypal on my main page) any amount helps and is greatly appreciated.
I may be looking into putting Book 1 to print, details later on fundraising and how to get a signed copy.
Contact me for ad space in purg book 2 firstname.lastname@example.com (show your company/band/personal logo on a building vid board<s> or on clothing in my comic, up to full page ads illustrated by me in the theme/style of Purg)
http://twitter.com/#!/Purgcomic <-follow me
http://www.facebook.com/pages/purgcomic ... 5308659418 <-like me
http://j2040.deviantart.com/ <-watch me
by chusan » Thu Mar 15, 2012 7:25 pmit looks pretty cool. i think this will be good
by j2040 » Sun Apr 01, 2012 2:25 pmLast chapter is up! >= ) Enjoy the finally finished book 1
I have started inking book 2 and am 1 page from chapter 1 being inked. I'll let everyone know when chapter 1 and cover art will be view-able. I am planning on putting book 1 to print, any donations to make this happen and to help me make book 2 are very much appreciated.
Contact me for advertising space in book 2, have your logo/webpage/etc on video boards or clothing or more within the comic.
http://twitter.com/#!/Purgcomic follow me
http://www.facebook.com/pages/purgcomic ... 5308659418 like me
http://j2040.deviantart.com/ watch me
email@example.com contact me
by SpiderGeek » Fri Apr 20, 2012 8:06 amHey, I'm already a fan Congrats for your amazing work!
by j2040 » Wed May 02, 2012 1:37 pmChapter 1 of Book 2 is up! enjoy >=)
.cbr of book 1 is up for download on the webpage fyi
plz donate to help me finish this book and to print book 1!
TYVM Spidergeek >=)
by Doc Jon » Wed May 02, 2012 1:40 pmAny plans to just publish digitally or are you trying to actually print these books?
by shannonh » Wed May 02, 2012 6:57 pmNice panel variations. You're insane for doing everything...Or maybe you're doing everything because your insane?
by J.M. Hunter » Wed May 02, 2012 7:29 pm
No kickstarter?
by J.M. Hunter » Wed May 02, 2012 7:38 pmJust glancing through it, the art is really well done. You've got gifts man. But...the lettering seems to get in the way and is a bit inconsistent. In some areas the captions and balloons are too big and too crowded. In other areas there are too many fonts and type faces so they end up hurting what is otherwise well drawn artwork. Why shoot yourself in the foot?
Still I think you're onto something and this is a very noble effort. I liked the facebook page so I can keep up with your updates. Keep goin' son!
by The Method » Thu May 03, 2012 6:45 pmMan, a lot of props to you for getting out a online comic. You are just one guy, right? Cuz its cool if you are a bunch of clones.
Brother, the art is good and I like the colors. The storytelling is well paced and concise.
My only crit is the lettering. You need to settle on a couple of fonts and don't let the SFX take over the page. I bookmarked your site.
by j2040 » Fri May 04, 2012 11:38 pmHi all, and TY as always for the appreciation and advice!
Doc Jon- I am going to print book 1 and 2 and 3 etc..., I just don't have the money atm, got myself on indiegogo, so hopefully that'll help me out.
Shannonh- Yes i'm a little insane >=) i think all artist are
J.M.- can't get kickstarter as a canadian (need a u.s. address) but i've just recently tried indiegogo (hopefully that works out for me). TYVM for your advice on my fonts, you are right, book 1 was a big learning experience, the text will be less invasive and better planned in book 2.
Method- (epic name btw) I wish I was a bunch of clones... we'd have so much fun together! Glad you like it >=), as for the lettering, book 2 will be better as i told J.M. above, as for number of fonts, that will depend. I use fonts to show 'accents' that are different from the local speech (ie- Boils has a Rot-district U.K. English accent), however i'm going to capitalize them all now and clean them up. >=)
Again Ty all for the appreciation and advice, keep it coming >=)
by j2040 » Fri May 04, 2012 11:51 pmMethod- checked your link and want to read your comic, do you have it viewable in a sequential format (sorry if i'm derp if you do i missed it), a url or .cbr?
lemme know
leave a comment with facebook
Who is online
Users browsing this forum: FaceBook [Linkcheck] and 3 guests


text:
MACON, Ga. – Sophomore Dani Walker, of the Lipscomb women's cross country team, was named this week's Atlantic Sun Female Cross Country Runner of the Week.
Walker placed second at the Chattanooga Powerade Invite following her 11:13s run of the two-mile course. Lipscomb was the overall team victor, placing seven runners in the top-10. It was her second consecutive top-five finish for Lipscomb.
The award was Walker's first-ever A-Sun Runner of the Week honor, and the first for Lipscomb since Alex Newby for the week of Sept. 15, 2010.
Though this is her first weekly conference award, Walker received much hardware at last season's A-Sun Cross Country Championships, winning the female Freshman of the Year Award as well as being named to both the All-Freshman team and the all-conference squad.
Walker's feat was made all the more amazing by the fact that she ran the last 800 meters of the race with a broken foot, which will keep her out for the remainder of cross country season.
Lipscomb will run at the Vanderbilt Invitational, Saturday, at the Vaughn's Gap course of Percy Warner Park. The women's race is scheduled to begin at 9:30 a.m., following the men's race at 8:45 a.m.

subset: commoncrawl


text:
In the so-called Digital Age, one thing that is plentiful - and growing exponentially - data. What is scarce, and therefore potentially valuable, is information. And, even more than that, knowledge. And most rare: wisdom.
I'd been thinking a bit about the link between what is often called the "DIKW Hierarch" or the "Wisdom Pyramid" since the last Digital Editors' Network meeting when Microsoft UK producer Alistair Bruce described how data was being used to tell stories on sites like MSN Local. He likened it to the layers of an onion.
So, I've drafted this "Onion Model" as a way to start describing where data links to journalism. And am thinking that perhaps it might even be useful to the discussions about where (or not) to put up "paywalls".
Alistair and I'll are thinking more about it and will be including some of those ideas in a chapter in the (much-delayed) 4th edition of Writing for the Media, which Oxford is hoping to publish later this year.
In the meantime, I've been bouncing around those ideas with colleagues like Andy Dickinson, who said he'd be blogging about his take on it sometime soon, too. And I'll probably weave it into the discussion at the #DEN2010 meeting on "Benchmarking Your Website". And, of course, I look forward to seeing just how data literacy, retrieval and repurposing is woven into the National Occupational Standards for journalism.


text:
Our Babe of the Day Brooke Weisbender Likes to Put Things Between Her Legs and Ride
Brooke Weisbender loves to ride, but calm down dudes, we're referring to horses and machines with motors.
Brooke was born in rural Wyoming and began riding and training horses at a young age. This love of riding led her to try other adventure sports including skateboarding, snowboarding and rock climbing.
Brooke loves building her show cars, racing motorcycles, and launched an online retail business for motorsports gear called Revv Wear in 2005.
Check out more of Brooke on her website.


text:
messagecache: Message Cache Manager
The class in Example 15-5 implements a cache for already loaded messages. Its logic is split off into this file in order to avoid complicating list window implementations. The server list window creates and embeds an instance of this class to interface with the mail server, and to keep track of already loaded mail headers and full text.
Example 15-5. PP3EInternetEmailPyMailGuimessagecache.py
################################################################ # manage message and header loads and context, but not GUI
# a MailFetcher, with a list of already loaded headers and messages
# the caller must handle any required threading or GUI interfaces ###############################################################
from PP3E.Internet.Email import mailtools from popuputil import askPasswordWindow
class MessageInfo:
an item in the mail cache list
def __init__(self, hdrtext, size):
self.hdrtext = hdrtext # fulltext is cached msg
self.fullsize = size # hdrtext is just the hdrs
self.fulltext = None # fulltext=hdrtext if no TOP
class MessageCache(mailtools.MailFetcher):
keep track of already loaded headers and messages
inherits server transfer methods from MailFetcher
useful in other apps: no GUI or thread assumptions
def __init__(self):
self.msglist = []
def loadHeaders(self, forceReloads, progress=None):
three cases to handle here: the initial full load,
load newly arrived, and forced reload after delete;
don't refetch viewed msgs if hdrs list same or extended;
retains cached msgs after a delete unless delete fails;
2.1: does quick check to see if msgnums still in sync
if forceReloads:
loadfrom = 1
self.msglist = [] # msg nums have changed
loadfrom =
len(self.msglist)+1 # continue from last load
# only if loading newly arrived
if loadfrom != 1:
self.checkSynchError(self.allHdrs()) # raises except if bad
# get all or newly arrived msgs
reply = self.downloadAllHeaders(progress, loadfrom)
headersList, msgSizes, loadedFull = reply
for (hdrs, size) in zip(headersList, msgSizes):
newmsg = MessageInfo(hdrs, size)
if loadedFull: # zip result may be empty
newmsg.fulltext =
hdrs # got full msg if no 'top'
def getMessage
(self, msgnum): # get raw msg text
if not self.msglist[msgnum-1].fulltext: # add to cache if fetched
fulltext = self.downloadMessage(msgnum) # harmless if threaded
self.msglist[msgnum-1].fulltext = fulltext
return self.msglist[msgnum-1].fulltext
def getMessages(self, msgnums, progress=None):
prefetch full raw text of multiple messages, in thread;
2.1: does quick check to see if msgnums still in sync;
we can't get here unless the index list already loaded;
(self.allHdrs()) # raises except if bad
nummsgs = len
msgnums) # adds messages to cache
for (ix, msgnum)
in enumerate(msgnums): # some poss already there
if progress:
progress(ix+1, nummsgs) # only connects if needed
(msgnum) # but may connect > once
def getSize
(self, msgnum): # encapsulate cache struct
return self.msglist
[msgnum-1].fullsize # it changed once already!
def isLoaded(self, msgnum):
return self.msglist[msgnum-1].fulltext
def allHdrs(self):
return [msg.hdrtext for msg in self.msglist]
def deleteMessages(self, msgnums, progress=None):
if delete of all msgnums works, remove deleted entries
from mail cache, but don't reload either the headers list
or already viewed mails text: cache list will reflect the
changed msg nums on server; if delete fails for any reason,
caller should forceably reload all hdrs next, because _some_
server msg nums may have changed, in unpredictable ways;
2.1: this now checks msg hdrs to detect out of synch msg
numbers, if TOP supported by mail server; runs in thread
self.deleteMessagesSafely(msgnums, self.allHdrs(), progress)
except mailtools.TopNotSupported:
mailtools.MailFetcher.deleteMessages(self, msgnums, progress)
# no errors: update index list
indexed = enumerate(self.msglist)
self.msglist = [msg for (ix, msg) in indexed if ix+1 not in msgnums]
class GuiMessageCache(MessageCache):
add any GUI-specific calls here so cache usable in non-GUI apps
def setPopPassword(self, appname):
get password from GUI here, in main thread
forceably called from GUI to avoid pop ups in threads
if not self.popPassword:
prompt = 'Password for %s on %s?' % (self.popUser, self.popServer)
self.popPassword = askPasswordWindow(appname, prompt)
def askPopPassword(self):
but don't use GUI pop up here: I am run in a thread!
when tried pop up in thread, caused GUI to hang;
may be called by MailFetcher superclass, but only
if passwd is still empty string due to dialog close
return self.popPassword
{mospagebreak title=popuputil: General-Purpose GUI Pop Ups}
Example 15-6 implements a handful of utility pop-up windows in a module, in case they ever prove useful in other programs. Note that the same windows utility module is imported here, to give a common look-and-feel to the popups (icons, titles, and so on).
Example 15-6. PP3EInternetEmailPyMailGuipopuputil.py
################################################################ # utility windows – may be useful in other programs ###############################################################
from Tkinter import *
from PP3E.Gui.Tools.windows import PopupWindow
class HelpPopup(PopupWindow):
custom Toplevel that shows help text as scrolled text
source button runs a passed-in callback handler
alternative: use HTML file and webbrowser module
myfont = 'system' # customizable
def __init__(self, appname, helptext, iconfile=None, showsource=lambda:0) :
PopupWindow.__init__(self, appname, 'Help', iconfile)
from ScrolledText import ScrolledText # a nonmodal dialog
bar = Frame(self) # pack first=clip last
bar.pack(side=BOTTOM, fill=X)
code = Button(bar, bg='beige', text="Source", command=showsource)
quit = Button(bar, bg='beige', text="Cancel", command=self.destroy)
code.pack(pady=1, side=LEFT)
quit.pack(pady=1, side=LEFT)
text = ScrolledText(self) # add
Text + scrollbar
text.config(font=self.myfont, width=70) # too big for showinfo
text.config(bg='steelblue', fg='white') # erase on btn or return
text.insert('0.0', helptext)
text.pack(expand=YES, fill=BOTH)
self.bind("<Return>", (lambda event: self.destroy()))
def askPasswordWindow(appname, prompt):
modal dialog to input password string
getpass.getpass uses stdin, not GUI
tkSimpleDialog.askstring echos input
win = PopupWindow(appname,
'Prompt') # a configured Toplevel
Label(win, text=prompt).pack(side=LEFT)
entvar = StringVar(win)
ent = Entry(win, textvariable=entvar, show='*') # display * for input
ent.pack(side=RIGHT, expand=YES, fill=X)
ent.bind('<Return>', lambda event: win.destroy())
ent.focus_set(); win.grab_set(); win.wait_window()
win.update() # update forces redraw
return entvar.get() # ent widget is now gone
class BusyBoxWait(PopupWindow):
pop up blocking wait message box: thread waits
main GUI event thread stays alive during wait
but GUI is inoperable during this wait state;
uses quit redef here because lower, not leftmost;
def __init__(self, appname, message):
PopupWindow.__init__(self, appname, 'Busy')
self.protocol('WM_DELETE_WINDOW', lambda:0) # ignore deletes
label = Label(self,
text=message + '…') # win.quit() to erase
label.config(height=10, width=40, cursor='watch') # busy cursor
self.message, self.label = message, label
def makeModal(self):
self.focus_set() # grab application
self.grab_set() # wait for threadexit
def changeText(self, newtext):
self.label.config(text=self.message + ': ' + newtext)
def quit(self):
self.destroy() # don't verify quit
class BusyBoxNowait(BusyBoxWait):
pop up nonblocking wait window
call changeText to show progress, quit to close
def makeModal(self):
if __name__ == '__main__':
HelpPopup('spam', 'See figure 1…n')
print askPasswordWindow('spam', 'enter password')
raw_input('Enter to exit')
{mospagebreak title=wraplines: Line Split Tools}
The module in Example 15-7 implements general tools for wrapping long lines, at either a fixed column or the first delimiter at or before a fixed column. PyMailGUI uses this file's wrapText1 function for text in view, reply, and forward windows, but this code is potentially useful in other programs. Run the file as a script to watch its self-test code at work, and study its functions to see its text-processing logic.
Example 15-7. PP3EInternetEmailPyMailGuiwraplines.py
################################################################ # split lines on fixed columns or at delimiters before a column
# see also: related but different textwrap standard library module (2.3+) ###############################################################
defaultsize = 80
def wrapLinesSimple(lineslist, size=defaultsize):
"split at fixed position size"
wraplines = []
for line in lineslist:
while True:
wraplines.append(line[:size]) # OK if len < size
line = line[size:] # split without analysis
if not line: break
return wraplines
def wrapLinesSmart(lineslist, size=defaultsize, delimiters='.,:t '):
"wrap at first delimiter left of size"
wraplines = []
for line in lineslist:
while True:
if len(line) <= size:
wraplines += [line]
for look in range(size-1, size/2, -1):
if line[look] in delimiters:
front, line = line[:look+1], line[look+1:]
front, line = line[:size], line[size:]
wraplines += [front]
return wraplines
################################################################ # common use case utilities ###############################################################
def wrapText1(text,
size=defaultsize): # better for line-based txt: mail
"when text read all at once" # keeps original line brks struct
lines = text.split('n') # split on newlines
|lines = wrapLinesSmart(lines, size)
|# wrap lines on delimiters
|return 'n'.join(lines)
|# put back together
|def wrapText2(text, size=defaultsize):
|# more uniform across lines
|"same, but treat as one long line"
|# but loses original line struct
|text = text.replace('n', ' ')
|# drop newlines if any
|lines = wrapLinesSmart([text], size)
|# wrap single line on delimiters
|return lines
|# caller puts back together
|def wrapText3(text, size=defaultsize):
|"same, but put back together"
|lines = wrapText2(text, size)
|# wrap as single long line
|return 'n'.join(lines) + 'n'
|# make one string with newlines
|def wrapLines1(lines, size=defaultsize):
|"when newline included at end"
|lines = [line[:-1] for line in lines]
|# strip off newlines (or .rstrip)
|lines = wrapLinesSmart(lines, size)
|# wrap on delimiters
|return [(line + 'n') for line in lines]
|# put them back
|def wrapLines2(lines, size=defaultsize):
|# more uniform across lines
|"same, but concat as one long line"
|# but loses original structure
|text = ".join(lines)
|# put together as 1 line
|lines = wrapText2(text)
|# wrap on delimiters
|return [(line + 'n') for line in lines]
|# put newlines on ends
################################################################ a self-test ###############################################################
if __name__ == '__main__':
lines = ['spam ham ' * 20 + 'spam,ni' * 20,
'spam ham ' * 20,
'spam,ni' * 20,
'spam ham.ni' * 20,
' ',
'spam ham eggs']
print 'all', '-'*30
for line in lines: print repr(line)
print 'simple', '-'*30
for line in wrapLinesSimple(lines): print repr(line)
print 'smart', '-'*30
for line in wrapLinesSmart(lines): print repr(line)
print 'single1', '-'*30
for line in wrapLinesSimple([lines[0]], 60): print repr(line)
print 'single2', '-'*30
for line in wrapLinesSmart([lines[0]], 60): print repr(line)
print 'combined text', '-'*30
for line in wrapLines2(lines): print repr(line)
print 'combined lines', '-'*30
print wrapText1('n'.join(lines))
assert ".join(lines) == ".join(wrapLinesSimple(lines, 60))
assert ".join(lines) == ".join(wrapLinesSmart(lines, 60))
print len(".join(lines)),
print len(".join(wrapLinesSimple(lines))),
print len(".join(wrapLinesSmart(lines))),
print len(".join(wrapLinesSmart(lines, 60))),
raw_input('Press enter')
{mospagebreak title=mailconfig: User Configurations}
In Example 15-8, PyMailGUI's mailconfig user settings module is listed. This program has its own version of this module because many of its settings are unique for PyMailGUI. To use the program for reading your own email, set its initial variables to reflect your POP and SMTP server names and login parameters. The variables in this module also allow the user to tailor the appearance and operation of the program without finding and editing actual program logic.
Example 15-8. PP3EInternetEmailPyMailGuimailconfig.py
################################################################ # PyMailGUI user configuration settings.
# Email scripts get their server names and other email config options from
# this module: change me to reflect your machine names, sig, and preferences.
# Warning: PyMailGUI won't run without most variables here: make a backup copy!
# Notes: could get some settings from the command line too, and a configure
# dialog would be better, but this common module file suffices for now. #################################################################
#——————————————- # (required for load, delete) POP3 email server machine, user
# popservername = '?Please set your mailconfig.py attributes?'
|= 'pop.rmi.net'
|# or starship.python.net, 'localhost'
|= 'lutz'
|# password fetched or asked when run
|= 'pop.mindspring.com'
|# yes, I have a few email accounts
|= 'lutz4'
|= 'pop.yahoo.com'
|= 'for_personal_mail'
|= 'pop.earthlink.net'
|# firstname.lastname@example.com
|= 'pp3e'
# (required for send) SMTP email server machine name
# see Python smtpd module for a SMTP server class to run locally;
# note: your ISP may require that you be directly connected to their system:
# I can email through Earthlink on dial up, but cannot via Comcast cable
smtpservername = 'smtp.comcast.net' # or 'smtp.mindspring.com', 'localhost'
# (may be required for send) SMTP user/password if authenticated
# set user to None or " if no login/authentication is required
# set pswd to name of a file holding your SMTP password, or an
# empty string to force programs to ask (in a console, or GUI)
smtpuser = None # per your ISP smtppasswdfile = " # set to " to be asked
# (optional) PyMailGUI: name of local one-line text file with your POP
# password; if empty or file cannot be read, pswd is requested when first
# connecting; pswd not encrypted: leave this empty on shared machines;
# PyMailCGI always asks for pswd (runs on a possibly remote server);
poppasswdfile =
r'c:temppymailgui.txt' # set to " to be asked
# (optional) personal information used by PyMailGUI to fill in edit forms;
# if not set, does not fill in initial form values;
# sig — can be a triple-quoted block, ignored if empty string;
# addr — used for initial value of "From" field if not empty,
# no longer tries to guess From for replies–varying success;
myaddress = 'email@example.com' #
mysignature = '–Mark Lutz (http://www.rmi.net/~lutz)'
# (optional) local file where sent messages are saved;
# PyMailGUI 'Open' button allows this file to be opened and viewed
# don't use '.' form if may be run from another dir: e.g., pp3e demos
#sentmailfile =
r'.sentmail.txt' # . means in current working dir
#sourcedir = r'C:MarkPP3E-cdExamplesPP3EInternetEmailPyMailGui' #sentmailfile = sourcedir + 'sentmail.txt'
# determine auto from one of my source files import wraplines, os
mysourcedir = os.path.dirname(os.path.abspath(wraplines.__file__))
sentmailfile = os.path.join(mysourcedir, 'sentmail.txt')
# (optional) local file where pymail saves POP mail;
# PyMailGUI instead asks for a name with a pop-up dialog
savemailfile =
r'c:tempsavemail.txt' # not used in PyMailGUI: dialog
# (optional) customize headers displayed in PyMailGUI list and view windows;
# listheaders replaces default, viewheaders extends it; both must be tuple of
# strings, or None to use default hdrs;
listheaders = ('Subject', 'From', 'Date', 'To', 'X-Mailer')
viewheaders = ('Bcc',)
# (optional) PyMailGUI fonts and colors for text server/file message list
# windows, message content view windows, and view window attachment buttons;
# use ('family', size, 'style') for font; 'colorname' or hexstr '#RRGGBB' for
# color (background, foreground); None means use defaults; font/color of
# view windows can also be set interactively with texteditor's Tools menu;
listbg = 'indianred' # None, 'white', '#RRGGBB' (see setcolor example)
|= 'black'
|listfont = ('courier', 9, 'bold')
|# None, ('courier', 12, 'bold italic')
|# use fixed-width font for list columns
|= '#dbbedc'
|= 'black'
|= ('courier', 10, 'bold')
|viewheight = 24
|# max lines for height when opened
|= None
|= None
# see Tk color names: aquamarine paleturqoise powderblue goldenrod burgundy ….
#listbg = listfg = listfont = None
#viewbg = viewfg = viewfont = viewheight = None # to use defaults
#partbg = partfg = None
# (optional) column at which mail's original text should be wrapped for view,
# reply, and forward; wraps at first delimiter to left of this position;
# composed text is not auto-wrapped: user or recipient's mail tool must wrap
# new text if desired; to disable wrapping, set this to a high value (1024?);
wrapsz = 100
# (optional) control how PyMailGUI opens mail parts in the GUI;
# for view window Split actions and attachment quick-access buttons;
# if not okayToOpenParts, quick-access part buttons will not appear in
# the GUI, and Split saves parts in a directory but does not open them;
# verifyPartOpens used by both Split action and quick-access buttons:
# all known-type parts open automatically on Split if this set to False;
# verifyHTMLTextOpen used by web browser open of HTML main text part:
|= True
|# open any parts/attachments at all?
|= False
|# ask permission before opening each part?
|verifyHTMLTextOpen = False
|# if main text part is HTML, ask before open?
# (optional) the maximum number of quick-access mail part buttons to show
# in the middle of view windows; after this many, a "…" button will be
# displayed, which runs the "Split" action to extract additional parts;
maxPartButtons = 8 # how many part buttons in view windows
{mospagebreak title=PyMailGuiHelp: User Help Text}
Finally, Example 15-9 lists the module that defines the text displayed in PyMailGUI's help popup as one triple-quoted string. Read this here or live within the program to learn more about how PyMailGUI's interface operates (click the help bar at the top of the server list window to open the help display). It is included because it explains some properties of PyMailGUI not introduced by the demo earlier in this chapter.
This text may be more usefully formatted as HTML with section links and popped up in a web browser, but we take a lowest-common–denominator approach here to minimize external dependencies—we don't want help to fail if no browser can be located, and we don't want to maintain both text and HTML versions. Other schemes are possible (e.g., converting HTML to text as a fallback by parsing), but they are left as suggested improvements.
Example 15-9.
################################################################ # PyMailGUI help text string, in this separate module only to avoid
# distracting from executable code. As coded, we throw up this text
# in a simple scrollable text box; in the future, we might instead
# use an HTML file opened with a browser (use webbrowser module, or
# run a "netscape help.html" or DOS "start help.html" with os.system);
# that would add an external dependency, unless text on browser fail; ################################################################ # used to have to be narrow for Linux info box pop ups;
# now uses scrolledtext with buttons instead;
helptext = """PyMailGUI, version 2.1 January, 2006
Programming Python, 3rd Edition
O'Reilly Media, Inc.
PyMailGUI is a multiwindow interface for processing email, both online and offline. Its main interfaces include one list window for the mail server, zero or more list windows for mail save files, and multiple view windows for composing or viewing emails selected in a list window. On startup, the main (server) list window appears first, but no mail server connection is attempted
until a Load or message send request. All PyMailGUI windows may be resized, which is especially useful in list windows to see additional columns.
Major enhancements in this version:
- * MIME multipart mails with attachments may
be both viewed and composed.
- * Mail transfers are no longer blocking, and
may overlap in time.
- * Mail may be saved and processed offline
from a local file.
- * Message parts may now be opened
automatically within the GUI.
- * Multiple messages may be selected for
processing in list windows.
- * Initial downloads fetch mail headers only;
full mails are fetched on request.
- * View window headers and list window
columns are configurable.
- * Deletions are performed immediately, not
delayed until program exit.
- * Most server transfers report their
progress in the GUI.
- * Long lines are intelligently wrapped in
viewed and quoted text.
- * Fonts and colors in list and view windows
may be configured by the user.
- * Authenticating SMTP mail-send servers that
require login are supported.
- * Sent messages are saved in a local file,
which may be opened in the GUI.
- * View windows intelligently pick a main
text part to be displayed.
- * Already fetched mail headers and full
mails are cached for speed.
- * Date strings and addresses in composed
mails are formatted properly.
- * (2.1) View windows now have quick-access
buttons for attachments/parts.
- * (2.1) Inbox out-of-synch errors detected
on deletes, and index and mail loads.
- * (2.1) Save-file loads and deletes
threaded, to avoid pauses for large files.
Note: To use PyMailGUI to read and write email of your own, you must change the POP and SMTP server names and login details in the file mailconfig.py, located in PyMailGUI's source-code directory. See section 10 for details.
10) THE mailconfig CONFIGURATION MODULE
Click list window buttons to process email:
– Load:t fetch all (or new) mail headers
from POP server inbox
– View:t display selected emails nicely
– Delete:t delete selected emails from
server or save file
– Write:t compose a new email message, send
by SMTP
– Reply:t compose replies to selected
emails, send by SMTP
– Fwd:t compose forwards of selected
emails, send by SMTP
– Save:t write all selected emails to a
chosen save file
– Open:t load emails from an offline save
file into new list window
– Quit:t exit program (server list), close
window (file list)
Double-click on an email in a list window's listbox to view the mail's raw text, including any mail headers not shown by the View button. List windows opened for mail save files support all of the above except Load. After the initial Load, Load only fetches newly arrived message headers. To forceably reload all mails from the server, restart PyMailGUI. There is reload button, because full reloads are only required on rare deletion and inbox synchronization errors (described ahead), and reloads are initiated automatically in these cases.
Click on emails in the main window's listbox to select them. Click the "All" checkbox to select all or no emails at once. More than one email may be selected at the same time: View, Delete, Reply, Fwd, and Save buttons are applied to all currently selected emails, in both server and save-file list windows. Use Ctrl+click to select multiple mails, Shift+click to select all
from prior selecion, or click+move to drag the selection out.
In 2.1, most of the actions in the server List window automatically run a quick-check to detect inbox out-of-synch errors with the server. If a synch error pop up appears, a full index reload will be automatically run; there is no need to stop and restart PyMailGUI (see ahead in this help).
Action buttons in message view windows (View):
– Cancel:t closes the message view window
– Parts:t lists all message parts,
including attachments
– Split:t extracts, saves, and possibly
opens message parts
Actions in message compose windows (Write, Reply, Fwd):
– Cancel:t closes the message window,
discarding its content
– Parts:t lists files already attached to
mail being edited
– Attach:t adds a file as an attachment to
a mail being edited
– Send:t sends the message to all its
Parts and Split buttons appear in all View windows; for simple messages, the sole part is the message body. Message reply, forward, and delete requests are made in the list windows, not message view windows. Deletions do not erase open view windows.
New in 2.1: View windows also have up to a fixed maximum number of quick access buttons for attached message parts. They are alternatives to Split. After the maximum number, a '…' button is added, which simply runs Split. The maximum number of part buttons to display per view window can be set in the mailconfig.py user settings module (described ahead).
To process email offline: Load from the server, Save to a local file, and later select Open to open a save file's list window in either the server List window or another save file's List window. Open creates a new List window for the file, or raises its window if the file is already open.
A save file's list window allows all main window actions listed above, except for Load. For example, saved messages can be viewed, deleted, replied to, or forwarded, from the file's list window. Operations are mapped to the local mail save file, instead of the server's inbox. Saved messages may also be
saved: to move mails from one save file to another, Save and then Delete from the source file's window.
You do not need to connect to a server to process save files offline: click the Open button in the main list window. In a save-file list window, a Quit erases that window only; a Delete removes the message from the local save file, not from a server. Save-file list windows are automatically updated when new
mails are saved to the corresponding file anywhere in the GUI. The sent-mail file may also be opened and processed as a normal save-mail file, with Open.
Save buttons in list windows save the full message text (including its headers, and a message separator). To save just the main text part of a message, either use the Save button in the TextEditor at the bottom of a view or edit window, or select the "Split" action button. To save attachments, see the next section.
New in 2.1: local save-file Open and Delete requests are threaded to avoid blocking the GUI during loads and deletes of large files. Because of this, a loaded file's index may not appear in its List window immediately. Similarly, when new mails are saved or messages are sent, there may be a delay before the corresponding local file's List window is updated, if it is currently open.
As a status indication, the window's title changes to "Loading…" on loads and "Deleting…" during deletes, and is reset to the file's name after the thread exits (the server window uses pop ups for status indication, because the delay
is longer, and there is progress to display). Eventually, either the index will appear and its window raised, or an error message will pop up. Save-file loads and deletes are not allowed to overlap with each other for a given file, but may overlap with server transfers and operations on other open files.
Note: save-file Save operations are still not threaded, and may pause the GUI momentarily when saving very many large mails. This is normaly not noticeable, because unlike Open and Delete, saves simply append to the save-file, and do not reload its content. To avoid pauses completely, though, don't save very many large mails in a single operation.
Also note: the current implementation loads the entire save-mail file into memory when opened. Because of this, save-mail files are limited in size, depending upon your computer. To avoid consuming too much memory, you should try to keep your save files relatively small (at the least, smaller than your computer's available memory). As a rule of thumb, organize your saved mails by categories into many small files, instead of a few large files.
PyMailGUI's view windows use a text-oriented display. When a mail is viewed, its main text is displayed in the View window. This text is taken from the entire body of a simple message, or the first text part of a multipart MIME message. To extract the main message text, PyMailGUI looks for plain text, then HTML, and then text of any other kind. If no such text content is found, nothing is displayed in the view window, but parts may be opened manually with the "Split" button (and quick-access part buttons in 2.1, described below).
If the body of a simple message is HTML type, or a HTML part is used as the main message text, a web browser is popped up as an alternative display for the main message text, if verified by the user (the mailconfig module can be used to bypass the verification; see ahead). This is equivalent to opening
the HTML part with the "Split" button, but is initiated automatically for the main message text's HTML. If a simple message is something other than text or HTML, its content must be openened manually with Split.
When viewing mails, messages with multipart attachments are prefixed with a "*" in list windows. "Parts" and "Split" buttons appear in all View windows. Message parts are defined as follows:
- – For simple messages, the message body is
considered to be the sole
part of the message.
- – For multipart messages, the message parts
list includes the main message text, as
well as all attachments.
In both cases, message parts may be saved and opened with the "Split" button.
For simple messages, the message body may be saved with Split, as well as the Save button in the view window's text editor. To process multipart messages:
- – Use "Parts" to display the names of all
message parts, including any
attachments, in a pop-up dialog.
- – Use "Split" to view message parts: all
mail parts are first saved to a
selected directory, and any well-known
and generally safe part files are
opened automatically, but only if verified
by the user.
– See also the note below about 2.1 quick
access buttons, for an alternative
to the Parts/Split interface on View
For "Split", select a local directory to save parts to. After the save, text parts open in the TextEditor GUI, HTML and multimedia types open in a web browser, and common Windows document types (e.g., .doc and .xls files) open via the Windows registry entry for the filename extension. For safety, unknown types and executable program parts are never run automatically; even Python
programs are displayed as source text only (save the code to run manually).
Web browsers on some platforms may open multimedia types (image, audio, video) in specific content handler programs (e.g., MediaPlayer, image viewers). No other types of attachments are ever opened, and attachments are never opened without user verification (or mailconfig.py authorization in 2.1, described
below). Browse the parts save directory to open other parts manually.
To avoid scrolling for very long lines (sometimes sent by HTML-based mailers), the main text part of a message is automatically wrapped for easy viewing. Long lines are split up at the first delimiter found before a fixed column, when viewed, replied, or forwarded. The wrapping column may be configured or disabled in the mailconfig module (see ahead). Text lines are never
automatically wrapped when sent; users or recipients should manage line length in composed mails.
New in 2.1: View windows also have up to a fixed maximum number of quick-access buttons for attached message parts. They are alternatives to Split: selecting an attachment's button automatically extracts, saves, and opens that single attachment directly, without Split directory and pop-up dialogs (a temporary
directory is used). The maximum number of part buttons to display per view window can be set in the mailconfig.py user settings module (described ahead). For mails with more than the maximum number of attachments, a '…' button is added which simply runs Split to save and open any additional attachments.
Also in 2.1, two settings in the mailconfig.py module (see section 10) can be used to control how PyMailGUI opens parts in the GUI:
– okayToOpenParts: controls whether part opens are allowed at all
– verifyPartOpens: controls whether to ask before each part is opened.
Both are used for View window Split actions and part quick-access buttons. If okayToOpenParts is False, quick-access part buttons will not appear in the GUI, and Split saves parts in a directory but does not open them. verifyPartOpens is used by both Split and quick-access part buttons: if False, part buttons open parts immediately, and Split opens all known-type parts automatically
after they are saved (unknown types and executables are never opened).
An additional setting in this module, verifyHTMLTextOpen, controls verification of opening a web browser on a HTML main text part of a message; if False, the web browser is opened without prompts. This is a separate setting from verifyPartOpens, because this is more automatic than part opens, and some HTML main text parts may have dubious content (e.g., images, ads).
When composing new mails, the view window's "Attach" button adds selected files as attachments, to be sent with the email's main text when the View window's "Send" is clicked. Attachment files may be of any type; they are selected in a pop-up dialog, but are not loaded until Send. The view window's "Parts" button displays attachments already added.
The main text of the message (in the view window editor) is sent as a simple message if there are no attachments, or as the first part of a multipart MIME message if there are. In both cases, the main message text is always sent as plain text. HTML files may be attached to the message, but there is no support for text-or-HTML multipart alternative format for the main text, nor for sending the main text as HTML only. Not all clients can handle HTML, and
PyMailGUI's text-based view windows have no HTML editing tools.
Multipart nesting is never applied: composed mails are always either a simple body, or a linear list of parts containing the main message text and attachment files.
For mail replies and forwards, headers are given intial values, the main message text (described in the prior section) is wrapped and quoted with '>' prefixes, and any attachments in the original message are stripped. Only new attachments added are sent with the message.
To send to multiple addresses, separate each recipient's address in To and Cc fields with semicolons. For instance:
email@example.com; |"Smith, Bob" <email@example.com>; email@example.com
Note that because these fields are split on semicolons without full parsing, a recipient's address should not embed a ';'. For replies, this is handled automatically: the To field is prefilled with the original message's From, using either the original name and address, or just the address if the name contains a ';' (a rare case). Cc and Bcc headers fields are ignored if they contain just the initial "?" when sent.
Successfully sent messages are saved in a local file whose name you list in the mailconfig.py module. Sent mails are saved if the variable "sentmailfile" is set to a valid filename; set to an empty string to disable saves. This file may be opened using the Open button of the GUI's list windows, and its content may be viewed, processed, deleted, saved, and so on within the GUI, just like a manually saved mail file. Also like manually saved mail files, the sent-file list window is automatically updated whenever a new message is sent, if it is open (there is no need to close and reopen to see new sends). If this file grows too large to open, you can delete its content with Delete, after possibly saving sent mails you wish to keep to another file with Save.
Note that some ISPs may require that you be connected to their systems in order to use their SMTP servers (sending through your dial-up ISP's server while connected to a broadband provider may not work–try the SMTP server at your broadband provider instead), and some SMTP servers may require authentication
(set the "smtpuser" variable in the mailconfig.py module to force authentication logins on sends). See also the Python library module smptd for SMTP server tools; in principle, you could run your own SMTP server locally on 'localhost'.
PyMailGUI runs mail server transfers (loads, sends, and deletes) in threads, to avoid blocking the GUI. Transfers never block the GUI's windows, and windows do not generally block other windows. Users can view, create, and process mails while server transfers are in progress. The transfers run in the background, while the GUI remains active.
PyMailGUI also allows mail transfer threads to overlap in time. In particular, new emails may be written and sent while a load or send is in progress, and mail loads may overlap with sends and other mail loads already in progress. For example, while waiting for a download of mail headers or a large message, you can open a new Write window, compose a message, and send it; the send will
overlap with the load currently in progress. You may also load another mail, while the load of a large mail is in progress.
While mail transfers are in progress, pop-up windows display their current progress as a message counter. When sending a message, the original edit View window is popped back up automatically on Send failures, to save or retry. Because delete operations may change POP message numbers on the server, this operation disables other deletions and loads while in progress.
Offline mail save-file loads and deletes are also threaded: these threads may overlap in time with server transfers, and with operations on other open save files. Saves are disabled if the source or target file is busy with a load or save operation. Quit is never allowed while any thread is busy.
Mail is not removed from POP servers on Load requests, but only on explicit "Delete" button deletion requests, if verified by the user. Delete requests are run immediately, upon user verification.
To delete your mail from a server and process offline: in the server list window select the All checkbutton, Save to a local file, and then Delete to delete all mails from the server; use Open to open the save file later to view and process saved mail.
When deleting from the server window, the mail list (and any already viewed message text) is not reloaded from server, if the delete was successful. If the delete fails, all email must be reloaded, because some POP message numbers may have changed; the reload occurs automatically. Delete in a file list
window deletes from the loal file only.
As of version 2.1, PyMailGUI automatically matches messages selected for deletion with their headers on the mail server, to ensure that the correct mail is deleted. If the mail index is out of synch with the server, mails that do not match the server are not deleted, since their POP message numbers are no longer accurate. In this event, an error is displayed, and a full reload
of the mail index list is automatically performed; you do not need to stop and restart PyMailGUI to reload the index list. This can slow deletions (it adds roughly one second per deleted mail on the test machine used), but prevents the wrong mail from being deleted. See the POP message number synchronization errors description in the next section.
PyMailGUI does header matching in order to ensure that deletions only delete the correct messages, and periodically detect synchronization errors with the server. If a synchronization error message appears, the operation is cancelled, and a full index reload from the server is automatically performed. You need
not stop and restart PyMailGUI and reload the index, but must reattempt the operation after the reload.
The POP email protocol assigns emails a relative message number, reflecting their position in your inbox. In the server List window, PyMailGUI loads its mail index list on demand from the server, and assumes it reflects the content of your inbox from that point on. A message's position in the index list is used as its POP relative message number for later loads and deletes.
This normally works well, since newly arrived emails are added to the end of the inbox. However, the message numbers of the index list can become out of synch with the server in two ways:
A) Because delete operations change POP relative message numbers in the inbox, deleting messages in another email client (even another PyMailGUI instance) while the PyMailGUI server list window is open can invalidate PyMailGUI's message index numbers. In this case, the index list window may be arbitrarily out of synch with the inbox on the server.
B) It is also possible that your ISP may automatically delete emails from your inbox at any time, making PyMailGUI's email list out of synch with message numbers on the mail server. For example, some ISPs may automatically move an email from the inbox to the undeliverable box, in response to a fetch failure. If this happens, PyMailGUI's message numbers will be off by one, according to the server's inbox.
To accommodate such cases, PyMailGUI 2.1 always matches messages to be deleted against the server's inbox, by comparing already fetched headers text with the headers text returned for the same message number; the delete only occurs if the two match. In addition, PyMailGUI runs a quick check for out-of-synch errors by comparing headers for just the last message in the index, whenever the index list is updated, and whenever full messages are fetched.
This header matching adds a slight overhead to deletes, index loads, and mail fetches, but guarantees that deletes will not remove the wrong message, and ensures that the message you receive corresponds to the item selected in the server index List window. The synch test overhead is one second or less on test machines used – it requires 1 POP server connect and an inbox size and (possibly) header text fetch.
In general, you still shouldn't delete messages in PyMailGUI while running a different email client, or that client's message numbers may become confused unless it has simlar synchronization tests. If you receive a synch error pop up on deletes or loads, PyMailGUI automatically begins a full reload of the mail index list displayed in the server List window.
To save time, Load requests only fetch mail headers, not entire messages. View operations fetch the entire message, unless it has been previously viewed (already loaded messages are cached). Multiple message downloads may overlap in time, and may overlap with message editing and sends.
In addition, after the initial load, new Load requests only fetch headers of newly arrived messages. All headers must be refetched after a delete failure, however, due to possibly changed POP message numbers.
PyMailGUI only is connected to a mail server while a load, send, or delete operation is in progress. It does not connect at all unless one of these operations is attempted, and disconnects as soon as the operation finishes. You do not need any Internet connectivity to run PyMailGUI unless you attempt one of these operations. In addition, you may disconnect from the Internet
when they are not in progress, without having to stop the GUI–the program will reconnect on the next transfer operation.
Note: if your POP mail server does support the TOP command for fetching mail headers (most do), see variable "srvrHasTop" in the mailtools.py module to force full message downloads.
Also note that, although PyMailGUI only fetches message headers initially if your email server supports TOP, this can still take some time for very large inboxes; as a rule of thumb, use save-mail files and deletions to keep your inbox small.
10) THE mailconfig CONFIGURATION MODULE
Change the mailconfig.py module file in PyMailGUI's home directory on your own machine to reflect your email server names, username, email address, and optional mail signature line added to all composed mails.
Most settings in this module are optional, or have reasonable preset defaults. However, you must minimally set this module's "smtpservername" variable to send mail, and its "popservername" and "popusername" to load mail from a server. These are simple Python variables assigned to strings in this file. See the
module file and its embedded comments for details.
The mailconfig module's "listheaders" attribute can also be set to a tuple of string header field name, to customize the set of headers displayed in list windows; mail size is always displayed last. Similarly mailconfig's "viewheaders" attribute can extend the set of headers shown in a View window (though From, To, Cc, and Subject fields are always shown). List windows display message headers in fixed-width columns.
Variables in the mailconfig module also can be used to tailor the font used in list windows ("fontsz"), the column at which viewed and quoted text is automatically wrapped ("wrapsz"), colors and fonts in various windows, the local file where sent messages are saved, the opening of mail parts, and more; see the file's source code for more details.
Note: use caution when changing this file, as PyMailGUI may not run at all if some of its variables are missing. You may wish to make a backup copy before editing it in case you need to restore its defaults. A future version of this system may have a configuration dialog which generates this module's code.
This client-side program currently requires Python and Tkinter. It uses Python threads, if installed, to avoid blocking the GUI. Sending and loading email from a server requires an Internet connection. Requires Python 2.3 or later, and uses the Python "email" standard library module to parse and compose mail
text. Reuses a number of modules located in the PP3E examples tree.
– Use ';' between multiple addresses in "To"
and "Cc" headers.
– Passwords are requested if needed, and not
stored by PyMailGUI.
– You may list your password in a file named
in mailconfig.py.
– Reply and Fwd automatically quote the
original mail text.
– Save pops up a dialog for selecting a file
to hold saved mails.
– Save always appends to the save file,
rather than erasing it.
– Delete does not reload message headers,
unless it fails.
– Delete checks your inbox to make sure the
correct mail is deleted.
– Fetches detect inbox changes and
automatically reload index list.
– Open and save dialogs always remember the
prior directory.
– To print emails, "Save" to a text file and
print with other tools.
– Click this window's Source button to view
its source-code files.
– Watch http://www.rmi.net/~lutz for updates
and patches
– This is an Open Source system: change its
code as you like.
– See the SpamBayes system for a spam filter
for incoming email.
if _ _name_ _ == '_ _main_ _':
print helptext # to stdout if run alone
raw_input('Press Enter key') # pause in DOS console pop ups
{mospagebreak title=Ideas for Improvement}
Although I use PyMailGUI on a regular basis as is, there is always room for improvement to software, and this system is no exception. If you wish to experiment with its code, here are a few suggested projects:
- Mail list windows could be sorted by columns on demand. This may require a more sophisticated list window structure.
- The implementation of save-mail files limits their size by loading them into memory all at once; a DBM keyed-access implementation may work around this constraint. See the list windows module comments for ideas.
- Hyperlink URLs within messages could be highlighted visually and made to spawn a web browser automatically when clicked by using the launcher tools we met in the GUI and system parts of this book (Tkinter's text widget supports links directly).
- Because Internet newsgroup posts are similar in structure to emails (header lines plus body text; see the nntplib example in Chapter 14), this script could in principle be extended to display both email messages and news articles. Classifying such a mutation as clever generalization or diabolical hack is left as an exercise in itself.
- The help text has grown large in this version: this might be better implemented as HTML, and displayed in a web browser, with simple text as a fallback option. In fact, we might extract the simple text from the HTML, to avoid redundant copies.
- Saves and Split writes could also be threaded for worst-case scenarios. For pointers on making Saves parallel, see the comments in the file class of ListWindows.py ; there may be some subtle issues that require both thread locks and general file locking for potentially concurrent updates.
- There is currently no way to delete an attachment once it has been added in compose windows. This might be supported by adding quick-access part buttons to compose windows, too, which could verify and delete the part when clicked.
- We could add an automatic spam filter for mails fetched, in addition to any provided at the email server or ISP.
- Mail text is editable in message view windows, even though a new mail is not being composed. This is deliberate—users can annotate the message's text and save it in a text file with the Save button at the bottom of the window. This might be confusing, though, and is redundant (we can also edit and save by clicking on the main text's quick-access part button). Removing edit tools would require extending PyEdit.
- We could also add support for mail lists, allowing users to associate multiple email addresses with a saved list name. On sends to a list name, the mail would be sent to all on the list (the "To:" addresses passed to smtplib ), but the email list could be used for the email's "To:" header line).
And so on—because this software is open source, it is also necessarily open-ended. Suggested exercises in this category are delegated to your imagination.
This concludes our tour of Python client-side programming. In the next chapter, we'll hop the fence to the other side of the Internet world and explore scripts that run on server machines. Such programs give rise to the grander notion of applications that live entirely on the Web and are launched by web browsers. As we take this leap in structure, keep in mind that the tools we met in this and the previous chapter are often sufficient to implement all the distributed processing that many applications require, and they can work in harmony with scripts that run on a server. To completely understand the Web world view, though, we need to explore the server realm, too.
* And remember: you would have to multiply these line counts by a factor of four or five to get the equivalent in a language like C or C++. If you've done much programming, you probably recognize that the fact that we can implement a fairly full-featured mail processing program in roughly 2,000 lines of code speaks volumes about the power of the Python language and its libraries. For comparison, the original version of this program from the second edition of this book was just 725 lines in 3 new modules, but also was very limited—it did not support PyMailGUI2's attachments, thread overlap, local mail files, and so on. * In fact, my ISP's webmail send system went down the very day I had to submit this edition of the book to my publisher! No worries—-I fired up PyMailGUI and used it to send the book as attachment files through a different server. In a sense, this book submitted itself. * The standard library's webbrowser module would help for HTML-based help. Actually, the help display started life even less fancy: it originally displayed help text in a standard information box pop up, generated by the Tkinter showinfo call used earlier in the book. This worked fine on Windows (at least with a small amount of help text), but it failed on Linux because of a default line-length limit in information pop-up boxes; lines were broken so badly as to be illegible.
* In fact, my ISP's webmail send system went down the very day I had to submit this edition of the book to my publisher! No worries—-I fired up PyMailGUI and used it to send the book as attachment files through a different server. In a sense, this book submitted itself.
* The standard library's webbrowser module would help for HTML-based help. Actually, the help display started life even less fancy: it originally displayed help text in a standard information box pop up, generated by the Tkinter showinfo call used earlier in the book. This worked fine on Windows (at least with a small amount of help text), but it failed on Linux because of a default line-length limit in information pop-up boxes; lines were broken so badly as to be illegible.


text:
Product Details
Advantage™ Vented 1-Piece Front Brake Rotor and Hub Assembly (18A14A) by ACDelco®. Quantity: 1 Per Pack. ACDelco Advantage brake rotors and drums feature the fit, form and function of premium aftermarket brakes at a more economical price. The ACDelco Advantage line offers dependability, performance and great value – without sacrificing important features and benefits.
|Rotor Design: Hub and Rotor Assembly
|Rotor Construction: 1-Piece
|Rotor Style: Plain
|Rotor Finish: Non-Coated
|Rotor Type: Vented
|Rotor Vane Type: Directional
|Rotor Diameter: 272.288mm (10.72")
|Nominal Thickness: 30.099mm (1.185")
|Minimum Thickness: 28.448mm (1.12")
|Lug Holes Quantity: 5
|Bolt Circle: 114.3mm (4.5")
|Quantity: 1 Per Pack
- No machining required – ready to be installed right out of the box
- Mill-balanced for proper rotor function
- Quality validated for proper metallurgy and correct brake plate thickness
- Non-directional brake surface finish for consistent braking
- Chamfer angle follows the OE design
- 12-month/unlimited-mile warranty
ACDelco is here with excellent products that are available at a competitive price. The company does its utmost to provide the best possible solutions for your needs. All products by ACDelco are made with expert care and created by professionals to meet all your requirements. The company does not accept compromises when it is going about quality, so you can be sure that all products have only first-rate quality. With many years of manufacturing experience, ACDelco is the name you can trust.
ACDelco®, a brand of GM Customer Care and Aftersales, is a global automotive manufacturer of premium replacement parts for almost all vehicle systems as well as off-road, industrial, and marine equipment. With more than hundred years of manufacturing experience, the company offers an extensive line of brake pads and rotors, belts and hoses, shocks and struts, alternators and starters, thermostats and caps, fuel pumps, and many more trustworthy and top-quality products.


text:
Dear visitor, welcome to SPRINKLER TALK FORUM - You Got Questions, We've Got Answers. If this is your first visit here, please read the Help. It explains how this page works. You must be registered before you can use all the page's features. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
Sunday, August 1st 2004, 2:00pm
Supreme Member
Tuesday, August 10th 2004, 6:16am
Saturday, August 14th 2004, 6:05pm
New Member
Friday, August 20th 2004, 10:23am
Tuesday, August 24th 2004, 8:14pm


text:
Audrey Seguy Basket: £5 (1 item) Sign out
In July, we got some Castle staff and garden volunteers involved in creating a cob pizza oven, with the help of Cob in the community. We mixed clay, sand and straw and made the oven over two days. Barry and Rosa helped with the design and creation of the plinth. Barry spent a few weeks previously doing all the groundwork creating a solid plinth with recycled bricks, bound together with cob, (which he spent a few hours showing us his salsa moves over). He filled the plinth with rubble, sand, and bottles to create a solid heat retaining base.
A few weeks later at the garden party, we fired up the oven and made about 50 pizzas. We finished off with a foccaccia made from the milled wheat we grew in the garden last year.
This summer also, was the first season to see a great abundance of berries from the garden! Strawberries, loganberries, tay berries, raspberries, japanese wineberries & black berries. The kitchen made great use of them in cakes,flapjacks, muffins and jams.
Mid September, the Castle took part in Urban Food Week. All of the vegetables that week used in the cafe food, was either harvested from our garden or bought from Growing Communities new 4 acre farm in Dagenham.
We had the duty managers in the garden for an hour, during their staff training day. They all took part in a garden task that involved a full cycle of what is involved in veg growing. They turned the compost, top dressed some veg beds with new compost, sowed some winter greens seeds, planted out, and did lots of harvesting! including salad for their lunch.
During the summer holiday, we held a family/child friendly workday in the garden and invited children from the Castle membership and the local community and held a scarecrow wildlife habitat and recycled sculpture making day. The local Wildlife Trust at East Reservoir came along with their tools and materials and helped make a new bug habitat and bird boxes, which have added to our wildlife habitats in the garden. Min and Christina led a scarecrow making. As well as a big scarecrow wearing a Castle hoody, they got the kids to make these mini ones made from recycled wooden cultery from the Castle Garden party!


text:
Affluent clients, and those who are fast approaching that status, face their own unique set of financial situations and needs. First National Bank has provided guidance to these clients for six generations, and offers an experienced team that includes investment managers, trust professionals and private banking specialists – all with a deep understanding of wealth management and the needs of clients who seek to protect and maximize the value of their wealth.
Discover how First National Wealth Management can help address complex issues and identify the right solutions for you and your family.
Featured Products & Services:
- Guiding affluent and emerging-affluent clients through complex situations
- Investment management
- Private banking
- Trust
View Deposit Agreement
Raymond James financial advisors may only conduct business with residents of the states and/or jurisdictions for which they are properly registered. Therefore, a response to a request for information may be delayed. Please note that not all of the investments and services mentioned are available in every state. Investors outside of the United States are subject to securities and tax regulations within their applicable jurisdictions that are not addressed on this site. Contact your local Raymond James office for information and availability.
Securities offered through Raymond James Financial Services, Inc., Member FINRA/SIPC, and are not insured by bank insurance, the FDIC or any other government agency, are not deposits or obligations of the bank, are not guaranteed by the bank, and are subject to risks, including the possible loss of principal. First National Bank and the Investment Center are independent of Raymond James Financial Services.
Raymond James Corporate Privacy Notice may be accessed at Privacy Notice
Links are being provided for information purposes only. Raymond James is not affiliated with and does not endorse, authorize or sponsor any of the listed websites or their respective sponsors. Raymond James is not responsible for the content of any website or the collection or use of information regarding any website's users and/or members.


text:
Wiring Diagram 1970 Monte Carlo | Wiring Library 01 monte carlo speaker wiring data schema u2022 rh serasa co 1970 Monte Carlo Wiring Diagram01 Monte Carlo Wiring Diagram - Information about 2002 monte carlo 3 8 engine diagram has been uploaded by Maria Rodriquez and tagged in this category. Occasionally, we may have to slightly alter the design, color, or even equipment. We need a fresh concept for it and one of them is 2002 monte carlo 3 8 engine diagram.. 2004 monte carlo engine diagram you are welcome to our site, this is images about 2004 monte carlo engine diagram posted by Ella Brouillard in 2004 category on Dec 02, 2018. You can also find other images like diagrams wiring diagram, diagrams parts diagram, diagrams replacement parts, diagrams electrical diagram, diagrams repair manuals, diagrams engine diagram, diagrams engine scheme diagram. 01 Chevrolet Monte Carlo Ss Posted by Carrie J. Osbourn in 01 This is a post titled 01 Chevrolet Monte Carlo Ss, we will share many pictures for you that relate to "01 Chevrolet Monte Carlo Ss"..
2001 monte carlo radio wiring diagram. Monte Carlo Engine Diagram. welcome to my blog here I will show you a little more what you are looking for Monte Carlo Engine Diagram below there are some photos and a little about Monte Carlo Engine Diagram that you can see and read, hopefully in accordance with what you are looking for.. Stereo Wiring Diagrams | Subcribe via RSS. 1981 Chevrolet Monte Carlo. March 31st, 2012 | No Comments | Posted in Chevrolet Monte Carlo. 1982 Chevrolet Monte Carlo. 1995 Chevrolet Monte Carlo. March 31st, 2012 | No Comments | Posted in Chevrolet Monte Carlo. 1996 Chevrolet Monte Carlo..
2001 CHEVROLET MONTE CARLO wire harnesses for into car, into factory radio wires, amp bypass harnesses, amp integration harness, speaker connectors and misc wires with adjustable volume Can also be used to retain OnStar Chimes when bypassing a factory amplified system The GMOS 01 interface is designed to allow the user to replace the OEM. 2006 Chevrolet Monte Carlo Car Radio Wiring Diagram Whether your an expert Chevrolet Monte Carlo mobile electronics installer, Chevrolet Monte Carlo fanatic, or a novice Chevrolet Monte Carlo enthusiast with a 2006 Chevrolet Monte Carlo, a car stereo wiring diagram can save yourself a. Sep 01, 2015 · Hi everyone, My radio cut off suddenly in my 2002 monte carlo. I check the fuse on the passenger side and got nothing. Can anyone help with this problem. Is it just some wiring, the amp or codes needs to be reset.Please let me know thanks..
Chevrolet Monte Carlo Electrical Problems. mehearty Posts: 6. August 2007 edited December 2013 in Chevrolet. looked at wiring diagram it shows the cruise control is tied into the circuit to the heater/control panel going to replace control panel just ordered it today 120.00 see what happens been a problem for about 9 months hope it works. May 22, 2007 · Does anyone know where to find the radio wiring diagram for a 2002 Monte Carlo? Thanks. 4 Rockford Fosgate P3 10s in a mustang Started Yesterday at 01:45 AM. Box design for 18 GMC Denali help needed Started 21 hours ago. Pyle PLA485 / Morel Tempo Ultra 602 Started August 4.. Welcome to our website, we try to bring you relevant images to what you are looking for about "01 Monte Carlo Recall". Therefore we present the picture gallery below. Hopefully what you are looking for can be found below. This image is the best image we collect from the best sources, the image below.
Chevrolet Symbols Diagram. 2018-09-11. This 1986 Chevy Monte Carlo Fuse Box picture has been authored. You possibly can get this excellent pic for your laptop, mini netbook or pc. You also could save this post to you favorite bookmarking sites.. 01 Monte Carlo Door Lock Wiring Diagram 39 Images. Disable Adblock. In order we keep our site free, this site is sponsored in party by advertisements. Please consider disabling Ad Blocking on this site to enjoy the content. Thank you! Chevrolet Symbols Diagram. 2018-08-20..
Wiring Diagram 85 Monte | Wiring Library Power Window Wiring Diagram 1985 Monte Carlo Ss Johnywheels 1999 A4 Cabriolet 1999 a4 cabriolet. proxy.php?image=http%3A%2F%2Fwww.motortopia.
3 8 V6 Engine Diagram - Trusted Wiring Diagram Online Chevy 3 8 V6 Engine Diagram Wiring Diagram Todays Chrysler 3 Liter V6 Diagram 3 8 V6 Engine Diagram
2001 Monte Carlo Wiring Diagram - Simple Wiring Diagram 01 monte carlo wiring diagram wiring library wiring diagram for 1987 monte carlo 01 impala wiring
Ford Mustang Fuse Box Location - Box Wiring Diagram 1970 ford mustang fuse box diagram wiring library 2001 Mustang Fuse Box 83 mustang fuse box
2001 Chevy Monte Carlo Radio Wiring Diagram | Wiring Diagram Libraries 01 monte carlo wiring diagram wiring libraryimages of 2001 chevy malibu radio wiring diagram diagrams wiring
85 Monte Carlo Ss Wiring Diagram - Wiring Diagrams Site 1985 monte carlo wiring diagram wiring diagram third level 85 s10 wiring diagram 1985 chevy monte
1992 Astro Van Wiring Diagram - Free Wiring Diagram For You • 2002 gmc sonoma vacuum diagram html autos post 2000 Astro Van Wiring Diagram Chevrolet Van Wiring Diagram
2001 Monte Carlo Engine Diagram - The Portal And Forum Of Wiring ... 1999 chevrolet monte carlo wiring diagram wiring diagram third level rh 6 16 11 jacobwinterstein com 2005 Monte Carlo Diagram 2001 chevy monte carlo engine ...
04 Monte Carlo Wiring Diagram - Simple Wiring Diagrams 02 monte carlo wiring diagram wiring diagram todays 04 envoy wiring diagram 01 monte carlo engine
2004 Monte Carlo Ss Engine Wiring Diagram | Wiring Library Free Template 2006 Chevy Impala Engine Diagram Large size .
2004 Monte Carlo Ss Engine Wiring Diagram | Wiring Library wiring diagrams rh maliburacing com 86 monte carlo ss engine wiring diagram 99 Monte Carlo Wiring
01 Monte Carlo Fuse Box - Guide And Troubleshooting Of Wiring Diagram • chevy monte carlo fuse box wiring diagram todays rh 13 10 1813weddingbarn com 01 Monte Carlo
01 Galant Stereo Wiring Harness Diagram - Free Wiring Diagram For You • 2003 mitsubishi eclipse stereo diagram wiring diagram third level rh 8 6 20 jacobwinterstein com PT
2001 Chevy Monte Carlo Radio Wiring Diagram | Wiring Diagram Libraries 01 monte carlo wiring diagram wiring librarywiring diagram for 2000 chevy impala box wiring diagram 01
2004 Monte Carlo Ss Engine Wiring Diagram | Wiring Library 1995 caprice wiring harness diagram online schematics diagram rh delvato co 2004 Monte Carlo Fuse Box


text:
Mister Journalism: "Reading, Sharing, Discussing, Learning"
"Dedicated to the premise that no matter what 'experts' say, trends in Education really are fleeting; and that the ONLY goal of all school employees should be to work with parents to help their students become better people in June than they were in September."
Elected school boards are the bedrock of American democracy.
Bringing awareness to mental illness and sexual assault
Communications for the Godfrey-Lee Public Schools community
an indie author writing to stay sane
Just another Delaware WordPress.com weblog
Insurgent journalism. Poetry. Weaponized Mathematics.
Attacks on our public education system hurt America
Independent Thought for an Independent World
Helping You Navigate Next-Gen Ed Reform from the Great State of Maine
"That all citizens will be given an equal start through a sound education is one of the most basic, promised rights of our democracy. Our chronic refusal as a nation to guarantee that right for all children.... is rooted in a kind of moral blindness, or at least a failure of moral imagination.... It is a failure which threatens our future as a nation of citizens called to a common purpose... tied to one another by a common bond." —Senator Paul Wellstone --- March 31, 2000
My Thoughts About Public Education
Almost daily posts from a retired public school teacher who is just looking at the data.
Educare- Latin, "To draw out that which lies within." Now- the only time we have. Thoughts on education by Bill Boyle. Thoughts expressed here are my own.
We live to write and write to live ... professional writers talk about the craft and business of writing
For the news and views you might have missed
To simplify; to be reduced to the essentials.


text:
Sept. 29, 2008
CAMBRIDGE, Mass. – Kevin Pang, Ken Van Tilburg, Brian Wee, and David Iba represented MIT at the ITA New England Championship held this past weekend at Williams College. Pang and Van Tilburg made their second straight appearance at the tournament while Wee and Iba were first-time competitors.
In the singles bracket, Pang rallied for a 4-6, 7-5 (10-6) win over Scott Schulman (Brandeis University), but then fell to Jeremy Weinberger (Williams College) for the second year in a row, this time by scores of 6-2, 6-1. Van Tilburg lost to Josh Cranin (Bowdoin College), 6-3, 6-4, while Wee was defeated by Andrew Jung (Amherst College), 6-2, 6-4.
Van Tilburg and Wee dropped an 8-4 decision to Ben Stein and Amrit Rupasinghe (Bates College), the top seed and eventual champion. Pang and Iba lost to Karol Furmaga and Rick Devlin (Williams College), 8-3, in their only match of the weekend.


text:
Saturday, May 5, 2007
Grand Canyon Double Crossing
7 comments:
Hi Sue!
I bookmarked your Blog and am living vicariously through you as I sit at work (-:
Keep having fun ... you are an inspiration to us ultrarunnin' chicks!
-Karen Sandt
- May 10, 2007 at 11:59 AM
hey sue!
didja have some more beers at the el tovar?? i did me some drinkin' there years ago after campin' out in da canyon. i love me some grand canyon!! you guys rock hard!
- May 12, 2007 at 10:10 AM
- Sue J. said...
Hah, Karen -- you crack me up. BTW, how's the little guy??
No more beers, Bruno, or else I'd have fallen asleep at the Maswik cafeteria. Warning: don't order the "fish." (O_O)
- May 12, 2007 at 9:00 PM
- Loomdog said...
Amazing pictures Sue! I totally have to do this run sometimes... And evidently some runs with you in the Cali mtns. sounds like you are enjoying the terrain there too. I actually put one of your shots as my laptop background. Beats the hell out of EGYPT!!!!
- May 13, 2007 at 10:21 AM
- bruno said...
hey sue,
ya ever read that dude (i think his name is) john annerino's book about runnin' in da canyon? i read it years ago, but remember likin' it. he's not as 'core as you though!
yr pal, bruno!
- May 15, 2007 at 5:38 AM
- Sue J. said...
Hey Bruno! Didn't read Annerino's book but did purchase "Over the Edge: Death in Grand Canyon" by Ghiglieri, an interesting albeit a bit macabre, 608-page compilation of all known deaths in GC.
- May 15, 2007 at 1:06 PM
- bruno said...
whoa! 608 pages! i'll have to check it out. i was up on mt washington on sunday and was lookin' at that board they have listin' all the people who died around there. gosh. a lot of folks die outdoors. actually if'n i gotta die, i guess that's the way. you know the last thing ya hear before a redneck commits suicide? "hey, watch this!" hardeeharhar!! i'm from da souf so i can make that li'l joke.
- May 16, 2007 at 5:43 AM


text:
Click image to enlarge.
On Monday, December 31st, join the Cryptkeeper for FEARnet's first-ever New Year's Shockin' Eve Tales from the Crypt Marathon from 6 p.m.-6 a.m. ET/3 p.m.-3 a.m. PT!
From the press release:
The marathon is hosted by the Cryptkeeper, himself, in exclusive all-new interstitial content for the first time in 15 years. See the cool ghoul take a blast through the past, decomposing the best of the '70s, '80s, '90s and '00s, on his way to welcoming in 2013. Who needs Ryan Seacrest when you can watch the old year die a slow, painful death on the Cryptkeeper's very own countdown clock? And all night long viewers can take part in an interactive "Would You Rather?" poll, available on FEARnet.com, where they can answer questions based on the episodes they are watching in special segments dubbed "Cryptkeeper's Conundrums."
The holiday spooktacular highlights 24 terrifying "Tales" such as "And All Through the House" (6:30 p.m. ET/3:30 p.m. PT) the fan-favorite story of a murderous woman terrorized by a maniacal Santa Claus; "Dead Wait" (8:30 p.m. ET/5:30 p.m. PT) directed by genre master Tobe Hooper and starring Whoopi Goldberg as a backstabbing voodoo priestess; "None But the Lonely Heart" (3 a.m. ET/12 a.m. PT) Tom Hanks' directorial debut about a nefarious gold digger who may have finally been found out; and the Emmy-nominated "Yellow" (2:30 a.m. ET/11:30 a.m. PT), directed by Robert Zemeckis and boasting a star-studded cast helmed by Kirk Douglas, Dan Aykroyd and Lance Henriksen, about a demanding father who tries to give his cowardly son one last shot at honor in WWI.
In conjunction with the New Year's Shockin' Eve Marathon, FEARnet fans will be able to enter the "Cryptkeeper's New Year's Shockin' Eve" Sweepstakes beginning at 8 a.m. ET/5 a.m. PT on December 31, until 7:59 p.m. ET/4: 59 p.m. PT on January 1. The prize pack includes a Sony portable DVD player, "Tales from the Crypt" DVDs, t-shirt and pint glass. Information regarding the sweepstakes can be found at fearnet.com/shows/tales-crypt.
Hot damn, a Tales from the Crypt marathon, with prizes to be had? Count me in.
FEARnet Links: Official Site | Facebook | Twitter
Want to share some news? Click here to hit us with it!


text:
March 13, 2009
CAMBRIDGE, Mass. - The Northeast Fencing Conference (NFC) recently announced its All-Conference Team as MIT received a trio Second-Team selections. With a record of 22-8 senior Igor Kopylov was tabbed to the All-Conference Sabre Second Team, earning the fourth honor of his career which tied the Institute mark set by Spencer Sugimoto last season.
Freshmen Benjamin Nield and Carter Chang rounded out MIT's All-Conference contingent. Nield compiled a 20-7 mark en route to a spot on the Foil Second Team while Chang's conference ledger of 19-9 earned an Epee Second Team award.
Teams in the Northeast Fencing Conference include Boston College, Boston University, Brandeis University, Brown University, Dartmouth College, the University of Massachusetts, the University of New Hampshire, and Tufts University.


text:
Playoff Countdown: West playoff spot up for grabsby Brian Compton
The conclusion to 2013-14 NHL regular season is fast approaching. After game play Wednesday, the League is down to 37 games remaining on the schedule, with 11 to be played Thursday. Yet, much remains to be decided in the frantic run to the finish line, including playoff qualification, playoff positioning and numerous individual accomplishments and milestones. To celebrate the four-day countdown to the end of the season April 13 and the start of the Stanley Cup Playoffs on April 16, NHL.com will provide a piece of playoff-related content each day.
The eight teams that will represent the Eastern Conference in the Stanley Cup Playoffs have been decided, with the final two punching their tickets Wednesday night.
For the 23rd consecutive postseason, the Detroit Red Wings will have an opportunity to play for the championship. Detroit clinched a playoff berth Wednesday by earning a point in a 4-3 shootout loss to the Pittsburgh Penguins.
The Columbus Blue Jackets, meanwhile, will compete in the playoffs for the second time in franchise history. Columbus clinched a spot with a 3-1 win against the Dallas Stars at American Airlines Center.
There is still much to be determined, however. Playoff matchups still need to be determined in each conference, and one postseason spot is still available in the Western Conference.
The Phoenix Coyotes, who are still vying for that second wild-card spot in the West, will be one of 22 teams in action Thursday night when they face the Nashville Predators at Bridgestone Arena. Phoenix trails the Stars by two points with a game in hand.
The Colorado Avalanche, who trail the St. Louis Blues by two points for the Central Division lead, will visit the Vancouver Canucks at Rogers Arena. The Blues, meanwhile, will be at Xcel Energy Center to face the Minnesota Wild. St. Louis has lost three in a row.
Minnesota, which has clinched the first wild card in the West, has won three straight and continues to benefit from stellar goaltending by Ilya Bryzgalov; in 10 starts since arriving via trade from the Edmonton Oilers, Bryzgalov is 7-0-3 with a 1.65 goals-against average and three shutouts.
The Anaheim Ducks wrapped up the Pacific Division title Wednesday with a 5-2 win against the San Jose Sharks, who now know they will play the Los Angeles Kings in a Western Conference First Round series. The Ducks are one point ahead of the Blues for the top spot in the West.
Which team will finish second in the Metropolitan Division? The New York Rangers, who are two points ahead of the Philadelphia Flyers and Columbus, can inch closer toward securing home-ice advantage in the first round with a win against the Buffalo Sabres at Madison Square Garden.
Philadelphia will visit the Tampa Bay Lightning, who are without injured goaltender Ben Bishop (upper body) for the remainder of the regular season. The Lightning trail the Montreal Canadiens by three points for second place in the Atlantic Division with a game in hand. Montreal, which lost in overtime at the Chicago Blackhawks on Wednesday, will host the New York Islanders at Bell Centre.
Here's a rundown of the action Thursday:
Buffalo Sabres at New York Rangers (7 p.m. ET, MSG-B, BELL TV, MSG)
Washington Capitals at Carolina Hurricanes (7 p.m. ET, CSN-DC, FS-CR)
New York Islanders at Montreal Canadiens (7:30 p.m. ET, RDS, MSG PLUS 2, TSN-HABS)
New Jersey Devils at Ottawa Senators (7:30 p.m. ET, MSG PLUS, SNET-E)
Philadelphia Flyers at Tampa Bay Lightning (7:30 p.m. ET, CSN-PH, SUN)
Toronto Maple Leafs at Florida Panthers (7:30 p.m. ET, LEAFS TV, FS-F)
Phoenix Coyotes at Nashville Predators (8 p.m. ET, FS-A, FS-TN)
St. Louis Blues at Minnesota Wild (8 p.m. ET, TSN2, NBCSN)
Boston Bruins at Winnipeg Jets (8 p.m. ET, NESN PLUS, TSN-JETS)
Los Angeles Kings at Edmonton Oilers (9:30 p.m. ET, TSN, FS-W)
Colorado Avalanche at Vancouver Canucks (10 p.m. ET, ALT, SNET-P)
The Stanley Cup Playoffs consist of 16 teams, eight in each conference, but it is now division-based and a wild-card system has been added.
The top three teams in each division will make up the first 12 teams in the playoffs. The remaining four spots will be filled by the next two highest-placed finishers in each conference, based on regular-season points and regardless of division. It is possible for one division to send five teams to the postseason while the other sends just three.
Seeding of the wild-card teams within each divisional playoff will be determined on the basis of regular-season points. The division winner with the most points in the conference will be matched against the wild-card team with the fewest points; the division winner with the second-most points in the conference will play the wild-card team with the second-fewest points.
The teams finishing second and third in each division will play in the first round of the playoffs. There is no reseeding as the tournament moves to the second round and winners of that series advance to the conference championship series and the right to play in the Stanley Cup Final.


text:
Vote for Babe of the Week — Rachel, Kylie, Claudia, Shyanne, Tatiana, Jordana and Jessenia
What's better than a smokin' hot babe? How about seven.
Rachel, and Kylie and Claudia with the cowgirl hat, oh my. Only one of these seven wonder women can be named Babe of the Week and go on to fight for the title of Babe of the Month. Click their names to check out even more hot pics of each lady and then cast your vote at the bottom!
Rachel Prouhet
Kylie Nicole
Claudia Fijal
Shyanne Queen
Tatiana Harvey
Jordana Ryan
Jessenia Vice
Here's the deal: At the end of the week, each Babe of the Day will compete for your votes and the winner will become Babe of the Week. Each week's winner will then face off to become Babe of the Month, and those winners will then duke it out for – you guessed it – the Babe of the Year title. Only those lucky ladies will be inducted into GuySpeed's Hall of Fame, an honor reserved for the hottest of babes.


text:
B-Ball Clip Of The Week: Player Shoots An Amazing Basketball Shot From His Knees!
Freshman Isaiah Canaan #3 hits a sit-down three-pointer from nearly half-court, right at the shot clock buzzer.
Please click the "Report" button below if the video on this page is not working properly.
Comments will only be displayed by verified emails. No Spamming or Racism.


text:
During Season 7 of Throwdown, Bobby Flay challenged Michele Albano (Michele's Pies, Norwalk, Connecticut) to a Pumpkin Pie Throwdown. The judges were James Beard Award-winning cookbook author, Dorie Greenspan, and chef/co-owner of Metro Bis Restaurant, Christopher Prosperi. Bobby was victorious with his Pumpkin Pie with Cinnamon Crunch and Bourbon-Maple Whipped Cream.
Bobby's strategy was to create a pie with an intensely flavored filling, using molasses, cloves, cinnamon, ginger, and vanilla. He wanted the filling to be luxuriously smooth and creamy, so he used extra egg yolks, heavy cream and milk, and strained it before baking. He also decided to keep it simple with canned pumpkin puree and a nontraditional graham cracker crust. To finish off the pie, he topped each slice with airy, boozed up whipped cream and crunchy cinnamon-oat streusel, providing a wonderful contrast of textures.
The cinnamon crunch calls for light muscovado sugar, and the filling calls for dark muscovado sugar. Muscovado is a type of unrefined brown sugar with a strong molasses flavor. It is slightly courser and stickier than most brown sugars, and is nutritionally richer, retaining most of the natural minerals inherent in the sugarcane juice, which also provides its rich flavor and color.
I quickly became frustrated in my quest to locate muscovado sugar at every store in San Diego. Having never tasted the difference before, I became obsessed with trying to find it. One gourmet-cooking store had a pound of light, but told me they are discontinuing it because it just doesn't sell. Both are available through Amazon (India Tree Dark Muscovado Sugar, 1 Pound (Pack of 4); Billington's Natural Light Brown Muscovado Sugar, 16-Ounce Bags (Pack of 10)), but I wanted to make the pie over the weekend. I snapped up the remaining pound of light, and settled for using dark brown sugar in the recipe, and adding an extra tablespoon of molasses.
Nevertheless, this was one incredible pumpkin pie. I sent out an e-mail to some of our friends in the neighborhood, offering free pie, and we had 10 people stop by for a late afternoon slice!
Pumpkin Pie with Cinnamon Crunch and Bourbon-Maple Whipped Cream
Slightly modified from Bobby Flay's Throwdown!: More Than 100 Recipes from Food Network's Ultimate Cooking Challenge and Throwdown Pumpkin Pie
Cinnamon Crunch:
(Makes enough for 2-3 pies)
½ cup all-purpose flour
½ cup quick cooking rolled oats
½ cup light muscovado sugar
1 teaspoon ground cinnamon
7 tablespoons unsalted butter, cut into small cubes, cold
Graham Cracker Crust:
2 cups graham cracker crumbs
8 tablespoons unsalted butter, melted
1/4 teaspoon ground cinnamon
1 egg, whisked (for brushing crust)
Pumpkin filling:
3 large eggs
3 large egg yolks
¾ cup dark muscavado sugar
1/4 cup granulated sugar
2 tablespoons molasses
1 1/2 cups canned pumpkin puree
1 1/4 teaspoons ground cinnamon
1 teaspoon ground ginger
1/2 teaspoon ground nutmeg
1/4 teaspoon ground cloves
1/2 teaspoon fine salt
1 cup heavy cream
½ cup whole milk
1/2 vanilla bean, split, seeds scraped and reserved (or 2 teaspoons pure vanilla extract)
3 tablespoons unsalted butter, melted
Bourbon-Maple Whipped Cream (for serving):
1 1/4 cups very cold heavy cream
1/2 vanilla bean, split, seeds scraped and reserved (or 2 teaspoons pure vanilla extract)
2 tablespoons Grade B maple syrup
1 to 2 tablespoons bourbon (to your taste)
For the Cinnamon Crunch:
Preheat the oven to 350 degrees F.
Combine the flour, oats, sugar, and cinnamon in a food processor, and pulse a few times. Add the butter and pulse until combined. Pour the mixture onto a parchment lined baking sheet and pat it into a rectangle, approximately 4 x 6 inches. Bake until golden brown, about 15 minutes. Remove from oven and let cool. Break up into small pieces and store in an airtight container. Again, this makes enough crunch for 2-3 pies. It would also be good sprinkled over ice cream.
For the Crust:
Preheat the oven to 350 degrees F.
Add the graham cracker crumbs, butter, and cinnamon to a medium bowl and mix until combined. It should feel like wet sand, and just come together.
Spread the mixture evenly into a 10-inch pie plate, using your fingertips or the flat bottom of a glass. Firmly press the mixture over the bottom and up the sides of the pan. Brush with whisked egg.
Put the pan on the middle rack of the oven and bake until the crust is light brown and firm to the touch, about 10 to 15 minutes. Remove from the oven and let cool.
For the Filling:
Reduce the oven to 300 degrees F.
Whisk together the eggs, yolks, both sugars, and molasses in the bowl of an electric mixer. Add the pumpkin puree, spices, salt, cream, milk, and vanilla seeds and continue whisking to combine. Strain the mixture through a coarse strainer into a bowl (this will provide the velvety smoothness). Whisk in the butter.
Place the pie plate on a baking sheet, and pour the strained mixture into the baked shell. Bake until almost set, about 1 hour (the edges will be set and the center will be jiggle slightly when shaken). Transfer to a wire rack and let cool to room temperature. Refrigerate until chilled, if preferred.
Cut into slices, and top each with a large dollop of whipped cream and some of the cinnamon crunch.
For the Bourbon-Maple Whipped Cream:
Combine the cream, vanilla seeds, syrup and bourbon in a large chilled bowl and whip until soft peaks form.
Garnish each piece of pie with a dollop of the whipped cream and sprinkling of cinnamon crunch before serving.


text:
Long-time business professor named 'Icon of Education'March 31, 2014
Ingram's Magazine recognized Emporia State University's Dr. John Rich as a 2014 Icon of Education for his commitment in the classroom.
Since 2009, Ingram's has honored the region's top administrators, researchers and classroom instructors with its Icons of Education program. This year, Rich was selected for his dedication to excellence in the School of Business at Emporia State University. Rich has been a faculty member at Emporia State since he accepted an instructor position in 1968. He currently serves as a professor of accounting and the director of Student Affairs and Alumni in the School of Business.
"I found the recognition by Ingram's to be a great and very pleasant surprise," Rich said. "I am honored to have been chosen and believe that I represent the many faculty at Emporia State who are deserving of this recognition. To be included with the past and present recipients of this award is a humbling honor, and one that I will always treasure."
Dr. Rich's dedication to the field of accounting and to Emporia State University have earned him a variety of roles over the years. In addition to serving as a professor in the School of Business, Rich has served as department chair, acting assistant vice president of academic affairs, both associate dean and interim dean for the School of Business, faculty athletics representative and in a variety of campus and community-wide committees and leadership positions.
During his time as associate dean, the School of Business achieved AACSB International Accreditation, a mark of distinction held by less than 5 percent of all business schools in the world.
Rich explained, "Earning the accreditation was a 20-year process of continuous improvement which involved many stakeholders. Being a part of the faculty and administrative team that achieved accreditation for our School, I believe, will be the most significant and long-lasting contribution."
"Dr. Rich has impacted the lives of many with his commitment to students and passion for education," said Dr. Kristie Ogilvie, dean of the School of Business. "Many of our graduates stay connected with Dr. Rich and are always eager to speak about his influence on their college experience. The School of Business is proud to call Dr. Rich one of our own, and we congratulate him on this recognition in Ingram's Magazine."
Before moving to Emporia 46 years ago, Rich earned his bachelor's and master's degrees in accounting from Oklahoma State University. He earned his Ph.D. in accounting from the University of North Texas in 1985. In his time at Emporia State, Rich has been awarded the Xi Phi Outstanding Faculty Member in 1974, a University Service Citation in 1994 and the Campus Pride Award in 1996. He has also been an author, co-author and editor of a number of regional and national journal articles.
For more information about Ingram's and to view the full list of 2014 Icons of Education, please visit http://ingramsonline.com/. For more information on the School of Business at Emporia State University, please contact Jessica Buchholz, director of Student Services and Marketing, at 620-341-5371 or by email at firstname.lastname@example.com.
Check out our students' achievements and accomplishments on Emporia State's meritpages.com site