Welcome to SpellCoder Sign in | Join | Help
To http://mtayseer.net/. Please adjust your feed URL as http://spellcoder.com will be closed :(

MIX conference is my favorite conference. It is always full of surprises, and it is not restricted to Microsoft technologies. It has been a habit for me to grab the links to MIX videos since MIX 07, and I'm keeping this habit for this year too :).

Here is the source code to the Python program which grabs the links. It generates two files: mix09_links.txt which contain only the links so you can import them in your favorite text editor, and mix09_title.txt which contain the title of every session and its URL, so you know the title of the session.

from urllib import urlopen
import re

links_file = open('mix09_links.txt', 'w')
description_file = open('mix09_title.txt', 'w')
try:
for i in range(16):
url = 'http://videos.visitmix.com/MIX09/page%s' % (i+1)
print url # for tracking
s = urlopen(url).read()
links = re.findall(r'<h2 class="title" title="(.*?)"><a href="/MIX09/%28.*?%29">.*?</a></h2>', s)
for link in links:
links_file.write('http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/%s.wmv\n' % link[1].lower())
description_file.write('%s\nhttp://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/%s.wmv\n\n' % (link[0].lower(), link[1]))
finally:
links_file.close()
description_file.close()

and for the lazy person, here are the two files

mix09_title.txt

day one keynote
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/KEY01.wmv

day two keynote
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/KEY02.wmv

microsoft asp.net 4.0 data access: patterns for success with web forms
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T47F.wmv

protecting online identities
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T27F.wmv

using dynamic languages to develop microsoft silverlight applications
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T22F.wmv

developing and deploying applications on internet information services (iis)
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T57F.wmv

building a rich social network application
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T35F.wmv

cloud computing: what's in it for me?
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T32F.wmv

escaping flatland in application design: rich user experiences
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C11F.wmv

advance your design with ux design patterns
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T30F.wmv

microsoft silverlight and windows presentation foundation (wpf): sharing skills and code
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T87F.wmv

simplifying distributed access control with microsoft .net services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T02F.wmv

caching rest with windows communication foundation
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T64M.wmv

introducing the microsoft virtual earth silverlight map control ctp
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T34F.wmv

deep zoom++ : build dynamic deep zoom applications with open source
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C07F.wmv

modeling restful data services: present and future
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T36F.wmv

state of the art in web site design on microsoft sharepoint
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C20F.wmv

creating a "next generation" e-commerce experience
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T55F.wmv

building microsoft silverlight controls
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T16F.wmv

there's a little scripter in all of us: building a web app for the masses
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T62F.wmv

building data-driven scalable ajax web pages
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T63M.wmv

high-speed ria development with the microsoft silverlight toolkit
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T15F.wmv

adding microsoft silverlight to your company's skill set
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T29F.wmv

designing the windows 7 desktop experience
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C26F.wmv

web form design
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C17F.wmv

building high performance web applications and sites
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T53F.wmv

the way of the whiteboard: persuading with pictures
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C16F.wmv

build applications on the microsoft platform using eclipse, java, ruby and php!
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T58F.wmv

touch and gesture computing, what you haven't heard
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C15F.wmv

how i learned to stop worrying and love the microsoft ado.net entity framework
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T80M.wmv

oomph: a microformat toolkit
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T77M.wmv

user experience design for non-designers
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C30M.wmv

effective infographics with interactivity
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C29M.wmv

ten ways to ensure ria failure
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C06F.wmv

optimizing performance for microsoft expression encoder
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T70M.wmv

automated user interface (ui) testing with microsoft visual studio team system 2010
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T83M.wmv

what's new for microsoft silverlight and microsoft windows presentation foundation (wpf) developers in microsoft visual studio 2010
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T73M.wmv

standards for aggregating activity feeds and social aggregation services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T28F.wmv

file|new -> company: creating nerddinner.com with microsoft asp.net model view controller (mvc)
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T49F.wmv

offline network detection in microsoft silverlight 3
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T78M.wmv

deep dive into microsoft silverlight graphics
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T17F.wmv

delivering media with internet information services 7 (iis) media services and microsoft silverlight
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T56F.wmv

running php on microsoft servers and services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T21F.wmv

user experience design patterns for business applications with microsoft silverlight 3
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C21F.wmv

developing restful services and clients with "m"
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T11F.wmv

microsoft asp.net model view controller (mvc): ninja on fire black belt tips
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T44F.wmv

interaction techniques using the wii remote (and other hci projects)
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C13F.wmv

