All Articles (624)
Everything written by Daniel Roy Greenfeld for the past 18 years
- Converting Markdown Headers to Checklist
For those times when you write out a long markdown document that you want to convert to a checklist.
- Configuring Sphinx Auto-Doc with projects having Django dependencies
How to make it so projects with Django as a dependency benefit from Sphinx's auto-documentation features.
- Resolutions for 2023
My resolutions for 2023
- Practice Python Web Projects
Python web projects taken from my personal history to practice on to improve your skills.
- Two Years at Octopus Energy Group
Various thoughts about working for a for-profit business with a mission of saving the planet.
- Getting s3 pre-signed URLS using the Node.js AWS SDK v3
An easy-to-find copy/pastable reference for creating pre-signed URLs for getting of files using the Node.js AWS SDK v3.
- Farewell to Aaron & Company
Aaron & Company was a plumbing supplies firm started by my great-grandfather over 100 years ago and incorporated in 1932. And now it is being sold.
- Live Discussion with Sebastián Ramírez (Tiangolo)
I have a friendly live discussion with Sebastián Ramírez, creator of FastAPI, Typer, SQL Model, and more.
- Pip Installing Dependencies Into Conda Envs
People think Conda is challenging to use or doesn't work with pip, when in truth it is easy and just works everywhere.
- Blogger to Markdown Script
Converting hundreds of posts from blogger to markdown
- Sendowl Consolidation Script
Unifying our sendowl accounts into one
- More Married
In honor of Valentine's Day, this script calculates how long you've been married (or other types of relationships) in relation to how long you've known each other
- My Boss Took My Mouse Away
A useful lesson taught to me at the outset of my career in an unnecessarily abusive way
- Speaking at Python Web Conf
My first public conference talk in three years
- Autodocumenting Makefiles
Make Your Makefiles Make Your Day!
- Exploring the Bunch Class
Bunch classes are very powerful, and with great power comes great responsibility
- Blogging and Technical Writing
Answers to questions I was asked recently about technical blog writing.
- The Thirty Minute Rule
What to do when you get stuck on a coding issue for more than 30 minutes.
- Crusty European Bread
A recipe to make tasty bread with a crust.
- Growing Potatoes in Southern California
What I've learned about growing and eating potatoes in a hot climate.
- What's the Ultimate Reason for Working at Octopus Energy?
Wherin I conclude my discussion about why I work at Octopus Energy.
- What's the Best Thing about Working for Octopus Energy?
An in-depth discussion about my employment at Octopus Energy.
- Blog Revamp 2021
- Switching between VSCode terminals using hotkeys
By default VSCode doesn't include this keybinding. Here's how you add it.
- Frontend Dev Resources
A list of useful references for leveling up frontend development skills.
- Git Cheatsheet
My list of simple and complex git commands and operations.
- Recap of 2020 and Resolutions for 2021
- Improving Audio Recording with Streamlabs
The resources I used to dramatically improve my audio.
- August 2020 Courses
All the live, online, interactive courses I'm teaching in the month of August 2020.
- I'm Teaching A Live Online Django Crash Course
- Django Slug + ID URL Design
How to combine slugs and IDs to make a a human readable unique URL design.
- Eulogy for My Father: Ted Greenfeld
On June 11, 2019, my father, Theodore David Greenfeld, passed away at the age of 84. I spoke at his funeral three days later. It was some of the hardest words I've ever had to vocalize. I want to share what I said as well as some photos. Today would have been his 85th birthday.
- Two Scoops of Django 3.x Released
The book about best practices for the Django Web Framework, Two Scoops of Django, has been revised, updated, and expanded for versions 3.0, 3.1, and 3.2.
- Adding Metadata to PDFs
How to use Python to combine PDFs and then add metadata to them.
- Our New Django Book Has Launched!
We wrote a beginner-friendly tutorial book for Django!
- Feed Generator
Writing a Python script to generate my blog feed
- Recap of 2019 and Resolutions for 2020
This is my recap of 2019, plus my resolutions for 2020.
- Thoughts on Kotlin
My notes and impressions about this Android-friendly JVM language.
- Meeting Python Devs in Cancun
Python programming builds bridges across the world!
- My Markdown Code Snippet Tester
Ensuring that code in my articles actually works.
- Moving to Vuepress
Why and how I'm moving my blog to vuepress.
- Ten Years Ago Today
Musings ten years after I decided to take my life in a new direction.
- Stop Using Executable Code Outside of Version Control
Fighting the local_settings.py antipattern
- Authenticating via JWT using Django, Axios, and Vue
Getting DRF, JWT, Axios, and Vue to play nice
- Writing A New Blog Engine
Where I describe why and how I wrote a new blog engine
- Implemementing Manual Schema with Django REST Framework
Implementing a manual schema in Django REST Framework
- When to Use MongoDB with Django
Short answer is you don't use MongoDB with Django. Read on for the specifics.
- Hola, PyCon Colombia!
We're going to PyCon Colombia!
- 2018 New Years Resolutions
My New Year's resolutions for 2018.
- Two Scoops of Django Birthday Giveaway
My 2017 birthday giveaway contest.
- Two Scoops of Django 1.11 Is Printed!
- Using Python and Google Docs to Build Books
Using Python to combine multiple Google docs into one cohesive whole that can be published as a book.
- Python F-Strings Are Fun!
- Two Scoops of Django 1.11 is Out!
- The writing is finished on Siege I: The Reluctant Hero!
- Siege: The First Chapter, Revised
- 8000 Words!
- No Person Is an Island
- Power went out, but the writing went on!
- Midnight Posting on Wednesday Night
- Siege has 8 chapters!
- Siege has five chapters!
- Siege: The First Chapter
- Code, Code, Code
I'm often asked by new programmers how they can forge a path into using their skills professionally. Or how they can get better at writing software. In this article I share the secret master-level method to improvement.
- Pretty Formatting JSON in the Django Admin
- How To Create Installable, Reusable Django Packages
- Intensive Django Training with the US Air Force
- Titlecasing Markdown Headers with Python
- My Birthday Gift to You
- Why Doesn't Python Have Switch/Case?
- Django Girls Ensenada 2015
- Markup Language Faceoff: Lists
- Two Scoops of Django 1.8 is Out!
- My Latest Non-Fiction Book is Out
- How to Read Kindle Books Without a Kindle Device
- The Day I Clicked the Button
- Into the Brambles is Published!
- Phasing Out Django Packages APIv1 & APIv2
- Setting up LaTeX on Mac OS X
- Python Decorator Cheatsheet
- Building Conda Packages for Multiple Operating Systems
- Going off the grid
- I did an Au Batido in 2014, now what?
- setup.py tricks
- Rainy Sunday in Buenos Aires
- Homemade Pumpkin Puree
How I make the base for pies and other yummy concoctions.
- Adding Django form instance attributes
- Announcing BarCamp Django SF!
- Hola, Argentina!
- Want to work for Eventbrite?
- Want to work for Eventbrite? (part 2)
- Building, Maintaining and Scaling Projects
- cached-property: Don't copy/paste code
- Jinja2 Quick Load Function
- Python Partials are Fun!
- Beginner's Guide to PyCon 2015
- Surgery in Two Days
- First Post
- Two Scoops of Goblins
- Memories of Malcolm
- Docstrings and Various Python Objects
- Fiction vs Non-Fiction
- Announcing Two Scoops of Django 1.6!
- awesome-slugify: Human-readable URL slugs from any string (part 2)
- awesome-slugify: Human-readable URL slugs from any string
- pytest: no-boilerplate testing (part 3)
- pytest: no-boilerplate testing (part 2)
- pytest: no-boilerplate testing
- I Married Audrey Roy
The story of one of the best days of my life.
- New Year's Resolutions for 2014
- Cookiecutter: Project Templates Made Easy
Cookiecutter makes creating and maintaining project templates easy and intuitive.
- Made Up Statistics
- Travel Tips for Geeks: Preventing Theft
- My experiences with Django and Python 3
- EuroPython Intro to Django Workshop
- Core Concepts of Django ModelForms
- Tools we used to write Two Scoops of Django
- Filepicker.io and South
- Off to Europe!
- Two Scoops of Django is in print!
- Generating NCX files with Python
- Annotated History of My Most Used Shell Commands
- Fixing Python's String class
- Core Concepts of Django Forms
- Overloading Django Form Fields
- New Year's Meme 2013
- Exceptions as Decorator Arguments
- Python Indie Bundle Cyber Monday Sale
- Python Yields are Fun!
- Dynov 2013 Part I
- Travel Tips for Geeks: Traveling Cheaply
- The Easy Form Views Pattern Controversy
- PyCon Tutorial: Wiring Up Django Packages
- Beginner's Guide to PyCon 2013 Part III
- We are not using PayPal
- Two Scoops of Django 1.5 Beta Released
- Beginner's Guide to PyCon 2013 Part II
- Beginner's Guide to PyCon 2013 Part I
- Two Scoops of Django FAQ
- Our Django Book Has Launched
- New Year's Resolutions for 2013
- 2012 resolution summary
- New Year's Python Meme 2012
- Result of our LA Migration Hackathon submission
- Developer Time
- Stay with the Django CBV defaults!
- Thoughts on ranting
- Case Study: URL Design for petcheatsheets.com
- Django GetOrCreateView
- Los Angeles Open Source Sprint on Nov 4th!
- We need more PyCon US 2013 submissions!
- Thoughts on my stack
- Installing Pycairo on Mountain Lion
- Python dictionary as a class
- PyCon 2013 Talks/Tutorials I want to see
- A Public Service Message to the Python Community
- Django Requirements 2012-08-15
- Curiosity has landed!
- Deadline for DjangoCon Financial Aid requests is tomorrow!
- Attaching custom exceptions to functions and classes
- Django Update View Without Slug in the URL
- July 15th, 2012 LA Open Source Recap
- Simple HTTP Basic Auth Wall
- PyCon Philippines 2012 Day 2
A wonderful end to a wonderful event.
- PyCon Philippines 2012 Day 1
The first day of the first PyCon Philippines!
- Announcing PyCon Philippines!
- Django Class Based View: email form with CAPTCHA
- Simple Django email form using CBV
- May 12th, 2012 LA Open Source Recap
- 10 reasons to go to DjangoCon Europe
- CSS Hacking to make my code samples legible
- Choosing an API framework for Django
- Django Requirements for a project
- Los Angeles Open Source Sprint on May 12th!
- Join us at DjangoCon Europe!
- Choosing a new python based blog engine
- Calendar About Nothing
- Launching our API at PyCon 2012
- The sorry state of Python OAuth providers
- You should Heroku
- I use this
- PyCon Australia 2011 Review
- My PyCon 2012 Schedule
- Selected for PyCon StartUp Row
- Parsing MongoDB URI
- My blog is moved
- django-uni-form end of life
- Two years ago today
- Two years ago today
- Silicon Beach Hackercast
An attempt made long ago to create a podcast
- Working on the Aú sem Mão
- Capoeira at PyCon!
- Looking to move off blogger again
- Tried out Jekyll
- Python Web Summit Questions needed!
- Why I like Capoeira
- How to justify attending PyCon sprints
- Join the PyCon Early Birds program!
- Tips for speaking
- My SOPA boycott
- Resolutions for 2012
- 2011 Resolution Summary
- New Year’s Python Meme
- Evaluating which package to use
- Announcing Consumer Notebook!
- My BaseModel
- Made Up Statistics
- The Story of Live-Noting
- Redux: Python Things I Don't Like
- Loving the bunch class
- PyCodeConf 2011 Report
- Conference Talks I want to see
- Profiles: Breaking Normalization
How my Django profile models looked over 10 years ago.
- History of my most used shell commands
- Quick conferences report: Presentations
- Responses to Github is my resume
- Github is my resume
- The Ultimate Django Tutorial Workshop
- Amtrak Review
- Python and Django class/hackathon!
- Normalization noitazilamroN
- I'm going to Pycon Australia!
- Hollywood Hackathon Report
- Do not upload dev releases at PyPI
- Announcing django-uni-form 0.8.0 beta!
- Hollywood Hackathon on June 18th!
- Python HTTP Requests for Humans
- I love this girl!
- A couple great Pycon 2011 Talks
- We won first place at Startup Camp LA!
- I teach Python and Django
- How NOT to interview Pythonistas
- Are you looking for Python and Django Work?
- Python Packages sprint on Sunday 4/10/2011
- PyCon 2011 Sprint Report
- Announcing Garbaginator!
- PyCon 2011 Tutorial Report
- I'll get you next time, Wesley Chun!
- The Great PyCon Ribbon Game!
- My tips for speaking
- My Django tutorial at PyCon
- My Pinax Solutions class at Pycon 2011
- How to sell Python panel at Pycon
- What I want for Django Facebook connect
- Los Angeles Open Source Hackathon
- Why you should go to Pycon
- January Mongo LA conference
- Pinax Tutorial at Pycon 2011
- I don't work in a vacuum
- Resolutions for 2011
- Recap of 2010
- 2010 Resolution Summary
- Reactions to "Stupid Template Languages"
- Stupid Template Languages
- Release classifiers in distutils/pypi
- A request for new pypi classifiers
- DjangoCon 2010 report I
- New features for Django Packages
- Django Dash Lessons Learned
- Announcing Django Packages!
- More reasons to go to DjangoCon!
- Getting excited about DjangoCon US!
- Rainbows on the prairie
- Getting piston forms to play nicely with JSON
- I want to talk to Jython and Iron Python developers
- Apologies to the Python community
- I hate Mac & Cheese
- My little unit test trick
- Using modernizr to help with canvas
- Code highlighting on blogger
- Steve Holden giving a talk on Python education
- Moving away from DC
- Leaving NASA
- Pycon 2010 report III: Sprints
- Conferences are a double edged sword
- Apologies to Katie
- Pycon 2010 report II
- Pycon 2010 report I
- I've got ribbons!
- Eating my own Dog Food
- How I write my presentations
- What I don't like about Pycon
- My pre-history with Plone
- Learn something new every year
- Reserve your low pycon price today!
- Register for Pycon 2010 already!
- DjangoCon 2009 videos are up!
- Resolutions for 2010
- There was a day...
- New Year's Python meme
- 2009 resolution summary
- Recap of 2009
- Picking a Django powered CMS
- Python Wars
- Code I'll reuse
- What I love about Python
- Eating your own dogfood
- Crashing is fun
- Pycon talks and tutorials
- November Django Lunch Meetup was fun!
- Posting every day this month
- Sys Admins: What your Developers want you to know
- Have you signed up for the Django Master Class?
- Djangonaut Lunch in Crystal City
- Something I learned at DjangoCon
- Looking for work?
- Pycon talk thoughts
- Slides from DjangoCon 2009
- Pycon talk proposal reminder
- Show me your open source Django CMS
- Best DjangoCon 2009 Day Ever!
- See you at DjangoCon!
- All set to go to Portland, Oregon!
- I want to give a class or talk at Pycon 2010
- NOVA-DUG August 19th summary
- NOVA-DUG meeting notice for August 19th
- NOVA-DUG scheduling
- Clothing triage
- Turning away from CAPTCHA
- Report on the belt test
- Taking the test tomorrow!
- NOVA-DUG meeting notice for July 8th
- Belt test update
- Belt test this Friday!
- Still sick
- Quitting Caffeine Fail
- Training Schedule
- What happened to NOVA-DUG?
- Thanks for San Francisco Link
- Thanks for San Francisco!
- What I managed to get done in San Francisco
- My San Francisco Day Plans
- I don't like Integrated Development Environments
- ColdFusion and deprecated code
- Eight things I don't like about python
- Help me make a new Avatar!
- Quitting Caffeine
- DC Sprints location is changed!
- DC sprints location is official!
- NOVA-DUG April 29th summary
- NOVA-DUG meetup for Wed, April 29th
- Sweet spots of Plone
- Finger method of judging graphic design
- What I learned at Pycon 2009
- NOVA-DUG April 15th summary
- Show me your open source Django blog application
- NOVA-DUG meeting on Wednesday, April 15th, at 7:30 pm
- The end of my Feedfeeder story
- What I would change in Plone: Generic Setup
- Northern Virginia Django Users Group lives!
- Django Dash worst concept contest
- Jinja2 in zope
- What I would change in Plone: Templates
- Forming a Northern Virginia Django User Group
- Changing over to .NET
- Day 3 Pycon-09 talks I'm attending
- Best Pycon 2009 Day Ever!
- Day 2 Pycon-09 talks I'm attending
- Day 1 Pycon-09 talks I'm attending
- Pycon Tutorials attended by me
- Heading off to Pycon 2009!
- Looking for work?
- Naming conventions thoughts for Pinax and Django
- Spacebook ITCD demo a success!
- Should django-uni-form handle boilerplate HTML?
- Tell me your Plone blogging tool preferences
- Strangeness on Planet Plone
- Starting a new Plone project in February
- US Pycon 2009 registration is open!
- Awesome Mac command-line trick of the day
- Second Annual President's Day Sprint
- My current training schedule
- How to do well at the job
- Simplegraph Screen Capture
- django-uni-form lives!
- Python formatting test
- Memories of New Year's by the decade
- How to globally ignore .pyc files
- Made leaving comments on this blog easier.
- Useful python code for blogspot users like me
- Resolutions for 2009
- 2008 Resolutions Summary
- Recap of 2008
- I wish we were having a holiday party at the gym
- Looking under the hood of Pinax
- 2009 Saturday class schedule is formally confirmed!
- Training notes
- My saturday class plans for 2009
- Deployment skills need work
- Danny's recipe for pumpkin pie
- Current plan for FeedFeeder v2
- Second place in my second tournament
- Steel jewelry is in!
- Subscribers Zope 3 style
- Why I'm not competing in sparring right now
- Cat Vacuuming Society
- What I want to see in the next four years
- The first effort I made in a TKD competition
- Weekend competition information for me
- Training failures
- Quick update
- Morning brainstorm about FeedFeeder v2
- The temptation is very strong...
- FeedFeeder 2 plan
- Normalization, Non-Normalization, Denormalization
- Compiling Python on Mac OS X 10.5 can be a pain
- End of the conference
- Can't seem to use zope debug mode anymore.
- Help me with zc.testbrowser
- Day 2 of the 2008 Plone Conference
- Day 1 of the 2008 Plone Conference
- Start of the Conference
- Plone Conference 2008 starts tomorrow!
- 362 days ago I was off to Italy
- Why did we use Plone for nasascience.nasa.gov?
- Our payment obligation?
- Vacation this fall, winter, or spring? Or not...
- Farewell to Michael Hammer
- Antipatterns I see here and there
- Plone OS projects take two: Radius package and FeedFeeder package
- Best career technology choice I ever made besides learning python...
- Some ideas for open source Plone Products
- List of programming languages I know
- Don't bet on closed source third party software!
- I've not quite done LAMP, or have I?
- Nixed Technorati link off this blog
- Prayers to Jessica and family
- Thoughts on Python interfaces
- Moving major appliances
- Fitness update
- Pluggable Authentication System for Plone
- Taught my son yesterday
- NYC century bike ride
- I missed a class taught by Lennert Regebro?
- Trials and Tribulations of avoiding vi
- Another reason to dislike P.F. Changs
- Funkload to be revisited!
- Barack Obama versus John McCain
- Coming up on my week off!
- wxPython is fun!
- Ready for boot camp!
- Working on the fatigue issue
- Me Grok generate Add and Edit forms!
- Exhausted for no reason
- July should be fun
- Me Grok Smash!
- Beware Documentation By Topic
- Quick Firefox 3 review
- Ruby Security Problems
- My students take the big test
- Umlizer lives!
- Should I write a book?
- Cycling in this heat
- New water heater
- MVC public service videos
- Condolences to the Hammers
- Must use ubigraph
- How not to build a view
- Inheritence is fun!
- Visit the Greater Lipsum Project at your own peril
- Genius will be rewarded
- Phoenix is down safely!
- To Shell is to love Python
- Italia and Escher
- Apologies to Chris
- I love graphing
- Flooding sucks
- NYC cycling ride part 1
- The problem with comparing Pylons to Django
- Best NYC trip ever!
- I want to get busy!
- More stupid stuff about my health
- Feedparser does not work with Google App Engine
- Day after the hospital
- What I want in a feed aggregator
- My trip to the hospital
- Suggest to me a feed aggregator!
- An Engineer's Guide to Cats
- Pesach and tradition
- Import Soul
- Comments made easier!
- Sick but Ubuntu
- Status of NASA Science
- Oops... forgot RSS feed
- Zed Shaw, YAML, Python Community
- Overview of NASA Science
- So what did I do on the website?
- History of my most used shell commands
- 321 LiftOff!!!
- Our NASA Plone project launches
- Next time I'll read the label
- This looks interesting...
- Issues with zope.formlib
- I got a job at McDonalds!
- Reality Graph
- Ramping up the excercise
- Need better charting for Python
- meeting plone friends at pycon
- 10th Wedding Anniversary
- Django at Pycon
- Pycon Wrapup
- First side consulting project hits the world!
- I contribute to Python
- A fanboy at Pycon 2008
- Flickr woe
- Finally, good food!
- The food of Pycon 2008
- Zed Shaw and me
- First day of Pycon 2008 - The Tutorials!
- Numpy Tutorial overview
- My first day in Chicago
- Another hour of waiting for my flight
- On my way to Chicago and Pycon 2008!
- 2 days until Pycon and Chicago
- Replacing a legacy CMS with Plone
- Open source makes the world better
- Pycon/Chicago ho!
- Django fun
- Gary Gygax passed away
- Pycon 2008 travel update
- Working from Panera today
- Mistakes not to make again
- Pycon 2008!
- Working with ATTopics
- Memorial Mass for my Uncle
Saying farewell to my father's brother
- I want an Asus eee pc
- Insomnia again
- I grok viewlets in Plone 3
- Work things
- Zope 3 Third Edition is in my hand!
- My Zope 3 book is almost here!
- The weekend
- Plone 3 drives me to drink!
- Ditching Funkload
- Me being snarky
There was a time when I was snobby about what I did, this post does not reflect my current attitude
- Plone Confessional
- Plone 3 fun
- Funkload + Matplotlib = charts!
- Funkload Charting woes
- Sorting by dates in Plone tables
- Supplementary views in Plone
- Litigating reality
- SVN Versionator is dead
- Gym things
- More on SVN Versionator
- SVN versionator!
- New Grok site!
- Baby news
- Reason #4293 why I'm happy to be out of ColdFusion
- Python is the programming language of 2007!
- The hard truth about Python
- Playing with Trac, SVN, Apache, and LDAP
- My human rights are violated!
- import antigravity
- Capturing shell output in Python
- How fast can I convert a Zope 3 app to Grok?
- Complexity added to Plone 3
- Playing with Django
- Happy Thanksgiving!
- RIA arguments
- Need to get into the habit of using Python sets
- Adding a new user at the root of Plone/Zope 2 programmatically
- What do you do when zope.Public refuses to be Public?
- How do I deploy development code with buildout?
- Zope 3 Security
- New blog format
- Plone lets you import/export workflows!
- Pylons vs Django
- ZPUG-DC Report 2007/11/07
- Head meets desk
- I grok Zope 3!
- More Italy pictures coming!
- What is a real language?
Thoughts back in the day when
- Danny the Tourist
- Monday and Tuesday
- My plan for tomorrow
- Maybe my last post
- Sunday Funday
Another lovely day in Italia! Well, it would have been lovely but the temperature was rather low.
- Saturday Bleahs
- Handy code snippet
- Friday in Italia!
- The morning after a friday...
- Thursday in Italia
- I'm so busy
- KSS or Plone4Artists sprint choice
- A note of thanks
- Technorati Fun
- Mercoledi dentra Italia
- Top 5 Design Tips for Skinning Plone
- Martedi dentro Italia
- Required methods to make a class iterable
- Second Day in Italy
- Italia picture set
- I'm in England!
- First minutes of the day
- Case sensitive search in Zope 2.9.7
- Can I be a bit snarky here?
- Supersizing YouTube
- Python Tips ahoy!
- Lambdas no more
- TurboGears merges with Pylons
- Psuedo Code to Real Code
- Playing with Catalog brains
- A thought on methods in Plone
- Plone Introspection
- Image of the Day 'extension' of FeedFeeder experience
- Interfaces in Zope 3 and Five
- Beautiful Soup is Beautiful
- The Dark Side begins its seduction...
- JSON and Python
- Goodbye Uncle Alex
The passing of my father's brother
- Stories About Family
Writing down stories about my family