Tuesday, December 27, 2005

TV 2.0

I have a sneaking suspicion this is not a very original post. But I cannot recollect ever reading it from someone so I will naturally claim all the credit if anyone reads this.

The White City Building of the BBC (in, naturally White City) regularly has giant informative posters in its foyer about various beeb things, presumably knocked up to inform staff (and maybe even visitors) about the latest David Attenbourough or new performance pay agreement.

A few months back it had a spiel on digital TV and convergence, and one sentence struck me. "What is the role of a schedule when everyone has 30,000 hours of programs stored on their [TV/iPod/device]". For a long time my answer was - who cares? Only a organisation that sees itself as a scheduler would worry. Which presumably would worry every digital channel that does not produce its own output (all of them except the beeb and a smidgen of sky I think)
I mean it does not matter if you are producing programs. No one can watch them till they are ready so schedules still matter, we will still see billboard ads for the next sex and the city episode, and millions will still sit down at 9pm to watch it.

But then I started to wonder why the big fuss about HDTV sets, and advertisers suing TiVO for
stealing their content and the digital switch over. 1. HDTV - who cares. What is the point. MP3 showed that we really do not care about better quality (CDs) when there is better functionality to be had. So selling HDTV and the whoe cost of switch over on "hey the nightly news will look far better in SuperRamaOVision" just does not wash. 2. I put up with adverts. If I am somehow forced to read a magazine cover to cover spending the same time on each page, I am not going to buy the magazine. Make the adverts work for me. Make them relevant and about things I care about. Hey - try making products i care about, try making products that do not make a choice between environmental degridation and a fun thing to have. If you cant pray god someone does soon.
2.b. Teach teenagers to understand point 2. The world appears flooded with "I'm a pop idol get me out of here" tie ins and adverts and newspaper columns, all of which make the same basic assumption - they are trying to repeat it so often, in so many places that the whole world looks as if it actually cares about X factor. And if the whole world cares, the 14 year old brain will think it is important. It may snub it to show how aloof it is, it may embrace it, but that 14 year old brain has been fooled into thinking something of no importance what so ever outweighs politics, trade talks, and real stuff. Dammmit I am ranting. But it all seems to be part of the same mix.
3. Digital switch over - make me laugh.

So I have recently realised the answer - TV 2.0.

TV 2.0 will be a primarily passive medium (we stillw atch the programs), schedules will be completely configurable by individuals but most of us will watch the default BBC scheldue because frankly it will be quite good and we only want to wind down anyhow, and the programs will be downloaded from the internet. Oh no adverts as we know them - as we can pause the programs and fast forward we shall blip over them. so adverts will become embedded and inteligent - if i like the look of a scene or a statement by the presenter, one press of the red button gets me links to all the adverts (infomercials?) of the people who paid to be linked to that sentence. Google adwords for TV.

Anyway No radio waves involved. Broadcasting to air is dying. When "everyone" has 8mbs it is dead. Which makes the TV switch over even more dumb than it currently seems (by 2010 an estimated 95% of people will have a digital tv. I know of no politician on the planet who will switch off the TVs of millions of registered voters, just to free up some spectrum for, well I am not too sure what they want to radio spectrum for. Wifi?)

No adverts. The latest flash movies take internal links, TV now holds 640 bits of extra info per frame in teletext, linking that to ads for each frame is not going to be very hard. So all my adverts will be heavily targetted to the programs I watch. And I will be able to ignore them too. But if somethng picks my fancy i will be able to dive right in sounds good to me

Oh and schedules - yes back to those. Like newspaper editors, schedules will determine the flavour of a channel - they will stop being linear things, and become quite complex webs, but guided webs. Guided by professionals with a ethical and literary history and guided with their intent of expressing their point of view, whilst perhaps being fair, balanced or at best entertaining. I could build my own schedule of programs, in the same way i could build ny own syllabus for a degree, or build my own cinema schedule. But frankly i would rather someone else who has far greater exposure and deeper interest in the subject did it for me. I do not have to follow a degree syllabus, nor visit the films Halliwell recommends. But It is nice to know if I just did, it would be better than pot luck.