the future of microsoft expression blend
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C04F.wmv

a lap around windows internet explorer 8
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T52F.wmv

using the windows azure tools for microsoft visual studio to build cloud services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T81M.wmv

delivering ads to a silverlight media player application
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T18F.wmv

consuming web services in microsoft silverlight 3
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T42F.wmv

building scalable and available web applications with microsoft project code name "velocity"
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T59F.wmv

a lap around microsoft .net services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T01F.wmv

what's new in windows presentation foundation (wpf) 4
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T39F.wmv

what's new in microsoft sql data services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T06F.wmv

building an optimized, graphics-intensive application for microsoft silverlight
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T67M.wmv

c# for designers
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C05F.wmv

creating a great experience on digg with windows internet explorer 8
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C22F.wmv

customized live search for web and client applications
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T33F.wmv

choosing between asp.net web forms and mvc
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T23F.wmv

microsoft expression web: no platform left behind
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C03F.wmv

asp.net mvc: america's next top model view controller framework
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T50F.wmv

wireframes that work: designing (rich internet) applications
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C18F.wmv

working across the client continuum
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T13F.wmv

interactive prototyping with dhtml
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C14F.wmv

using microsoft asp.net mvc to easily extend a web site into the mobile space
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T20F.wmv

using total experience design to transform the digital building
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C08F.wmv

sketch flow: from concept to production
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C01F.wmv

microsoft asp.net: taking ajax to the next level
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T48F.wmv

microsoft xbox "lips" and "fable ii": multi channel experiences
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T31F.wmv

a website named desire
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C09F.wmv

the microsoft web platform: starring internet information services (iis) and your application
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T51F.wmv

connecting applications across networks with microsoft .net services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T03F.wmv

windows azure storage
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T08F.wmv

when errors happen: debugging microsoft silverlight
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T68M.wmv

windows internet explorer 8 in the real world: how is internet explorer 8 used
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C23F.wmv

introducing the microsoft web platform
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T82M.wmv

protecting against internet service abuse
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T74M.wmv

five killer scenarios for the windows live messenger web toolkit
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T75M.wmv

scaling a rich client to half a billion users
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/B01M.wmv

microsoft silverlight is ready for business
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T69M.wmv

search engine optimization (seo) for web developers
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T86M.wmv

lighting up web and client applications with microsoft live services
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T76M.wmv

copyright laws for web designers and developers
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/B03M.wmv

improving mobile experiences with the microsoft mobile device browser file
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T85M.wmv

exposing web content to a global audience using machine translation
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/B05M.wmv

a shot of windows live messenger and a pint of microsoft silverlight
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T84M.wmv

how razorfish lights up brand with microsoft sharepoint
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C19F.wmv

securing web applications
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T54F.wmv

restful services for the programmable web with windows communication foundation
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T10F.wmv

extending your brand to the desktop with windows 7
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T37F.wmv

<3 the new windows live messenger web toolkit for social websites
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T26F.wmv

what's new in microsoft silverlight 3
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T14F.wmv

overview of windows azure
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T07F.wmv

see through the clouds: introduction to the azure services platform
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T38F.wmv

microsoft asp.net 4.0 : what's next?
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T46F.wmv

principles of microsoft silverlight animation
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T12F.wmv

software entrepreneurs: go big with bizspark
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/B02M.wmv

windows mobile 6.5 overview
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T61F.wmv

live framework and mesh services: live services for developers
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T05F.wmv

building web applications with windows azure
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T09F.wmv

how'd they do it? real app. real code. two weeks. nothing but .net
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T79M.wmv

integrating microsoft expression blend with adobe creative suite
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C28M.wmv

building accessible rias in microsoft silverlight
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T65M.wmv

building out of browser experiences with microsoft silverlight 3
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T45F.wmv

enhancing large windows media platforms with microsoft silverlight
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/B04M.wmv

the microsoft web sandbox: an open source framework for developing secure standards-based web applications
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T24F.wmv

go beyond best practices: evolving next practices to prosper in the 21st century
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C12F.wmv

improving ux through application lifecycle management
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C02F.wmv

microsoft silverlight media end-to-end
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T43F.wmv

creating interactivity with microsoft expression blend
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C27M.wmv

design prototyping: bringing wireframes to life
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C10F.wmv

measuring social media marketing
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/C24F.wmv

building microsoft silverlight applications with eclipse
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T66M.wmv

making xml really, really easy with microsoft visual basic 9
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T72M.wmv

