Why I Hate Django
Upcoming SlideShare
Loading in...5
×
 

Why I Hate Django

on

  • 7,739 views

 

Statistics

Views

Total Views
7,739
Views on SlideShare
7,499
Embed Views
240

Actions

Likes
14
Downloads
77
Comments
0

7 Embeds 240

http://eschipul.com 200
http://lanyrd.com 20
http://www.python.rk.edu.pl 6
http://www.rkblog.rk.edu.pl 5
http://www.slideshare.net 4
https://twitter.com 4
https://python.rk.edu.pl 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Why I Hate Django Why I Hate Django Presentation Transcript

  • Why I Hate Django Cal Henderson
  • O HAI DjangoCon 2008 2
  • My happy face DjangoCon 2008 3
  • DjangoCon 2008 4
  • 2.8 billion photos DjangoCon 2008 5
  • 2.8 billion photos 1 per 2.3 people on earth 9.2 per US resident DjangoCon 2008 6
  • 35k photos/sec >2m photos/min DjangoCon 2008 7
  • Many thousand pages/sec DjangoCon 2008 8
  • Scale nerd DjangoCon 2008 9
  • Serious Language DjangoCon 2008 10
  • Wordpress Yahoo Mediawiki Facebook DjangoCon 2008 11
  • Wordpress Yahoo Delicious Digg Mediawiki Facebook DjangoCon 2008 12
  • Flamework Serious Toolset DjangoCon 2008 13
  • Flamework Flink Flint Flotos Flinderbox Flictionary Flaux Flops Flag Fleng DjangoCon 2008 14
  • Why hate Django? DjangoCon 2008 15
  • What does he even know about Django? DjangoCon 2008 16
  • Pownce DjangoCon 2008 17
  • A fucking blogging engine DjangoCon 2008 18
  • Why all the hate? DjangoCon 2008 19
  • DjangoCon 2008 20
  • DjangoCon 2008 21
  • DjangoCon 2008 22
  • DjangoCon 2008 23
  • An attack on several fronts DjangoCon 2008 24
  • An attack on several fronts The team Python Frameworks DjangoCon 2008 25
  • Django itself Performance Scalability Maintainability DjangoCon 2008 26
  • The Team DjangoCon 2008 27
  • Frameworks DjangoCon 2008 28
  • Struts DjangoCon 2008 29
  • Craig McClanahan DjangoCon 2008 30
  • DjangoCon 2008 31
  • Exhibit A : Beard DjangoCon 2008 32
  • But Struts is for suits! DjangoCon 2008 33
  • The Hot Shit DjangoCon 2008 34
  • DjangoCon 2008 35
  • Rails = Badass DjangoCon 2008 36
  • Instead? A boy band? DjangoCon 2008 37
  • DjangoCore The Album DjangoCon 2008 38
  • DjangoCon 2008 39
  • Also, a wizard Simon “Stinky” Willison DjangoCon 2008 40
  • Python DjangoCon 2008 41
  • Trendy Google! DjangoCon 2008 42
  • But not that trendy DjangoCon 2008 43
  • But not that trendy It’s no ruby DjangoCon 2008 44
  • But not that trendy It’s no ruby Or Haskell DjangoCon 2008 45
  • But not that trendy It’s no ruby Or Haskell Or Erlang DjangoCon 2008 46
  • But not that trendy It’s no ruby Or Haskell Or Erlang Or Scala DjangoCon 2008 47
  • Significant Whitespace DjangoCon 2008 48
  • DjangoCon 2008 49
  • Salmon DjangoCon 2008 50
  • Universe of marshy force. Field sense shallows the hatchery saying Hello,. World!. Hydro. Power spring sometimes; snowmelt powers snowmelt always. DjangoCon 2008 51
  • DjangoCon 2008 52
  • No quantum superpositions DjangoCon 2008 53
  • DjangoCon 2008 54
  • “-”.join(array) DjangoCon 2008 55
  • Restarting the server? WTF!? DjangoCon 2008 56
  • WSGIReloadMechanism DjangoCon 2008 57
  • “I buy my eggs at the cheese shop” - Aaron Straup Cope DjangoCon 2008 58
  • “I buy my eggs at the cheese shop” ] - Aaron Straup Cope E G A U G N A L N O O [M DjangoCon 2008 59
  • DjangoCon 2008 60
  • __import__() from future import awesome DjangoCon 2008 61
  • Basically, for hippies Scared of real OO languages DjangoCon 2008 62
  • Frameworks DjangoCon 2008 63
  • Flamework is a framework But what does that mean? DjangoCon 2008 64
  • Make common tasks: easier faster error-free DjangoCon 2008 65
  • Show a list of photos Write an API method Kill all humans DjangoCon 2008 66
  • Front-tier frameworks Act as glue DjangoCon 2008 67
  • Other Data store Services Data Model Business Logic Request Interaction Templates Dispatcher Logic Framework Users DjangoCon 2008 68
  • Great for getting started Slows you down later? What is it doing in there? DjangoCon 2008 69
  • DjangoCon 2008 70
  • DjangoCon 2008 71
  • DjangoCon 2008 72
  • Fast Easy Scalable Flexible DjangoCon 2008 73
  • Large scale is often not a good goal DjangoCon 2008 74
  • Skyscrapers are special DjangoCon 2008 75
  • Regular houses Don’t need 10 story foundations DjangoCon 2008 76
  • Just build! DjangoCon 2008 77
  • DjangoCon 2008 78
  • DjangoCon 2008 79
  • DjangoCon 2008 80
  • Everything here is possible! We care about easy DjangoCon 2008 81
  • Large Scale DjangoCon 2008 82
  • No multiple DB clusters DjangoCon 2008 83
  • Manual partitioning DjangoCon 2008 84
  • No multiple hosts per DB DjangoCon 2008 85
  • Where do we read from? DjangoCon 2008 86
  • How about now? DjangoCon 2008 87
  • How about now ? DjangoCon 2008 88
  • Read/write consistency DjangoCon 2008 89
  • Read/write consistency LAG!!1 DjangoCon 2008 90
  • Good for non-writing users (logged out) DjangoCon 2008 91
  • Non time-sensitive data Feeds Read-only APIs DjangoCon 2008 92
  • DjangoCon 2008 93
  • Cool kids use master/master pairs DjangoCon 2008 94
  • Consistent read/write 1. Write to side A 2. Read from side B 3. Replication occurs 4. FAIL DjangoCon 2008 95
  • Consistent read/write 1. Write to side A 2. Read from side A 3. ??? 4. PROFIT!! DjangoCon 2008 96
  • Then we can start to get fancy! DjangoCon 2008 97
  • Where do we read/write? DjangoCon 2008 98
  • Abstraction FTW db_query($cluster_name, $sql) DjangoCon 2008 99
  • No sharding DjangoCon 2008 100
  • WTF is sharding? All about books DjangoCon 2008 101
  • Dewey Decimal DjangoCon 2008 102
  • But it can’t do everything DjangoCon 2008 103
  • Makes some things ‘impossible’ No shard walking DjangoCon 2008 104
  • DjangoCon 2008 105
  • Django knows our models It’s possible DjangoCon 2008 106
  • If we accept constraints DjangoCon 2008 107
  • No external sequences DjangoCon 2008 108
  • Auto-incs can be bad master/master shards DjangoCon 2008 109
  • No automatic denormalization DjangoCon 2008 110
  • Counters would be easy! DjangoCon 2008 111
  • And copied fields too DjangoCon 2008 112
  • High Performance DjangoCon 2008 113
  • It’s slow! DjangoCon 2008 114
  • DjangoCon 2008 115
  • DjangoCon 2008 116
  • There are limits But they only apply When being really silly DjangoCon 2008 117
  • Sessions DjangoCon 2008 118
  • OMG UR ON CRAK DjangoCon 2008 119
  • Extra DB table A read on every page DjangoCon 2008 120
  • Lightweight = better DjangoCon 2008 121
  • Signed cookies DjangoCon 2008 122
  • No parallelization DjangoCon 2008 123
  • Multiple cache-requests DjangoCon 2008 124
  • Multiple multi-keyed reads DjangoCon 2008 125
  • Slow HTTP requests while we’re doing other stuff DjangoCon 2008 126
  • Creates dumb SQL DjangoCon 2008 127
  • foo.exclude(bar = true) WHERE (NOT (bar = 1)) DjangoCon 2008 128
  • foo.exclude(bar = true) WHERE bar != 1 DjangoCon 2008 129
  • foo.filter(bar = false) WHERE bar = 0 Indexable! DjangoCon 2008 130
  • Maintainability DjangoCon 2008 131
  • Maintainability Awesomeness DjangoCon 2008 132
  • Verbose template syntax <h1>{{ foo.bar }}</h1> DjangoCon 2008 133
  • <h1>{{ foo.bar }}</h1> <h1>{$foo.bar}</h1> 3 extra characters! DjangoCon 2008 134
  • <h1>{{ foo.bar }}</h1> <h1>{$foo.bar|e}</h1> Well almost… DjangoCon 2008 135
  • {% if edit_mode %} woo {% endif %} {if $edit_mode} woo {/if} 9 extra! DjangoCon 2008 136
  • Verbose template syntax makes people cry DjangoCon 2008 137
  • No query debugger DjangoCon 2008 138
  • >>> from django.db import connection >>> connection.queries [{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_ polls.pub_date FROM polls_polls', 'time': '0.002'}] DjangoCon 2008 139
  • >>> from django.db import connection >>> connection.queries [{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_ polls.pub_date FROM polls_polls', 'time': '0.002'}] Not good enough! DjangoCon 2008 140
  • Better, but not amazing DjangoCon 2008 141
  • DjangoCon 2008 142
  • Page summary DjangoCon 2008 143
  • Make it clickable… DjangoCon 2008 144
  • EXPLAIN is AWESOME DjangoCon 2008 145
  • And/or show the data DjangoCon 2008 146
  • MySQL Query Profiler Enough data to choke a whale DjangoCon 2008 147
  • Not smug enough DjangoCon 2008 148
  • DjangoCon 2008 149
  • DjangoCon 2008 150
  • Unreadable SQL SELECT `app_userprofile`.`user_id`,`app_userprofile`.`account_status`,`app_userp rofile`.`account_status_reason`,`app_userprofile`.`account_delete_type`,` app_userprofile`.`syndication_key`,`app_userprofile`.`blurb`,`app_userpro file`.`location`,`app_userprofile`.`country`,`app_userprofile`.`postal_code`,` app_userprofile`.`gender`,`app_userprofile`.`theme`,`app_userprofile`.`tiny _photo`,`app_userprofile`.`small_photo`,`app_userprofile`.`smedium_pho to`,`app_userprofile`.`medium_photo`,`app_userprofile`.`large_photo`,`ap p_userprofile`.`orig_photo`,`app_userprofile`.`bday_month`,`app_userpro file`.`bday_day`,`app_userprofile`.`bday_year`,`app_userprofile`.`is_pro`,`a pp_userprofile`.`privacy_settings_id`,`app_userprofile`.`email_settings_id `,`app_userprofile`.`preference_settings_id`,`app_userprofile`.`ad_counte r`,`app_userprofile`.`num_friends`,`app_userprofile`.`num_fans`,`app_user profile`.`num_feeds`,`app_userprofile`.`num_blocked_fans`,`app_userpro file`.`num_friend_requests`,`app_userprofile`.`default_set_id`,`app_userpr ofile`.`invite_id`,`app_userprofile`.`invite_round`,`app_userprofile`.`avail_in vites`,`app_userprofile`.`original_email` FROM `app_userprofile` WHERE (`app_userprofile`.`user_id` = 1) DjangoCon 2008 151
  • Unreadable SQL SELECT * FROM `app_userprofile` WHERE `user_id` = 1 DjangoCon 2008 152
  • SELECT * is fast! Faster over the wire Faster to parse Easier to debug DjangoCon 2008 153
  • Unreadable SQL SELECT `app_note`.`id`,`app_note`.`type`,`app_note`.`body`,`app_note `.`sender_id`,`app_note`.`date_sent`,`app_note`.`num_recipie nts`,`app_note`.`recipient_type`,`app_note`.`set_id`,`app_not e`.`direct_to_id`,`app_note`.`media_file_id`,`app_note`.`url`,`a pp_note`.`url_inline`,`app_note`.`url_clicks`,`app_note`.`embe d_id`,`app_note`.`event_id`,`app_note`.`is_direct`,`app_note`.` is_public`,`app_note`.`is_deleted`,`app_note`.`is_ad`,`app_no te`.`reply_to_id`,`app_note`.`forwarded_from_id`,`app_note`.` original_note_id`,`app_note`.`stars`,`app_note`.`rsvp` FROM `app_note` LEFT OUTER JOIN `app_userprofile_notes` AS `m2m_app_note__recipients` ON `app_note`.`id` = `m2m_app_note__recipients`.`note_id` WHERE ((NOT (`app_note`.`is_deleted` = True)) AND `m2m_app_note__recipients`.`userprofile_id` = 17573) ORDER BY `app_note`.`date_sent` DESC LIMIT 16 DjangoCon 2008 154
  • Unreadable SQL SELECT n.* FROM app_note AS n LEFT OUTER JOIN app_userprofile_notes AS l ON n.id=l.note_id WHERE n.is_deleted = False AND l.userprofile_id=17573 ORDER BY n.date_sent DESC LIMIT 16 DjangoCon 2008 155
  • Django makes me scared of joins DjangoCon 2008 156
  • Actually, JOINs are evil DjangoCon 2008 157
  • DjangoCon 2008 158
  • Low version number DjangoCon 2008 159
  • DjangoCon 2008 160
  • DjangoCon 2008 161
  • Suspiciously small Django: 105 klocs Flamework: 260 klocs DjangoCon 2008 162
  • Suspiciously small Very long lines? DjangoCon 2008 163
  • Can’t pluralize octopus DjangoCon 2008 164
  • Commit all fields at once DjangoCon 2008 165
  • Race conditions! DjangoCon 2008 166
  • Dirty flags DjangoCon 2008 167
  • Don’t make Malcolm cry DjangoCon 2008 168
  • No simple way to inc/dec DjangoCon 2008 169
  • UPDATE foo SET x=x+1 Makes consistency hard! DjangoCon 2008 170
  • Character encoding Input validation? DjangoCon 2008 171
  • Character encoding Input validation? (Probably broken) DjangoCon 2008 172
  • No mascot!?! DjangoCon 2008 173
  • Echidna? DjangoCon 2008 174
  • MAGICAL POWERS DjangoCon 2008 175
  • No deployment system DjangoCon 2008 176
  • Extending models Tables are never big enough DjangoCon 2008 177
  • Model changes manage.py reset appname DjangoCon 2008 178
  • django-evolution dmigrations DjangoCon 2008 179
  • What’s django done for you lately? DjangoCon 2008 180
  • thanks (now go make it better)
  • Photo credits flickr.com/photos/wilson/18685396/ flickr.com/photos/sharynmorrow/2571566304/ • • flickr.com/photos/uhop/105063089/ flickr.com/photos/florathexplora/286035943/ • • flickr.com/photos/plasticbag/91453376/ flickr.com/photos/webguru4god/2233500779/ • • flickr.com/photos/zenoc/1408162618/ flickr.com/photos/emdot/195189924/ • • flickr.com/photos/subinev/27810058/ flickr.com/photos/kayepants/391645870/ • • flickr.com/photos/kaptainkobold/2531797176/ flickr.com/photos/ppowers/793939285/ • • flickr.com/photos/esti/243781036/ flickr.com/photos/dinesh_valke/425540358/ • • flickr.com/photos/oneras/253617128/ flickr.com/photos/hawkexpress/306276212/ • • flickr.com/photos/josefstuefer/72512671/ flickr.com/photos/cedric1981/383614033/ • • flickr.com/photos/pgoyette/168076182/ flickr.com/photos/macspite/1118042091/ • • flickr.com/photos/paulhammond/2825869449/ flickr.com/photos/jpstanley/1440357613/ • • flickr.com/photos/nez/378348754/ flickr.com/photos/ashclements/248887492/ • • flickr.com/photos/calevans/2265863104/ flickr.com/photos/kecko/1876479840/ • • flickr.com/photos/mbiddulph/416190643/ flickr.com/photos/difusa/131100622/ • • flickr.com/photos/obliterated/2249663391/ flickr.com/photos/amagill/378984660/ • • flickr.com/photos/salim/67753003/ flickr.com/photos/bea_k63w-wa/2466009108/ • • flickr.com/photos/sosalem/2816909110/ flickr.com/photos/namullim/2096115820/ • • flickr.com/photos/radiorover/324193883/ flickr.com/photos/lotterymonkey/175248733/ • • flickr.com/photos/nickwheeleroz/2773776799/ flickr.com/photos/13519089@N03/1380483002/ • • flickr.com/photos/rse/22972901/ flickr.com/photos/gswj/10344097/ • • flickr.com/photos/rougerouge/534615363/ flickr.com/photos/deanj/67607256/ • • flickr.com/photos/hawkexpress/386355092/ flickr.com/photos/malias/2218694639/ • • flickr.com/photos/escalla/438817719/ flickr.com/photos/clintjcl/120760767/ • • flickr.com/photos/mknightphoto/2295688304/ flickr.com/photos/grandpamikey/2228239585/ • • flickr.com/photos/petereed/138369750/ flickr.com/photos/lea/2829752510/ • • flickr.com/photos/superamit/196481424/ • DjangoCon 2008 182
  • More photo credits flickr.com/photos/simon999/2419051858/ flickr.com/photos/jordanroher/228435564/ • • flickr.com/photos/tonyjcase/2172060723/ flickr.com/photos/tambako/2524829095/ • • flickr.com/photos/heypaul/1428681/ flickr.com/photos/66132721@N00/2725908636/ • • flickr.com/photos/swisscan/2308034084/ flickr.com/photos/freeparking/1279927021/ • • flickr.com/photos/apollonia666/310793656/ flickr.com/photos/drurydrama/1352506223/ • • flickr.com/photos/bdorfman/15846725/ flickr.com/photos/mn_francis/397620193/ • • flickr.com/photos/wishymom/566394520/ flickr.com/photos/dramaqueennorma/273371415/ • • flickr.com/photos/jgarber/121886004/ flickr.com/photos/chasqui/2338990305/ • • flickr.com/photos/eole/380316678/ flickr.com/photos/cityhunter12/2574288725/ • • flickr.com/photos/917press/1940509163/ flickr.com/photos/akbuthod/1508537255/ • • flickr.com/photos/wallyg/476718069/ flickr.com/photos/nunoforos/2811186142/ • • flickr.com/photos/biwook/390088839/ flickr.com/photos/marcusjb/432600086/ • • flickr.com/photos/bdjsb7/1674027307/ flickr.com/photos/12495774@N02/2405297371/ • • flickr.com/photos/naveenroy/314965221/ flickr.com/photos/larimdame/572477975/ • • flickr.com/photos/wyldkyss/2757474674/ flickr.com/photos/harryharris/1525946537/ • • flickr.com/photos/orinrobertjohn/409812627/ flickr.com/photos/davemorris/91808851/ • • flickr.com/photos/candiedwomanire/1651870/ flickr.com/photos/aplumb/121285138/ • • flickr.com/photos/dalvenjah/408497650/ flickr.com/photos/peebot/825451566/ • • flickr.com/photos/krikit/2657457178/ flickr.com/photos/reillyb/2216541900/ • • flickr.com/photos/w5nyv/2370344/ flickr.com/photos/steffe/423086866/ • • flickr.com/photos/jordanfischer/72510316/ flickr.com/photos/ciordia/255983919/ • • flickr.com/photos/tedsblog/91531710/ flickr.com/photos/wwworks/2472230611/ • • flickr.com/photos/celesterc/1069893367/ flickr.com/photos/pnoid00/1909096140/ • • flickr.com/photos/spacematters/766372252/ flickr.com/photos/jurvetson/2229899/ • • flickr.com/photos/esti/147733640/ flickr.com/photos/foxypar4/766801643/ • • flickr.com/photos/rbp/2833593771/ flickr.com/photos/wizardhere/2413404079/ • • DjangoCon 2008 183
  • these slides are online: iamcal.com/talks DjangoCon 2008 184