Oh yes - TV 1.5. Whilst we wait for this lovely world where all the single parent families in council houses have 8mb connections, we shall have a compromise world - and it seems to fit quiten nicely. Freeview has an amazing 5 million users, and it is digital tv over analogue. So when John Simpson launches his tv schedule I will be able to set my PVR to record the john simpson channel. Some programs might be avialble to download from bbc.co.uk, some might be radio programs, some might be showing at 9.22 pm on freeview channel 34, somelaready on my hard disk. And once this is possible (in my fantasy world), then the world will see far less UK tv style repeats on freeview, and will see far more programs that john simpson thinks are worth watching, or david atenboroguh, or ant and dec. And with a little magic the themes of these schedulers will come to light, saying watch this program first, then compare to these two. Just watch the intro of this life on earth and see how panning evolved in nature documnetaries. See the differences. See how this politician lied? See how different reporters show the same event. See the emerging ideas?

A schedule is not a liner tool for arranging gaps in adverts. A schedule is an editor for whole programs, allowing broadcasting to fit back into a downloadable, ipod shuffle world. In the same way that I can download a guide to an art gallery, or londons walks, I want ot be able to download a guide to this weeks TV. And i want it to have a brain, and a sensibility like mine.

I am not prepared to wade through Reuters Feed to choose my daily news. But I am prepared to choose between Rebeka Wade and Alan Rusbridger.

All it needs is the following

1. Ability to download and store programs (freeview, broadband, PVRs, mythTV. )
2. Ability to identify exact scenes, times in a program, like HTML anchors. This is just a question of coding and exists at least in flash movies. It will allow schedlers to point at scenes in the same way they point at web pages, book pages. It will allow advertisers to exactly sneak in their product placements without being outrageously obvious. And that alone will probably pay for the whole schebang
3. Programs to be indexed uniquely with a URI. I think this is already done by the major broadcasters?

And then for an encore I shall explain why there are no schedules for music - because the publishing companies have ensured there is no unique URI, so no one can make thier own scheludes that they put out there and build your nights listening.

Friday, December 02, 2005

easygui - small addition

I really ought to sort out a real web site for this stuff ...

I like easygui for python, but two things annoy me, - not being able to enter text as a block (instead of line at a time) and no datetime entry.

Just add this to the easygui text file (after textbox)

and call as easygui.textbox2()

--------------------------------------
# textbox2
#-------------------------------------------------------------------
def textbox2(message="", title="", text="", codebox=0):
"""Display some text in a proportional font with line wrapping at word breaks.
This function is suitable for displaying general written text.

The text parameter should be a string, or a list or tuple of lines to be
displayed in the textbox.

altered pbrian paul1brian at gmail dot com
added capability to enter and alter text - useful for grabbing more than single lines of text.

"""

if message == None: message = ""
if title == None: title = ""

#added pbrian - __textbox2Text, textbox
global root, __replyButtonText, __widgetTexts, buttonsFrame, __textbox2Text, textbox
choices = ["0K"]
__replyButtonText = choices[0]
#added pbrian
__textbox2Text = text

root = Tk()

root.protocol('WM_DELETE_WINDOW', denyWindowManagerClose )

screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root_width = int((screen_width * 0.8))
root_height = int((screen_height * 0.5))
root_xpos = int((screen_width * 0.1))
root_ypos = int((screen_height * 0.05))

root.title(title)
root.iconname('Dialog')
rootWindowPosition = "+0+0"
root.geometry(rootWindowPosition)
root.expand=NO
root.minsize(root_width, root_height)
rootWindowPosition = "+" + str(root_xpos) + "+" + str(root_ypos)
root.geometry(rootWindowPosition)


mainframe = Frame(root)
mainframe.pack(side=TOP, fill=BOTH, expand=YES)

# ---- put frames in the window -----------------------------------
# we pack the textboxFrame first, so it will expand first
textboxFrame = Frame(mainframe, borderwidth=3)
textboxFrame.pack(side=BOTTOM , fill=BOTH, expand=YES)

message_and_buttonsFrame = Frame(mainframe)
message_and_buttonsFrame.pack(side=TOP, fill=X, expand=NO)

messageFrame = Frame(message_and_buttonsFrame)
messageFrame.pack(side=LEFT, fill=X, expand=YES)