.net ria services - building data-driven applications with microsoft silverlight and microsoft asp.net
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T41F.wmv

mesh-enabled web applications
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T04F.wmv

going inside microsoft silverlight: exploring the core clr
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T71M.wmv

creating media content for microsoft silverlight using microsoft expression encoder
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T19F.wmv

building amazing business centric applications with microsoft silverlight 3
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T40F.wmv

web development using microsoft visual studio: now and in the future
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/T25F.wmv

mix09_links.txt

http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/key01.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/key02.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t47f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t27f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t22f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t57f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t35f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t32f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c11f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t30f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t87f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t02f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t64m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t34f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c07f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t36f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c20f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t55f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t16f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t62f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t63m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t15f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t29f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c26f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c17f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t53f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c16f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t58f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c15f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t80m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t77m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c30m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c29m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c06f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t70m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t83m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t73m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t28f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t49f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t78m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t17f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t56f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t21f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c21f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t11f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t44f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c13f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c04f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t52f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t81m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t18f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t42f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t59f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t01f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t39f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t06f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t67m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c05f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c22f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t33f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t23f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c03f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t50f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c18f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t13f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c14f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t20f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c08f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c01f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t48f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t31f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c09f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t51f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t03f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t08f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t68m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c23f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t82m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t74m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t75m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/b01m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t69m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t86m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t76m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/b03m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t85m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/b05m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t84m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c19f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t54f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t10f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t37f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t26f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t14f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t07f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t38f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t46f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t12f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/b02m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t61f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t05f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t09f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t79m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c28m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t65m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t45f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/b04m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t24f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c12f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c02f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t43f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c27m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c10f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/c24f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t66m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t72m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t41f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t04f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t71m.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t19f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t40f.wmv
http://mschannel9.vo.msecnd.net/o9/mix/09/wmv-hq/t25f.wmv

A problem that we face everyday is creating CRUD interfaced for our databases. Creating a CRUD interface is always a boring and tedious job. Even if you want to initialize your data, you may break something by mistake if you use SQL Server Management Studio, because it doesn't know anything about your business rules.

Django - A web framework for Python - gives you the solution. It has an application called "Django Admin" that provides a customizable, production-ready, nice-looking UI on top of your DB.

If you want to see the final results, see the screenshots at the end of the post.

Setting the environment

  1. Install Python 2.5 or newer from http://python.org/download/.
  2. Install Django 1.0 or newer.
    1. Download the compressed archive from http://www.djangoproject.com/download/.
    2. From the root directory, run this command in the console: python setup.py install.
  3. Download and install pyodbc from http://sourceforge.net/project/showfiles.php?group_id=162557&package_id=183492. You should install the one that is compatible with your version of Python, e.g. if you installed Python 2.5, you should select pyodbc-2.0.58.win32-py2.5.exe.
  4. Checkout django-pyodbc from http://django-pyodbc.googlecode.com/svn/trunk/ using a Subversion client, then you should move the directory sql_server to C:\Python25\Lib\site-packages\.

Creating the Django project

A Django application is a complete component, including the DB model, views and templates. Good examples of Django application are user registration, tagging, search, etc. You can find a lot of reusable applications on http://djangoplugables.com/.

A Django project is a group of application that works together.

Now you have the environment setup for Django. The next step is creating a new Django project. On the console, write this command

C:\Python25\Lib\site-packages\django\bin\django-admin.py startproject sqlserveradmin

Then create an application using this command:

manage.py startapp mydb

To add the application to the project. You must change INSTALLED_APPS in settings.py to include the app.

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'mydb',
)

Setting the database

Now you have the project in place. You need to modify settings.py to point to your DB. Change these fields to be

DATABASE_ENGINE = 'sql_server.pyodbc'
DATABASE_ODBC_DRIVER = 'SQL Native Client'
DATABASE_NAME = 'db_name'
DATABASE_USER = 'webapp'
DATABASE_PASSWORD = 'sikrit'
DATABASE_HOST = r'test_server\SQLEXPRESS'

Generating DB models

On the console, run the following command

manage.py inspectdb > inspected_models.py

This will generate Python models for your tables. Unfortunately, they are not arranged. To arrange them, use the script that I posted to http://www.djangosnippets.org/snippets/1203/.

rearrange_models.py inspected_models.py models.py

Use the new models.py to replace the old one in the folder mydb.

Installing the admin

