Django in Journalism

By • Djangocon in Mountain View

Recording

Show the timestamped transcript
  1. Next up, we have our second panel of the day.
  2. The panel is on journalism with Django, which is obviously where Django came from.
  3. So please introduce our panelists, who I believe will then be introducing themselves.
  4. Hello, everybody, once again.
  5. Because Django came out of a journalism environment, probably for that reason, it's had some uptake
  6. in the journalism world, and we thought it would be interesting to get the perspective
  7. of that one type of Django user and how they use it, how they think it can be improved,
  8. and just any other thoughts they have.
  9. So we have a number of illustrious journalists who use Django here, and they're all going
  10. to introduce themselves.
  11. First, Ben.
  12. Hi, my name is Ben Welsh, and I work at the Los Angeles Times, where we do some database
  13. projects for the web, and before that, I worked in D.C. at the Center for Public Integrity
  14. and kind of came into it through the investigative journalism world like Matt here.
  15. I guess that's my introduction.
  16. I'm Matt Waite.
  17. My title is News Technologist at the St. Petersburg Times, which is to say, if anybody
  18. knows what the hell I do, I'd love to know, you can tell me later.
  19. I've used Django for a little over a year now, I've launched two sites.
  20. My first project, still online, is a project called PolitiFact, which fat checks presidential
  21. candidates.
  22. What's the second?
  23. I'm sorry?
  24. What's the second project you've done?
  25. Oh, it was a, we just launched it, it was a real estate, neighborhood-based real estate
  26. site, where you can, if you live in the Tampa Bay area, you can get a somewhat ridiculous
  27. amount of detail about how houses are selling and for how much in your very small micro
  28. neighborhood.
  29. Cool.
  30. And Ben, you didn't mention any projects that you'd worked on, so could you just, really
  31. quickly?
  32. We've only been doing Django at the LA Times for, since I think about Memorial Day, and
  33. we've put out three apps since then.
  34. The first was, we ripped off one of yours, we did a Memorial Day thing about California
  35. servicemen and women who died in Iraq and Afghanistan.
  36. We also did dog registrations in Los Angeles, so you could see the most common dogs or look
  37. up your name and see where they're at and what the most common breeds are, goofy stuff
  38. like that.
  39. And then this week, we put out, on a very tight deadline, I'm proud to report, the
  40. new school scores here in the state of California, so you could see how your local school's doing
  41. or compare them across the state.
  42. Cool.
  43. My name is Maura Chase, and I work at the Atlanta Journal of Constitution, which, if
  44. you don't know, that was actually where Adrian worked first, but that's another story.
  45. I've worked there for about a year, and I've been using Django for about two years.
  46. We don't have, we have a kind of a separate CMS, we don't have Ellington or anything,
  47. so we build more kind of like site enhancements and special projects in Django.
  48. Probably our biggest thing is we do all the photo galleries on the site, they get lots
  49. of traffic, people love to look at photos.
  50. And I'm Matt Croydon, I'm development manager at Media for Media, which is the shiny new
  51. name for World Online.
  52. You know, obviously we're associated with the journal World, birthplace of Django, and
  53. I've been involved a lot with both the development of Ellington, our content management system,
  54. and also a lot of database journalism, data visualization projects for and with the newsroom.
  55. All right, so as I mentioned at the beginning, we're putting this together, putting this
  56. panel together because Django came out of this journalism environment.
  57. I wanted to get your thoughts.
  58. Are you using Django because it came out of a journalism environment, or would you have
  59. found it otherwise?
  60. Do we have like extra cred in that world, in your opinion?
  61. Does it matter?
  62. How does it help us?
  63. How does it hurt us?
  64. What do you think?
  65. I don't think I should be answering this, so I'm going to pass it off.
  66. Yeah, Matt doesn't really have a choice.
  67. I think that I actually used Django before I worked at the paper.
  68. So I came from Django from a non kind of paper background.
  69. I think that, I mean, kind of both.
  70. It definitely has extra credit, because it came out of newspapers, and everyone knows
  71. about Django and they know about the Lawrence Journal world, so there's obviously great
  72. reasons to use Django besides that fact, but I think that's definitely a big deal.
  73. I agree.
  74. I think it's evolving.
  75. I think it is both.
  76. I think it started out as, hey, some other newspaper made this, let's check it out.
  77. I joke that the reason that the newspaper people use Django is slug fields, because
  78. it harkens back to hot type.
  79. I mean, when people set type and put it there were slugs that they use, so that's like comfort
  80. food to us.
  81. Oh, look, slug's weed.
  82. I have seen, just to interrupt, I have seen an uptake in usage and awareness of the term
  83. slug, like since Django has been released in random blogs, but...
  84. It's like home cooking.
  85. Can we swap in TK for null at some point?
  86. That one's before my time.
  87. Long story.
  88. But I would say that the answer to that is a resounding yes, and it may not necessarily
  89. always be for the best reasons.
  90. How do ideas spread?
  91. How do memes happen?
  92. I mean, there's a degree to which that there's, it's kind of a bad phrase to use, but almost
  93. a cult of personality that kind of happens to a certain degree, where within the journalism
  94. world there's this knowledge among managers and among people who run the organizations
  95. that they need to change, but a lot of them don't really know how, or what that change
  96. should look like, or how it should take shape.
  97. And I think when there are people within the journalism community who are at least attempting
  98. to articulate some version of an alternative or a future, I think that it has more credibility
  99. than it would comes for outside.
  100. So I think when Adrian or Rob Curley or whoever shows up on Romanesco saying, this is one
  101. version of the future, or what I think a possibility for the future could be, I think that that
  102. carries a lot more credibility than, or it just has a greater chance of propagating itself.
  103. Another thing that I would mention, and we'll probably talk about this more in a little
  104. bit, the admin, the auto admin, is just a killer feature for a newsroom because of deadlines
  105. and it's there, and you get people putting in data right away for free.
  106. So that's a, yeah, go ahead.
  107. Deadlines in a matter of hours.
  108. I mean, yeah, the admin makes that, what I was going to say, when they get the reels
  109. that go into Ben's point, is that newspaper editors tend to be more fad conscious than
  110. a gang of tweens at a mall.
  111. So one person makes something work, they're going to chase it like a herd of kids.
  112. I saw an amazing slide at a presentation at another conference where it was a picture
  113. of six year olds playing soccer, and they all bunched around the ball and they just
  114. chased the ball around like this little mass of kids just chasing the ball around the field.
  115. Journalism.
  116. Yeah.
  117. It's pretty much right there.
  118. But I mean, and that's flip, and I in a sense agree with it, but I mean that also is an
  119. opportunity for everybody in this room to do something because you have an audience
  120. of potential customers who will give you money to do things for them and to come up
  121. with cool stuff and also be able to put that on a platform where a lot of people will see
  122. it, which is, I mean, that's a lot of fun.
  123. And so there's opportunities for, I think, products made out of Django or made from Django
  124. or I don't know what, to be sold to the newspaper audience because there's competitor products
  125. that are being sold now that suck and you guys could kick them, you guys could take
  126. over.
  127. Like Caspio.
  128. So, Matt, what was the quickest turnaround ever for a journalism Django project that
  129. you'd made?
  130. Four hours.
  131. When Hurricane Fay looked like it was going to come straight up our tailpipe, I noticed
  132. that what the newsroom was doing was taking all of this structured information and just
  133. dumping it in a blog and they were doing it at such a volume that important information
  134. like which hurricane evacuation shelters were open was rocketing down the list.
  135. I mean, this is a chronological order blog.
  136. These shelters are opening.
  137. That's a life or death thing and in half an hour, an hour, it's six posts down the line
  138. and it's gone and you can't find it anymore.
  139. So that bothered me, so I sat down and just quick banged out an app in Geojango actually
  140. that mapped out where the hurricane evacuation shelters were so you could see where they
  141. were and which one was the closest one to you and the admin allowed the clerks to just
  142. start punching in the data and turned out that Fay turned away from us and we never
  143. got to use it.
  144. So, yeah, I built one in four hours that nobody ever saw.
  145. The other Matt?
  146. I mean, for the longest time, we had the sort of running gag at work of, you know, we'd
  147. talk about an idea over lunch and by the end of the day, it was launched and, I mean,
  148. that's pretty common for both the, you know, short turnaround stuff staying up all night
  149. to get something done for the next day's paper or the next day's news cycle but also just,
  150. you know, trivial little things, hey, this would be fantastic, let's do it, oh, it's
  151. done by the end of the day.
  152. Any particular examples?
  153. Sorry, I'm blanking.
  154. No problem at all.
  155. Have you guys generally found that the workflow is create your models, stick some reporters
  156. loose on the admin and then they're putting in data while you're working on the views
  157. and the templates?
  158. Yeah, definitely.
  159. It seems like at the general world, we're sort of shifting from, you know, here's my
  160. data, let's model it in Django apps and, you know, unleash the reporter in the admin.
  161. These days, we're doing a lot more, you know, looking at the structured data ahead of time,
  162. you know, get it in a Google Docs or, you know, so that we can get to it via CSV and
  163. then doing, you know, automated imports or, you know, providing tools for if it's just
  164. a real simple, you know, tabular or, you know, one thing over time, you know, we have tools
  165. that don't necessarily require as much programmer intervention as it used to.
  166. Right, right.
  167. Ben, how are things at the LA Times?
  168. Well, I think the admin came in really handy when we did the Memorial Day project about
  169. casualties in the war where we hadn't done any Django projects before and it was sort
  170. of I had to sell people on letting us do this and one of the things that made me comfortable
  171. that we could do it on a tight deadline in a couple of maybe three weeks when it required
  172. a lot of additional entry and modification of the source data was that I knew that on
  173. day one, once I had the models up, I could have someone totally independent of me doing
  174. all that work while the web development was happening and that is, I mean, just a huge
  175. advantage.
  176. I mean, I'm sure people here in other circumstances are familiar with that advantage but, I mean,
  177. it's something that is just peculiarly suited to a newsroom, you know, when things just
  178. come up quickly and you have to do it, you know, if there was just umpteen examples of
  179. how you could work with it but I agree.
  180. So journalists are probably some of the stupidest people technologically who use Django admins.
  181. Are they taping this?
  182. So I'm wondering what your experience has been in showing journalists and reporters
  183. the admin just in general.
  184. How does it go?
  185. We'll go over with them.
  186. On that note, one of my favorite jokes is both Matt and I come out of the investigative
  187. journalism world where computers were adopted in like the late 70s and early 80s by some
  188. forward thinking guys who just wanted to do more sophisticated analysis.
  189. So you want to do like some social science, like heavy duty, like let's get at the data
  190. from the local courthouse or whatever.
  191. They learned how to do it and both of us kind of came up trained in that world which kind
  192. of naturally bridged into this.
  193. And the really awkward phrase for people to do that which just sounds very antiquated
  194. today but is a computer assisted reporting which is you know, and I always make the joke
  195. that it's still around today and it's still used very frequently in our world and it's
  196. almost kind of embarrassing for us, at least for me it is, because I always think you never
  197. hear today of a computer assisted photographer or a computer assisted architect.
  198. You know, it's only in the field of journalism where you still manage to distinguish yourself
  199. by using Excel but Django has made inroads just in the short period of time we've used
  200. it with people who aren't necessarily that savvy.
  201. I mean, it's easier to use as an admin than our CMS or for people who approve comments
  202. on our sites they use it and they all seem to like it.
  203. And one of my things I'm most proud of or is just so great is one of the Metro editor
  204. who I worked with on the Worded thing is not someone who is not very webby but who's open
  205. to change and who wants to do things and who really has been I think rewarded by the process
  206. of this project.
  207. And she came up to me the other day and she said, you know, I'm really looking for something
  208. else for us to jangify, you know?
  209. And to me that just felt like a huge victory.
  210. Yeah, I think the admin feels sort of immediately at home for anyone who's spent any time on
  211. the internet and so that at our organization the only time that we run into trouble with,
  212. you know, this is the admin, this is what it does as someone who's just completely unfamiliar
  213. with computers or has a very limited experience with them.
  214. So anybody else, it's just like riding a bike.
  215. When it comes to the admin, I mean, the greatest thing that ever happened for users of the
  216. admin is like Hotmail.
  217. I tell people if you've used a web-based email account, you can use the admin.
  218. You will survive.
  219. It's just a couple of boxes and you hit save and you're done.
  220. I have never, I haven't had a single problem with anybody who went, oh, I don't know what
  221. I'm doing.
  222. I don't know what I'm doing.
  223. I mean, the web is so permutated society now that just a simple form, you know, people
  224. run into them all the time and that's pretty much what the admin is, is a simple form.
  225. And you actually, as far as how it could be improved, you actually find people asking
  226. for improvements similar to things they see on more advanced web applications like they'll
  227. say, gee, could I moderate all these comments in a batch like from the main screen or, you
  228. know, when you're dealing with the inline changes and all that which I haven't had a
  229. chance to work with 1.0 much yet but I'm told that there's improvements there.
  230. I think we have, you know, a CMS and the Django admin is a lot easier to use than our
  231. paper CMS.
  232. So people generally like it.
  233. One of the things that I think that Django developers don't always do is even before
  234. new forms admin, there's a lot of customizations that you can do to make it easier for people
  235. to enter things, just grouping fields, help text, things like that.
  236. So Maura, before we got on stage, you were talking about how you did some training of
  237. the admin?
  238. Oh, no.
  239. I actually haven't done this yet but my idea was to do a screencast or some training and
  240. just basically talk about the Django admin fields apart from any particular app, just,
  241. you know, these are the different fields that you'll encounter, you know, a foreign key,
  242. you know, many to many.
  243. If it's bold, then it means it's required, if it's not bold, it's not required, that
  244. kind of thing.
  245. Right.
  246. I'm wondering whether we should somehow package that up in a generic fashion, like the, here's
  247. this, like a, you know, walk through one page at a time, here is a required field that's
  248. in bold.
  249. Boom.
  250. And maybe it's like customized for your data.
  251. Right.
  252. Do you think that would be useful?
  253. I think that would be incredibly useful.
  254. I think that because I'm so familiar with the Django admin, I just, there's probably
  255. a lot of things that you kind of take for granted that you already know when you look
  256. at it that maybe someone new to it, it's not as obvious to them.
  257. If you teach them, it's like teaching them to fish, kind of, instead of, you know, giving
  258. them food.
  259. What are the top admin features that you'd like to see?
  260. Other than multiple deletion.
  261. Oh, damn it.
  262. It's perfect.
  263. All right.
  264. Next question.
  265. Well, I kind of bumbled on this in our earlier conversations, but I don't really know how
  266. to articulate it either.
  267. I mean, one of the problems of dealing with data that is in some senses peculiar to journalism
  268. or is just very commonly found within journalism, if not unique to it, is that you're almost
  269. always starting with some sort of third party data as like your beginning point, like you're
  270. starting with the school scores data that's released by the state of California.
  271. And so there's a series of like cleanup and migration and transformation stuff that you
  272. almost always have to do when you're dealing with government data just to do the analysis
  273. to write the story, let alone to build a new web application based on the data.
  274. And those things just recur and happen in virtually every project.
  275. And now since Django is so easy, I actually spend much more time preparing the data than
  276. I actually do developing it for the website.
  277. And those tasks are things I'm sure people are familiar with, which is just very simple
  278. things often standardization of mutations and parent-child relationships where you
  279. still want to maintain the initial relationship that was in the data as you got it from the
  280. source.
  281. But for the purposes of, say, a web application or analysis, you want to combine two nominative
  282. categories, say, like where in the school's data there's a city field in the address that
  283. the state provides and is commonly filled with misspellings and other problems that
  284. you don't necessarily want to eliminate because you need to maintain the integrity of the
  285. data should you ever need to go back to it.
  286. But you'd like to be able to easily and to be able to do things like that in the admin
  287. where that could be deputized to someone else while the programmer gets to do the programming
  288. stuff rather than going through 60,000 dog breed names like I had to do and get all the
  289. combinations of the things handwritten in the form by the guy who filled it out, you
  290. know, would be a huge boon.
  291. What's the data model like for the dog names thing?
  292. It's actually very simple, the ultimate, what I did is I, since Los Angeles, every
  293. block having just launched in LA, I'm sure you're familiar with some of the problems
  294. of gathering public data in LA and one of them is that the bureaucratic topography,
  295. I guess that you would call it, is just very fragmented.
  296. It's like, so if you're doing every block San Francisco, I mean, there's essentially
  297. one city authority that maintains and centralizes all the stuff.
  298. It's, you know, not unlike a small European country, say, like Sweden or France or something
  299. where you just go to the government office for each thing and get it, but in Los Angeles
  300. you have LA City and you have LA County and you have Santa Monica and you have West Hollywood
  301. and you have Pasadena and you have Long Beach and you have all these places and they all
  302. have their own police departments and they all have their own, like public health is
  303. something that was more centralized.
  304. I think you guys probably had an easier time with that for like restaurant inspection,
  305. but it varies from source to source and so, say, for the dog's data, it was, like when
  306. I first moved to LA, I knew I was going to have to learn all this fragmented bureaucracy,
  307. so let's just start putting in public information requests and try to learn LA County.
  308. And I think that that set ended up being maybe 10 different public information requests that
  309. came back in different CSV files, which I then combined into one large table, which
  310. I did sort of the cleaning and the standardization process on, which then once that was complete,
  311. was migrated into a Django app afterward, but if all that stuff, the standardization
  312. that I ended up having to do through SQL and could have been done within the admin
  313. by someone else, it would have saved a ton of time and labor.
  314. That would be a cool feature, like it's sort of along the same lines as multiple deletion.
  315. It's like multiple changing, like if you have John and Johnny and you want to combine those,
  316. like filter, show me all the John and Johnny and just like, okay, change them all definitively
  317. to John, boom, that would be really, really cool.
  318. That's just welcome.
  319. So Matt, wait, you've on Twitter and on your blog in various places always made self-deprecating.
  320. I'm just a journalist, you know, I'm not a programmer, but Django helps me be productive.
  321. Why do you think Django lets you be productive?
  322. A couple of reasons, first of which being Python, being the first language that I actually
  323. started to learn and actually learned it.
  324. You know, I'm a knuckle-dragging, mouth-breathing, land-grant graduate from the Midwest, liberal
  325. arts major, who, you know, the toughest class I took in college was like, you know, 18th
  326. century English literature.
  327. So I had no experience with programming, got into database journalism like Ben was describing
  328. and I realized, you know, maybe I ought to learn a scripting language.
  329. So people around me that I respected were all talking about Perl, you could do all kinds
  330. of crazy stuff in Perl and I'm like, okay, I'll give Perl a shot and about three days
  331. later I'm like, oh, hell with that.
  332. So then a couple other guys I knew, they were like, yeah, we use PHP to do stuff.
  333. I'm like, okay, I'll try PHP, again, three days later, oh, hell with that.
  334. I'll never get that.
  335. Python was the first language I actually tried and it was like, okay, I want to do this.
  336. And very early on it was like, well, I don't know how to express that.
  337. Maybe it should be like this.
  338. Oh, my God, it worked.
  339. It just, for some reason, kind of the Python syntax is kind of the way I thought it should
  340. be.
  341. And it just did.
  342. A lot of times it was just, I was a little bit off and it was just a process of learning.
  343. But the learning curve for me on Python was a lot, lot less steep than it was for any
  344. of the half a dozen other things I've tried.
  345. Which made Django a lot easier for me because, you know, I know SQL pretty well.
  346. So I could look at view syntax and go, okay, I know what this is doing.
  347. And it just kind of was like, it just kind of went from there.
  348. The discussion earlier, somebody finally put a name to the way that I learned Django, which
  349. was the Z-shaped learning curve, where I ran right up against that wall and bounced off
  350. it hard, kind of went backwards and then started going up again.
  351. And I've described it to other people who are trying to learn Django as kind of a rollercoaster
  352. of learning curves.
  353. You get going up, up, up, up, up, and then you hit the top and you're like, holy crap,
  354. I can do something!
  355. And then you go back up again and you just repeat over and over again until one day you
  356. wake up and you say, oh, I'm going to implement this.
  357. And you implement it and it works just that fast.
  358. Just like that.
  359. It works as you thought about it in your head and you realize, holy crap, the world has
  360. just opened up to me.
  361. That was kind of the process of me learning Django, which is just, I think it should do
  362. this and I think it should be this way and oh my god, it worked that way.
  363. So I don't know, dumb luck, I guess.
  364. I think it's really significant that we've got people on this panel that sort of come
  365. from both sides.
  366. We have journalists that happen to program because of Django and we have programmers
  367. that happen to be into journalism and have learned a lot about journalism because of
  368. Django.
  369. I don't know what it is, but I think it's significant that sort of we've got Django
  370. in the middle bridging these two very, very different sides of what's going on.
  371. Anything else on that topic?
  372. What do you guys absolutely hate about working with Django or at least dislike?
  373. I hate the feeds framework.
  374. The syndication feeds?
  375. Yes.
  376. And we are using 096 at work and we'll upgrade to 1.02 and I know there's been some improvements,
  377. I haven't used it very much, but I mean, have you ever thought of making it more like a
  378. generic view or just, I don't know, more?
  379. It's kind of, I don't know, I hate in the URL comp feed, you kind of like, you kind
  380. of...
  381. Feed dicked.
  382. Feed dicked, yeah.
  383. You don't have to call it that.
  384. You can call it flower dicked.
  385. Well, that's true, but still, nonetheless, it is still the feed dicked.
  386. Okay.
  387. I would say one of the most exciting things that, if I paid closer attention, I probably
  388. already would have known about, but that I saw here this weekend was, I believe it was
  389. called demigrations yesterday, the ability to change your model without eliminating the
  390. data was just something that I constantly ran into.
  391. And if you're learning Django and even learning web development as you kind of do this, as
  392. you go along, I mean, I think both Matt and I come to Django with a very large data set
  393. that you want to get online, you know what I mean?
  394. It's not like a green grass thing where you're going to be building it from scratch.
  395. And so, as you're learning it, you're making mistakes and you're having to mess around
  396. with your models and get things straight.
  397. Having to always like rebuild the data set every time you made that change was something
  398. that was pretty burdensome.
  399. PolitiFact was my first project and I was kind of developing it with the Washington
  400. bureau chief and we were doing a very iterative process, although we didn't know what that
  401. was at the time.
  402. We weren't smart enough to know what it was.
  403. So, he'd call me up and say, okay, hey, I want to capture this information.
  404. So, I'd sketch out a model or a series of models and related tables and I'd send them,
  405. you know, go to the admin and try it out now.
  406. And he'd enter in, actually, he'd report it out, a fact check of something that I believe
  407. Mitt Romney had said and he'd go, okay, well, I really would, I really think we ought to
  408. store this information.
  409. I think we ought to do it or I think we ought to do this other thing and I'm like, okay,
  410. wipe it away.
  411. Start all over again.
  412. And that was fine when it was just one, but then he got kind of excited and started doing
  413. 4, 5, 6, and 10 and then asked me to change something else.
  414. And I'm like, you know what's going to happen, right?
  415. He's like, oh.
  416. And I do it anyway.
  417. And you know, I've now reached the stage where the editors are coming in like, can we do
  418. this or that or the other thing?
  419. I'm like, you realize we have like over seven, we have almost 700 statements in the database
  420. right now.
  421. I'm going to mess with it.
  422. I just don't.
  423. I'm too scared.
  424. Just leave it alone.
  425. It works.
  426. Don't jinx it.
  427. All right.
  428. So, yes.
  429. Database migrations, okay.
  430. We actually have a group of Rails developers at the Atlanta Jordan Constitution as well
  431. and as you know, Rails has migrations.
  432. And so, you know, I get to hear that all the time.
  433. So we, we, one of the things I'm actually really interested to look at that I haven't
  434. yet is Simon's thing about migrations because I think it's kind of grown similar to the
  435. way we do.
  436. We have kind of, we do a lot of migrations and they're very, they're just very scary
  437. when you're doing it on a live production database.
  438. And so, you know, we kind of store them or for reference in a Railsian way, like I don't
  439. know if you're familiar, there's like 001 and 002 for your order.
  440. And then, and then we kind of run them and pray.
  441. How many people here have written their own migration stuff for Django?
  442. Impressive.
  443. Matt, what do you hate about that?
  444. I hate to beat a dead horse but, yeah, migrations suck and we need to change them.
  445. What other than migrations?
  446. I think probably the biggest thing that sucks about working with Django is when you have
  447. to work outside of Django, that kind of makes everything else that much more sucky.
  448. Explain that.
  449. Well, you know, so if you spend all day writing Django and then you have to work within, maintain
  450. some old Perl code or maintain something that's not Django, it kind of spoils you for everything
  451. else you have to do.
  452. I got one, aggregate.
  453. Something that Ben and I have done a lot with database journalism is aggregates.
  454. That's pretty much all that you do, is your grouping and counting and summing and sorting
  455. and averaging and all that stuff.
  456. And that was a, you know, a stopping point for me was I got in there and I'm like, okay,
  457. now I want to count all these things and I'm like, where's, you know, where's sales.objects.count?
  458. Or group by this thing, then count them.
  459. And yes, you can drop into SQL and do it.
  460. But boy do I wish there was that one line, group it by this field, count up a number
  461. of unique things within that.
  462. I'm definitely encouraged by the fact that a lot of these things that we're griping about
  463. are things that, you know, if they're not in progress, they're things that we're thinking
  464. about as a community.
  465. So that makes me happy.
  466. Right.
  467. One of the things, maybe some of you feel my pain, but we only work on releases at work.
  468. So we only work on Django 1.6 and now we're going to work on Django 1.0.
  469. And I understand why that wasn't a Django 0.97, but please do not wait so long for your next
  470. version of Django.
  471. Okay.
  472. So that was going to be my very next question.
  473. You mentioned you're on 0.96.
  474. Matt, you guys are on 0.91?
  475. Yeah.
  476. So we're actually not on 0.91.
  477. We've got our internal version of Ellington that isn't commercial, that we just use internally.
  478. It's on revision 12.90 from November 2005.
  479. But we do, we were six failing tests away from being 100% on 1.0 and launching stuff
  480. later this month internally and should have commercial offerings by the end of the next
  481. month or so.
  482. So yeah, that's been, you know, sort of a situation in particular to us that, you know,
  483. I have shiny things in new versions of Django that I can't use yet or have to back port.
  484. That's something that we on the core developer team, you know, just like always run trunk
  485. and everything.
  486. I always run trunk on my little work stuff and projects.
  487. How much of a pain is it?
  488. I mean, you've already kind of talked about it, maybe the other two guys talk about is
  489. it really a huge pain to run on trunk?
  490. In terms of the pointy haired bosses requiring that you run on a release, any experiences
  491. with that?
  492. Yeah, when we set up PolitiFact for the first time, they were scared to death of something
  493. that wasn't 1.0.
  494. And then I said, well, I'd like to run trunk and they went, oh, hell no, oh, hell no.
  495. So PolitiFact runs on 9.6.
  496. Since that actually succeeded and nobody died, you know, the neighborhood watch is actually
  497. running on the GeoJango branch prior to 1.0 and that was actually the SVN version of that.
  498. So we've kind of broken through some barriers here at the times where they were extremely
  499. uncomfortable with things and now it works.
  500. So they're like, as long as you've got a good reason to do it, we can do it.
  501. Let's give it a shot.
  502. So it's, we've, for whatever reason, become more agile when we do that and we're now moving
  503. every, because we have one app running 9.6, we have one app running a branch.
  504. We have to have them on separate servers and we want to put them all together, which 1.0
  505. with the GeoJango Contrib app is a huge deal for us.
  506. So maybe that's one argument for fewer releases is it encourages work environments to be more
  507. agile and run Trunk.
  508. I got to say the last couple of weeks on Trunk have been kind of rough with a really big
  509. code base and, you know, kind of, you're just recovering from the last big backwards incompatible
  510. change when, you know, new comments drops or, you know, old forms goes away and you
  511. realize there's a whole bunch of stuff that you're not actually using but it's still in
  512. your code base and, oh, yeah, you can't load modules anymore.
  513. But yeah, overall, I think Trunk has been pretty stable in the last couple of weeks
  514. withstanding.
  515. Go ahead.
  516. I would say that between 0.096 and 1.0, to answer your original question, yes, it would
  517. have been kind of a painful to run on Trunk at work with, you know, multiple developers.
  518. Even just for me, and this was a little while ago, even just on my personal blog code, I
  519. didn't look at it for a while and I pulled it up and was hacking on it and all of a sudden
  520. form for model was deprecated, you know, that kind of stuff was happening all of the
  521. time recently.
  522. So, yeah, it would have been kind of painful.
  523. I would just say that we're running on 9.6 but our little Django Republic is a guerilla
  524. republic.
  525. I mean, in addition to being the only developer, I guess, it being my education and web development,
  526. it's also been my education server administration where we're working over at Media Temple and
  527. so we haven't had the same problems in that sense, okay.
  528. Time for Q&A.
  529. Any?
  530. Yeah, Russ.
  531. Certainly do.
  532. First one, sort of partial comments.
  533. One, the aggregation is on its way if you've got use cases of interesting type queries.
  534. I want so seriously to get this into 1.1.
  535. God bless you, sir.
  536. The patch is pretty much ready to go minus a couple of little bit of edits and whatnot.
  537. If you have interesting use cases of types of aggregate queries you want to do, please
  538. let us know so we can make sure that we're covering those sort of problems with the
  539. syntax and there aren't any bugs in those sort of areas.
  540. The other one, a quick comment was about evolution.
  541. Again, there's a panelist afternoon.
  542. We're all going to be talking about it.
  543. I'm also a little bit amazed that Simon, both by sheer force of personality and the people
  544. he knows, can release a product three days ago and still get more press than Django Evolution
  545. which has been around for nine months.
  546. The question I wanted to ask was about the Web 2.0, Waves Arms Wildly, and journalism
  547. and the attitude of the organisations you work with and the less enlightened who haven't
  548. quite drunkled the Kool-Aid yet in terms of mash-ups and pulling information together
  549. and whatnot.
  550. You're all with traditional media organisations doing traditional newspapers and that sort
  551. of thing and you have got journalists presumably not going out and individually interviewing
  552. dog owners to find out what type of dog they've got, they're scraping.
  553. There are still newspapers out there that are very much just printing and putting ink
  554. on paper and you end up with things like the AP coming out and saying, no, you can't quote
  555. more than four words on your website without paying a licence fee.
  556. What's the best way to educate the, I mean, it's interesting to me because I work for
  557. a company that is doing this sort of mash-up integration and doing search, passing links
  558. back to traditional media organisations who aren't necessarily down with what we're doing
  559. with their content.
  560. How do we as a community and just as individuals convince them that this is in their benefit
  561. and it's in their interest to be into this mass linking, mass building value by putting
  562. the links between data?
  563. Here and simply, the economic terms, particularly here in the United States, newspapers are
  564. hurting bad and if you can go into a newspaper manager and say, if you let us do this, you'll
  565. make money, done.
  566. You don't have to say anything else after that.
  567. I may be slightly oversimplifying it but Ben and I would probably agree with this, not
  568. that much.
  569. The newspaper business model online right now is selling advertisers the most possible
  570. eyeballs in a given day.
  571. They're selling advertising per thousand page views.
  572. So if you can show them what you're doing is going to increase the number of page views,
  573. they're not going to care at all.
  574. It means money in their pocket and right now, every newspaper company in America could use
  575. every dollar in their pocket they can get.
  576. So that's the approach I would take.
  577. Crass, yes, not very idealistic, obviously, but it will work.
  578. It will work very quickly.
  579. And a lot of particularly senior newspaper executives, that's what they'll understand.
  580. This whole idea of sharing information and extracting more meaning out of disparate data
  581. and somehow coming to some greater understanding, it goes right over their head.
  582. Say you're going to make more money if you let us do this, done.
  583. Any ideas on how to get their ears in the first place?
  584. Well, Adrian, you just had some success getting every block on the Chicago Tribune's website
  585. and the Chicago Sun-Times website, right?
  586. How did that happen?
  587. So it's sort of a special case because I knew some people there and they're interested in
  588. the project.
  589. There was some knowledge of the fact that the project existed.
  590. In my own experience, it's frustrating and it's difficult, and I've just had some lucky
  591. chances to work in places where there's been some clued in people.
  592. All right, Jason.
  593. You want to go first?
  594. You're first.
  595. All right.
  596. So just backing up what Adrian was saying earlier about journalists being some of the
  597. most technologically backwards people you can possibly work with.
  598. I work at a school of journalism and you want to sell them on this Django thing and they're
  599. going to come in and say they have to type in an href equals blah, blah, blah, and they're
  600. going to run screaming back to WordPress.
  601. So implementing without TinyMCE is kind of not an option.
  602. If you want to do these four-hour projects and you sort of got to go get the project
  603. and get it all installed, the way I'd love to see things work would be one line in the
  604. settings file would pull out a contrib thing and every text field would just have it.
  605. But part two to that is not just kind of a TinyMCE that we see, but a toggleable field
  606. so you can toggle between visual and HTML for when it screws up and have it nice and
  607. clean.
  608. So, you know, look to recent versions of WordPress, they do that really cleanly.
  609. Yeah, I don't let people use HTML because they know a little bit of HTML would be just
  610. enough to be dangerous.
  611. Yeah, I think that the right place to put that would be in the new admin classes.
  612. Use MCE equals true or, you know, whatever in order to automatically do it for every
  613. text field.
  614. Oh, yeah.
  615. I mean, I've done TinyMCE in Django, it's pretty easy.
  616. And doesn't TinyMCE have a thing where it can toggle itself, like within its...
  617. The default version, if you switch out to HTML mode, it brings up a separate window
  618. and you get this tangle of spaghetti code.
  619. If you look at the equivalent thing in WordPress, you just get nice clean text with just the
  620. minimal amount of formatting.
  621. Wishlist.
  622. Cool.
  623. Yeah, over there.
  624. This isn't really a Django thing, it's more content type inside of a content management
  625. system inside of a traditional newspaper, something I've been obsessed with since probably
  626. my second year of college.
  627. How do you take categories like front section, local, national, sports, and then push that
  628. onto a better situation on the web?
  629. So you have items like stories, multimedia, video, and then you have categories tagging
  630. and everything like that.
  631. How do you end up keeping everything flat enough so that way it makes sense to the traditional
  632. editors but yet makes sense inside the database as well?
  633. I think the honest answer is no one's really figured that out yet.
  634. I mean, pull up any newspaper.com and ask yourself, did they really figure that one
  635. out?
  636. And I think the answer is no.
  637. I heard somebody describe newspaper websites as being a giant ball of mud that we're just
  638. packing on more stuff and it's just accumulating over time until it just grows and grows and
  639. grows.
  640. So maybe Matt has a better answer than I do, but from what I can see, no one's answered
  641. that question satisfactorily yet.
  642. If they do, they're going to make a shitload of money.
  643. Yeah, I mean, on the technical side, categorize everything, tag everything, do it in a generic
  644. way, and then build some utilities that help you pull stuff out.
  645. I mean, we've got some stuff in Ellington that makes it easy to sort of bring up, show
  646. me all of the content for this section, show all of the content for this category.
  647. And it really only works that way because everything's categorized and once you talk
  648. about user-generated tagging, everything's tagged, aggregate that stuff and do good visualizations
  649. on that.
  650. I just quickly want to say thanks to Ben and his team for the best internet black hole
  651. of the last two weeks in the dog project.
  652. What's your dog's name?
  653. Scruffy.
  654. Scruffy.
  655. And how popular is Scruffy?
  656. I didn't put him in because you guys just included LA County dogs.
  657. We're unfortunately just south of the border by like 300 yards.
  658. You're an OC?
  659. Yeah.
  660. Okay.
  661. Well, thanks for using the site.
  662. I appreciate it.
  663. It was fabulous.
  664. I have a real quick thing to talk a little bit about the syndication framework.
  665. Actually, if you dig into it just a little bit, you'll notice there's a views.py file
  666. and it literally is just a generic view.
  667. So outside of any problem with regards to how you deal with the like data and making
  668. nicer feeds and whatever, if you're frustrated with how it forces you to deal with like
  669. where data's coming through in my projects, personally, I've just ripped out that view
  670. and I wrap it in other views and just throw it around anywhere.
  671. Yeah.
  672. I guess my beef is really that the way, the default way that you're supposed to use it
  673. that's presented as a bit and ideal.
  674. Right.
  675. Default way is just totally broken.
  676. One more question.
  677. This isn't necessarily Django related, but I was wondering if the four people on the
  678. panel could talk a little bit more about kind of the newspaper's decline that we're reading
  679. a lot about and how you guys see just technology and, I mean, you guys are kind of on the front
  680. lines of that.
  681. So what do you see it and how do you see it and I'd love to hear about that.
  682. I think-
  683. In 15 words or less.
  684. In 15 words or less.
  685. I think that Matt kind of really touched on what it's all about right now is page views
  686. equals dollars, which is unfortunate.
  687. I think that has some negative effects on journalism because what people want to see
  688. or read is maybe not the most, you know, high-brow journalism.
  689. I mean, people love pictures of celebrities.
  690. We have lots of pictures of celebrities and they get lots of page views, which is dollars,
  691. but I don't really consider that journalism.
  692. Yeah.
  693. If you would have found us at the bar last night, Ben and I were drinking and talking
  694. about this in that particular order.
  695. I think what Ben and I want to believe and what I think some of the things that we're
  696. doing and the things that Adrian are doing is that we are hoping against hope that a
  697. new model, a new business model for journalism can arise from some of the things that we're
  698. thinking about and doing and trying out and experimenting with that gets away from this.
  699. The more eyeballs wins idea that if you can sell an advertiser a specific piece of geography
  700. that they happen to that, you know, 80, 90% of their customer base is in, that should
  701. have value to them beyond just a thousand random page views that could come from anywhere
  702. in the world.
  703. So while as journalists, there's this Chinese wall between the business side and the
  704. journalism side, so I can't just walk into the advertising side and go, hey, let's tell
  705. me how to make money and let's just start doing it.
  706. But I can talk to my bosses and they can talk to their counterparts and we can start trying
  707. to push these ideas.
  708. It's way too early to know if that's actually going to succeed, if the bottom won't fall
  709. out long before it does, but that's not to say that there aren't people trying to work
  710. on it, that there are good and useful and not involving Lindsay Lohan things that we
  711. can do to inform our citizenry, inform democracy, not to get too high headed here about it,
  712. but that should have value and we need to build a business model around that.
  713. The problem is it's not there yet.
  714. It's not close.
  715. Yeah, I think working within the existing page views equals dollars framework that while
  716. potentially broken is what we've got right now.
  717. I think one thing you can really do is if you're doing those investigative journalism,
  718. data visualization projects, make it freaking compelling and make it really relevant to
  719. your audience.
  720. I mean, you can take something from a national data set and put a local spin on it and another
  721. thing you can do is get something that is continually updated, something that people
  722. will come back to and that'll let you sustain the financial side of it and so hopefully
  723. do enough of those and people will stop asking you how your journalism is making money.
  724. Is that a problem?
  725. One other thing to that that I learned particularly with doing PolitiFact and kind of increasing
  726. the amount of traffic that you get to your site is, you know, PolitiFact is my first
  727. project.
  728. I never had to worry about, you know, Google search engine optimization, but I learned
  729. and I put it in there and that's now paying off hugely and that 80 plus percent of the
  730. traffic that we get comes in sideways, it doesn't come through the main page.
  731. I learned how to make widgets, embeddable widgets that other people can embed on their blogs
  732. and their sites and you can put our content any old place you want because the links come
  733. back to us.
  734. A Twitter feed, what else have we done?
  735. Google custom homepage gadgets, any, I just did an iPhone, a quick and dirty iPhone thing
  736. because we found out that PolitiFact gets like 40 percent of all of the mobile traffic
  737. that any of my newspaper company sites get and 85 percent of that traffic is iPhones.
  738. So hell with it, I'm making me an iPhone app, took me a couple of hours of the, by the way,
  739. if anybody's trying to do this, IUI, which is a JavaScript and CSS library is awesome.
  740. That's my short commercial because I used it.
  741. One of the interesting things about, I'm totally ripping this off from my boss, Chris Heisel,
  742. thank you, about online journalism versus print journalism is in print, when you bought
  743. the paper, you would get, you know, X number of stories.
  744. You might read some of them, you might not, but all the stories were subsidized by the
  745. fact that you bought the paper.
  746. It's like a package deal.
  747. It's like buying an album.
  748. But now with online journalism, we can see what the stories that readers are actually
  749. interested in and so we can no longer subsidize all the stories in that way.
  750. It's like buying a single track off iTunes.
  751. Just to dovetail on that, I mean, if people in here are in the situation where they want
  752. to pitch something to news managers or to people in these organizations, I think one
  753. of the things he touched on will get you a lot of traction, which is that of search engine
  754. optimization, which is, I think, is something that Django can actually deliver on and that
  755. will provide something greatly superior to virtually any newspaper CMS that's sort
  756. of on the market.
  757. Because if you just go to the LA Times site right now and click on maybe the main story
  758. and look what that role looks like and then ask yourself how well that's going to do in
  759. a search engine and compare that to what you can say to them and you can give them the
  760. buzz word and you can then actually, I think, deliver the results.
  761. From the people, the managers I work with, I think that's a pitch that will resonate
  762. and that will click.
  763. Designing your own URLs is Google search engine observation out of the box.
  764. Clean semantic URLs is one of the things you can do and it's just, it's baked in.
  765. You just have to do it.
  766. Yeah, I like to say that Django is SEO friendly by default for free.
  767. How much time do we have, by the way?
  768. I have one quick question that that reminded me of.
  769. On our Django project.com homepage, we have, you know, the things that we advertise quote
  770. unquote.
  771. We come with an admin framework, we come with internationalization, we come with a template
  772. language.
  773. It sounds as if you guys are saying we should advertise some slightly different things or
  774. additional things.
  775. Do you think that advertising the SEO is something I've never even thought of?
  776. Do you think that it's worth advertising that at that level or is there anything else
  777. that we should advertise at that level?
  778. It's kind of amazing to me that people make a bunch of money doing SEO consulting.
  779. Not that people don't need it, but the fact of the matter is you just need a good URL
  780. and a good title tag and Django encourages that.
  781. So, I mean, I think that, you know, like I said, I think Django encourages you to be
  782. SEO friendly.
  783. I think it's also ultimately dependent on the audience that you're aiming at.
  784. If the Django project page is aimed at developers as a whole, maybe, maybe not.
  785. If it's aimed at IT executives who are debating whether or not they want to buy in and deploy
  786. Django in their shop, yeah, I definitely would put it on there.
  787. And if I was trying to sell Ellington, I definitely would mention that.
  788. I think we go.
  789. Okay.
  790. One more.
  791. I'm wondering whether anyone thinks that newspapers really care about the, like, dead
  792. tree archives that they've got the last 150 years because I've written a, you know, newspaper
  793. viewer that just, you stick in microfilm images and out comes sort of a dirty OCR newspaper
  794. site.
  795. But all the stuff that I've seen is just like, oh, you can pay for access.
  796. And, you know, nobody looks at that because they don't know what's in there in the first
  797. place.
  798. Well, you know, you'd be surprised.
  799. At the AJC, we have that you can pay for old access to the old archives.
  800. And the only reason it's still pay is because people pay for it.
  801. So it does happen.
  802. So they care deeply about their archives because they try to make money off of them.
  803. Unfortunately, well, fortunately, the company I work for actually, the archives are open
  804. going back to the 80s.
  805. The unfortunate side of that is that it's in the world's most hideous search interface
  806. that makes it impossibly ugly to deal with.
  807. Newspaper archives are actually big money.
  808. Newspapers sell their content to, like, LexisNexis to make a commercial aggregation company
  809. that other researchers use around the company or country.
  810. So what I love to see us doing a hell of a lot more with our archives, absolutely,
  811. because if you think about it, your local newspaper is the best, most consistent archive
  812. of the history of your community going.
  813. No matter what you think of your hometown newspaper, there's nothing better when looking
  814. at the history of your community than your newspaper, good or bad as it may be.
  815. So I think there's incredible value, incredible long tail value in the archives going way,
  816. way back.
  817. The problem is that a lot of newspapers are just trying to stay above water right now
  818. and keep up with things going on the web.
  819. They're not looking backwards at the stuff they've got.
  820. We're too busy going forward to know where we've been.
  821. One thing I'll note, we don't have all of our print archives going back, you know, till
  822. the dawn of time, though we probably should.
  823. We notice that we get a lot of search traffic and a lot of eyeballs because our archives
  824. are open.
  825. And so from a sort of a business standpoint, I think we make more money on advertisement
  826. because we have, you know, you can go back to the early 90s and everything we've published
  827. online is there and it's not behind a registration wall or a paywall, it's just there, take it.
  828. And I think we get more page views coming in via Google because of that.
  829. Sure.
  830. And I think there's also a search for monetization out of those as well.
  831. I mean, the New York Times has been a leader in doing this where they've put up a large
  832. portion of their archives and some, even the front pages and things like that.
  833. And I think it's just a matter of the technology being in place for a service like ProQuest,
  834. if you've ever seen ProQuest where you can go and I think on our site you can find an
  835. article in the archives and then purchase it, but you never actually get to see a preview
  836. of it.
  837. So like you're paying five bucks without even seeing what the page looks like.
  838. And I think that the modernization of that technology where you could maybe have just
  839. the printed text in, you know, HTML of say an old story, but maybe you throw down five
  840. bucks to get an image file of what that page looked like or that editorial cartoon that
  841. ran that day or that obituary for your grandfather or any of that stuff, I think that there probably
  842. is a good deal of long tail potential for that.
  843. It's just old photos even, you know, it's just a matter of getting it out online.
  844. But I think that, especially the New York Times leadership and I think the general sort
  845. of maximum page view sort of world view has led people to see that there's at least some
  846. value in people coming in through search and I hope that it starts that way and leads to
  847. something more.
  848. Thanks.
  849. Okay.
  850. Thanks, guys.
  851. Give it up for the panelists.
  852. Yep.
  853. All right.
  854. Thank you.

Downloads

Recording video · Timestamped transcript