buttonsFrame = Frame(message_and_buttonsFrame)
buttonsFrame.pack(side=RIGHT, expand=NO)

# -------------------- put widgets in the frames --------------------

# put a textbox in the top frame
if codebox:
character_width = int((root_width * 0.6) / CODEBOX_FONT_SIZE)
textbox = Text(textboxFrame,height=25,width=character_width, padx="2m", pady="1m")
textbox.configure(wrap=NONE)
textbox.configure(font=(MONOSPACE_FONT_FAMILY, CODEBOX_FONT_SIZE))

else:
character_width = int((root_width * 0.6) / SMALL_FONT_SIZE)
textbox = Text(
textboxFrame
, height=25
, width=character_width
, padx="2m"
, pady="1m"
)
textbox.configure(wrap=WORD)
textbox.configure(font=(DEFAULT_FONT_FAMILY,TEXTBOX_FONT_SIZE))


# some simple keybindings for scrolling
mainframe.bind("" , textbox.yview_scroll( 1,PAGES))
mainframe.bind("", textbox.yview_scroll(-1,PAGES))

mainframe.bind("", textbox.xview_scroll( 1,PAGES))
mainframe.bind("" , textbox.xview_scroll(-1,PAGES))

mainframe.bind("", textbox.yview_scroll( 1,UNITS))
mainframe.bind("" , textbox.yview_scroll(-1,UNITS))


# add a vertical scrollbar to the frame
rightScrollbar = Scrollbar(textboxFrame, orient=VERTICAL, command=textbox.yview)
textbox.configure(yscrollcommand = rightScrollbar.set)

# add a horizontal scrollbar to the frame
bottomScrollbar = Scrollbar(textboxFrame, orient=HORIZONTAL, command=textbox.xview)
textbox.configure(xscrollcommand = bottomScrollbar.set)

# pack the textbox and the scrollbars. Note that although we must define
# the textbox first, we must pack it last, so that the bottomScrollbar will
# be located properly.

# Note that we need a bottom scrollbar only for code.
# Text will be displayed with wordwrap, so we don't need to have a horizontal
# scroll for it.
if codebox:
bottomScrollbar.pack(side=BOTTOM, fill=X)
rightScrollbar.pack(side=RIGHT, fill=Y)

textbox.pack(side=LEFT, fill=BOTH, expand=YES)


# ---------- put a message widget in the message frame-------------------
messageWidget = Message(messageFrame, anchor=NW, text=message, width=int(root_width * 0.9))
messageWidget.configure(font=(DEFAULT_FONT_FAMILY,DEFAULT_FONT_SIZE))
messageWidget.pack(side=LEFT, expand=YES, fill=BOTH, padx='1m', pady='1m')

# put the buttons in the buttonsFrame
okButton = Button(buttonsFrame, takefocus=YES, text="OK", height=1, width=6)
okButton.pack(expand=NO, side=TOP, padx='2m', pady='1m', ipady="1m", ipadx="2m")
#altered pbrian - bindings now point to function that retrieves text
okButton.bind("" , __textbox2OK)
okButton.bind("", __textbox2OK)
okButton.bind("" , __textbox2OK)


# ----------------- the action begins ----------------------------------------
try:
# load the text into the textbox
if type(text) == type("abc"): pass
else:
try:
text = "".join(text) # convert a list or a tuple to a string
except:
msgbox("Exception when trying to convert "+ str(type(text)) + " to text in textbox")
sys.exit(16)
textbox.insert(END,text, "normal")

#altered pbrian 2 dec 2005 - allow text to be edited
#textbox.configure(state=DISABLED)
except:
msgbox("Exception when trying to load the textbox.")
sys.exit(16)

try:
okButton.focus_force()
except:
msgbox("Exception when trying to put focus on okButton.")
sys.exit(16)

root.mainloop()

root.destroy()
#alter pbrian 2 dec 2005
return __textbox2Text


def __textbox2OK(event):
#called when OK is clicked - and set the textreturnvariable to be text in widget
#not too sure about thesse globals inside a function only, but its how the rest are done.
global root, __textbox2Text, textbox
__textbox2Text = textbox.get("1.0",END)
root.quit()

--------
maybe I will tackle the datetime issue soon - but I need to learn a bit about tkinter first.