To install the admin, you need to do two things

  1. Add the following line to INSTALLED_APPS in settings.py. It should look like
    INSTALLED_APPS = (
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.sites',
        'django.contrib.admin', 'mydb', )
  2. Run this command to add the tables necessary for the admin to work.
    manage.py syncdb

    It will ask you to add a superuser. This superuser will allow you to access the admin.

  3. You need to tell Django what models that you need to be viewed in the admin. For our case, we want to view all the tables. I will use a little bit of Python magic to add all the models to be viewed in the admin. Put the following code in a file called admin.py in your application folder.

    from django.contrib import admin
    from django.db.models import Model
    import models # This is your models' module
    for m in dir(models):
        class_ = getattr(models, m, None)
        if class_ and isinstance(class_, type) and issubclass(class_, Model):
            admin.site.register(class_)

Congratulations. We are done.

What you can do more

  1. Change the templates used to view the UI.
  2. Customize the names of the models and fields, for example you can supply correct pluralization.
  3. For enums, you can specify the available choices, and the admin will view it as a drop down.
  4. You can add more users to the admin, and specify their permissions.
  5. And a lot more. See http://docs.djangoproject.com/en/dev/

I hope this wets your appetite for learning Django.

Screenshots

The home page. I had to remove everything that reveals the application. As you can see, Django admin also stores a history of changes.

This is the view for students. I customized it a little bit to view students' emails, but you can customize it more.

This is the form to change the student. The "UserId" is a foreign key to the "Users" table. Django admin is smart enough to grab them for your. If you want to add a new user, you can add it by clicking the small "+" sign beside the drop down list.

This shows the screen for users in the "Auth" application (which is added by Django itself). This shows a more advanced listing: you can select the columns that will be displayed, with sorting. You can add filters (on the right), and you can add search also.

This is the form for editing users.

 

A friend told me that there is an arabic book for Python, which is a translation of "Byte of Python", one of the most popular Python books.

This is a good step toward popularizing Python, specially among children.

Please go and download the arabic version. Read it, and tell the author about any enhancements that the book needs.
Download Day 2008
If List<> inherits IList<>, and MyIdentity inherits IIdentity, then why the heck the C# compiler cannot cast from List<MyIdentity> to IList<IIdentity>??????

It is the same, the compiler is not smart enough to know this.

So to satisfy the compiler - acting as a good compiler slave - I have to write this
IList<IIdentity> returnList = new List<IIdentity>(); // A variable name cannot be stupider
foreach (var item in originalList)
{
    returnList.Add(item);
}
return returnList;
And people were wondering why dynamic languages takes less lines of code.
There are some talks lately about the next version of C#, and what is should add. People has gone too far asking for new features, most notably the dynamic lookup
 
static void Main(string[] args)
{
    dynamic
    {
        object myDynamicObject = GetDynamicObject();
        myDynamicObject.SomeMethod();         // call a method  
        myDynamicObject.someString = "value"; // Set a field
        myDynamicObject[0] = 25;              // Access an indexer
    }
}

The above looks ridiculous to me. C# is statically-typed language, and it should stay like this. Trying to add dynamic typing to it - even if it was optional - is stupid. For me, a language must establish a few basic concept and stick to them, not try to satisfy every one out there.

C# has incomplete features. These should be completed first before adding any new features. Take type inference as an example. You cannot return anonymous types from methods, because you don't know their names. It should allow something like

public anonymous MyMethod(string email)
{
    return from user in Users
           where user.Email = email
           select new { FullName = user.FirstName + " " + user.LastName };
}

It can also add named parameters, and default values for them, just like Python. It can be supported indirectly now by passing anonymous types, but complete support for them would be better.

Dynamic languages are not just about dynamic lookup, and supporting broken dynamic lookup - just like the above mentioned example - is going to be, really, broken. What about dynamically adding new methods? What about using making a class as a proxy, say, for a web service? What about object-specific members - members which exists for a specific member? It can get very complex, and the only known way to allow dynamic features is to make your language dynamic.

The beauty of the CLR, is allowing different languages to run and inter-operate. Unfortunately, it was designed with static typing in mind, which appears clearly in the BCL design. I wish the DLR team has these limitations in mind so they address them better, specially the importance of providing libraries which fits the dynamic languages way of doing things.

One language is not enough, and one language which tries to fit all purposes is going to be very complex - just like C++. The solution is learning different languages and using the appropriate one when it fits, and integrating them when you need to.

Everyone uses youtube to see his favorite videos. Most of the time, you need to subscribe to a certain user’s feed using RSS. Unfortunately, the ‘Subscribe’ buttons subscribes using their own notification system, and you have to be a member to subscribe.

Contrary to popular beliefs, youtube provides RSS feeds, but they are hidden. It’s mentioned on http://www.youtube.com/rssls that you can subscribe to a user’s feed as

http://www.youtube.com/rss/user/[insert username here]/videos.rss

And to a certain tag using

http://www.youtube.com/rss/tag/[insert tag here].rss

The question is: why did they hide this?

Finally, the long-awaited Django book is released under the GNU Free Documentation license. Everybody can learn and suggest enhancements to the book or Django.

Does Django runs with IronPython? Yes, it runs on IPCE, but I don't think that everything runs well, because the different DBMS drivers are not ported to IronPython yet.

ActiveState, the leader in dynamic languages development tools, has released the OpenKomodo intiative. OpenKomodo is targeted at creating an open source IDE for dynamic languages and the web, based on ActiveState Komodo IDE (which is proprietary).
Manning Publishing is working on the first book about IronPython, called IronPython in Action. You can download the first chapter for free. They have provided the chapters 2, 3 and 4 under their early access program.
Here at Silverkey, we use LLBLGen Pro as our ORM. One of the nicest features of it is prefetching related entities, so if you have a "CompanyEntity", you can tell it to fetch all related "Employee Entity". This makes our jobs easier, except when it doesn't!!!

Today I had a few bugs with LLBL: Trying to save an entity threw NullReferenceException deeply from inside LLBL code. Even though it worked in some circumstances, it didn't work on others. It was easy to blame LLBL, since it was the source of the exception. So instead of letting LLBL load the related entities, I loaded them myself.

This worked OK for sometime, but it started to through the same exception again. So it really appeard that the problem was not what I thought.

First, I recognized two things
  1. It happens in with a certain class, so this class was the source of the problem
  2. It happens only when I changed the objects. If I didn't change them, it works OK.
The code for saving was like this
using (Transaction transaction = new Transaction(System.Data.IsolationLevel.ReadUncommitted, "SaveCompany"))
{
    try
    {
        // Save related entities
        foreach (Employee employee in CompanyEmployees)
        {
            employee.Transaction = transaction;
            employee.Save();
        }

        // Save modified fields
        _entity.Transaction = transaction;
        _entity.Save();

        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
 }
Trying to access any member of the entity now will throw a NullReferenceException. Though the entity is not null, it will try to connect to the database using the connection of the closed transaction, which will throw the NullReferenceException.

It should be like this
using (Transaction transaction = new Transaction(System.Data.IsolationLevel.ReadUncommitted, "SaveCompany"))
{
    try
    {
        // Save related entities
        foreach (Employee employee in CompanyEmployees)
        {
            employee.Transaction = transaction;
            employee.Save();
        }

        // Save modified fields
        _entity.Transaction = transaction;
        _entity.Save();

        transaction.Commit();
    }
    catch
    {
        transaction.Rollback();
        throw;
    }
finally
{
_entity.Transaction = null;
}
 }
The lessons learnt: It's easy to blame the tools you use, but probably it is your fault.
Last Friday was the date for the 1st EgyPy meeting. Few people showed up. We discussed the release of IronPython 2 Alpha 3, IronRuby, Microsoft support for dynamic languages & DLR.
Also, Dody showed us Havana, our CMS which we built using C# & IronPython 1.1. Havana is different because
  1. Havana is not strictly a CMS. It's a content management framework with a helper interface.
  2. It supports uploading of content in zipped files
  3. Command-line interface: So you can type "zip *.jpg" and get all your .jpg images compressed in a zip file!!!
  4. It supports IronPython scripting: It's not just for designers
We discussed how Havana uses IronPython & the chances of integrating DLR with it. Writing a workflow DSL in IronRuby will be very nice Big Smile [:D]
What: 1st Egypy (Egyptian Python Users Group) meeting
Where: Cilantro Cafe in Mesaha Square, Dokki, Cairo, Egypt
When: Friday, 27th of July, 2007, 6:00 PM
Why:
  1. For the community members to know each other.
  2. To define the activities for the next months
  3. Share experience with Python
  4. Have fun Smile [:)]
If you don't know the place, it's here

For any questions, you can contact me at Attachment: email.PNG (783 bytes)
posted Wednesday, July 25, 2007 10:42 AM by tayseer | 2 Comments
Filed Under:
Attachment(s): email.PNG
I am planning to start a Python community in Egypt. Python is a high-level dynamic programming language which values programmers' productivity over machine performance.

You can register here & find the Python forum here

More Posts Next page »