I’ve had no time to do any coding lately, which makes me sad, but when I did have time and was doing lots of commits in short periods of time, I definitely felt like doing this. Many many times.
Today I got more work done on my sleeve, but I’d neglected to post (and even take!) pictures of the next-to-last session. So if you look at Flickr you’ll see the last bits I got done (the flaming cross and re-darkening the tribal Jesus), but not the stuff before that (which actually consisted of two sessions). I’m so bad for that.
Anyways, the pics don’t really do it justice as it’s a hard thing to take pictures of, but Ang tried. =) Pictures of Jesus’ hands holding a thawing heart are now on Flickr. This is probably my favourite but boy did it feel… interesting. I wondered why I had never felt a certain kind of pain before and after I looked at it I realized he had gone about an inch higher towards the armpit on the inner arm. That definitely explains it! Lots of crazy detail in this one, and some really cool shapes with bright yellow/orange/red colors that also use a lot of negative space.
You can view the slideshow starting here:
I was in for a bit and the sleeve from the elbow down is now fully done. Pics to come (I promise!) when the swelling has reduced as we did a bunch of grey-wash stuff but with the inflamed/red natural “I’m angry!” skin tone it doesn’t look like it will eventually, so probably next week I’ll put pics up.
Sorry to those who were waiting to see this. This stuff was all done last year. =(
The blog needed an updated look. I think I kinda like this new look. Much cleaner and sharper.
I think I’m going to be doing more “life” blogging from this point forward. The tech stuff is important, but so is “real life”. So there should be more stuff of the Life category going forwards. That stuff I don’t think gets syndicated to Fedora Planet, so if this makes it there I’ll have to change that as I don’t want to clutter the ‘Planet up with non-tech stuff.
That’s my kid’s eyeball up there, BTW. You can see part of the kitchen in it. I need to buy my own macro lense (thanks, Jenny, for letting me borrow yours all the time!).
I saw this on Facebook today and, thankfully, it’s also on their blog. I’ve always liked the idea of “Inbox Zero” and have even gotten my inbox to zero a few times since I started (mostly)-seriously using GTD. Sadly, I’m not there anymore due to how crazy work has been the last few months, but I’m thankful that I’m not this guy. It’s a good read:
Dealing with a Sea of Backlog (via the GTD Times blog)
This smart, savvy executive had no idea how to effectively use a tool through which major business decisions were being made. He had no email pending or reference folders set up, and he had stored every saved email in his inbox. As a result, he had more than 87,000 emails, spanning over 14 years, sitting as an amorphous pile of stress in his inbox.
Amorphous pile of stress indeed.
I do have a few other mailboxes (mostly mailing lists) that I need to apply the “Inbox Zero” principle to.
I also know plenty of people that could seriously learn about filters and deleting email. I’ve got friends that have as many emails in their inbox as this guy does (the idea is to keep everything in the inbox and use no other folders… I suppose they think it’s clever and makes it easy to find stuff, I call it insanity). Actually, oddly enough, most of the people I know outside of work do this.
Anyways, interesting read for those of you unnecessarily drowning in a multi-thousand-count inbox.
I’ve been programming in Python for a few years now (I can pretty much mark the beginning because of starting at Red Hat). Since picking it up, I’ve fallen in love with the language and have a few books on the subject. One of the most indispensable books I have is Learning Python 3rd Edition published by O’Reilly. Recently I received a copy of the 5th Edition for review.
My first reaction was that it was no mere book, but a tome. The 3rd Edition was no slouch, weighing in at 700 pages, but the 5th Edition is a hefty 1540 pages, over twice the size! This edition was released in June 2013 (ISBN 978-1-449-35573-9); the previous edition that I owned (the 3rd) was published in October 2007. This new edition was updated to cover Python versions 3.3 and 2.7 (the 4th Edition covered 2.6 and 3.0/3.1, so I imagine it too had a hefty size increase over the 3rd Edition).
Before I go further with the review I have to note that Learning Python 3rd Edition is nearly always on my desk. I referenced that book all the time. With the number of alternatives out there (searching on the internet or looking at other books that I have, such as Programming Python, the Python Cookbook, and Python in a Nutshell), this is the one book I used all the time. It is worn, crinkled, dirty, and probably sticky in a few spots as well. However, I’m not one to read books like this from front to back — I use them as reference material for areas that interest me or I need help with (or I need to brush up on).
The first section of the book, “Getting Started” goes into the basics of Python: what it is, what it’s used for, how to use it, why you would use it, and so forth. The 5th Edition expands on this, particular in regards to version 3.3 and its new options in Windows. This is all the really basic stuff, explained quite well and great for those interested in getting into Python without a lot of knowledge of the language. Those more experienced with Python will likely skip this section for the most part, but there are some good bits in here.
The second section of the book, “Types and Operations”, gets to the meat of writing code. This is the section that talks about Python object types (lists, dictionaries, tuples), how Python handles numbers, dynamic typing, manipulating and using strings, and handling file operations. One thing I noticed immediately is that the section dealing with numbers is greatly expanded from the 3rd Edition and this is largely due to the changes of how these are handled in Python 2.x vs 3.x. It is in this chapter that you begin to see why the book is so hefty — instead of focusing on just one major version of the language, it provides the necessary information for both 2.x and 3.x and the differences between the two. Because Python 2.x is still so widely used, it would have been impossible to ignore it unless they decided to write two books, one for each major version. The section on handling strings has likewise been expanded, enhanced, and re-organized with quite a bit of extra content. Again, quite a bit of this is due to the coverage of both Python 2.x and 3.x.
The third section of the book, “Statements and Syntax”, gets into the fundamentals of handling your code: typical statements (if/elif/else, variable assignments, loop handling, creating functions, namespaces, module handling, and exception handling). Here again a lot of content is devoted to the differences between 2.x and 3.x, and even between different versions of 2.x. There is a lot of content here — chapters devoted to topics about looping, if statements, iteration and comprehension, the 2.x print statement versus the 3.x print function, and even how to generate documentation for your code using PyDoc. For those learning Python, and even for those who choose to use this book as a reference, this section will be greatly used.
Perhaps one of the most significantly changed sections between the two editions of Learning Python (again, noting that I’ve never looked at the 4th Edition so I don’t know how significant a change it is between the 4th and 5th editions), is what was “Functions” in the 3rd edition is now “Functions and Generators” in the 5th Edition. There is a significant overhaul between the two: where before “Scopes and Arguments” were a single chapter, we now have two chapters, one devoted to each topic; the 33 page chapter has turned into 67 pages spanning two chapters. It also goes into great detail about generator functions and expressions (something I have yet to fully explore). Suffice it to say, there is a good 45 pages of new content here that will prove interesting to read (list comprehension, generators, etc.).
The fifth section, “Modules and Packages” likewise contains greatly expanded content covering the use of modules, how to create them, why (and how) you should use them, the differences between importing and reloading modules, full coverage of Python 3.3 namespace packages, problems you can encounter with module use, and so forth. It talks about the features common to both major versions of Python, and has sections that are more specific, such as how byte code is handled (.pyc in versions prior to 3.2 and the __pycache__ directory in 3.2+) and namespace packages that were introduced in 3.3 (which is also shows the differences between regular packages and namespace packages). This once again shows the level of detail the book provides for users of any version of Python.
Section six is all about Object-Oriented Programming and classes, and gives great detail and examples on topics such as polymorphism, classes and subclasses, object handling, operator overloading, and more.
Section seven goes into the how’s and why’s of exceptions and how to use them to write good error-handling in your code. This is the last section that appears in both editions, although (as with every other section), this one is greatly expanded.
The new section in the 5th Edition, compared to the 3rd, is the “Advanced Topics” section and its five chapters. This section goes into unicode and byte strings — an area that has seen a lot of changes between Python 2.x and 3.x, as well as managed attributes, decorators for functions and classes, metaclasses and the differences between them.
Obviously I’ve not yet read the entire book and chances are I never will. Most of these programming books I never do read end-to-end, but I do use them as functional references and to learn new things from (pretty much the entire “Advanced Topics” section is new to me), as well as to brush up on older things. From the parts I’ve read, and the comparisons I’ve made to the 3rd edition, this is most definitely a worthwhile “upgrade”. One thing I appreciate as well is the consistent back-and-forth regarding Python 2.x versus 3.x. As a Python coder who has never yet touched Python 3.x, this book will help me understand the subtle, and sometimes not-so-subtle, nuances between both major versions — when the time comes (aka: when the time is available). As such, this book is valuable to me now (writing code in Python 2.x) and will be valuable to me in the future.
I certainly appreciate the expanded content, as it’s already twigged a few things in my mind about the code I’ve written so far, and has given me some new ideas on how to handle certain issues or improve performance/handling of my code. This is both good and dangerous! Having said that, this is most definitely a book worth getting for any Python programmer who either is new to the language or is a veteran of the language — the first will appreciate the no-nonsense easy-to-understand approach to introducing both the basics and some quite advanced topics, while the latter will appreciate it as a reference book or to expand on their understanding of certain topics. For myself, I’m somewhere in the middle of the two and this book is introducing me to a lot of stuff I do not yet know, and is a very handy reference for the stuff that I do know (and need reminders of every once in a while).
I’ve highly recommended the 3rd edition of this book to anyone asking about good books on Python, and the 5th Edition is no different. I highly recommend this book to anyone who wants more than just a passing understanding of Python.
And as a replacement for my well-worn and well-loved 3rd Edition, I know this book will see much use from me.
This just absolutely blew my mind so I figured I’d post a quick note about it. I have to convert a CVS repository to SVN and this is a big repository, over 33k commits to it spanning a decade. In my trial runs, using cvs2svn resulted in it taking just shy of 11.5hrs to complete, on the HDD (I have an SSD in my workstation for everything and a 2TB HDD for storage and scratch space which is where I was running the conversion). Moving the original raw CVS repository into a temporary directory on the SSD and running cvs2svn from there (reading from and writing to the SSD) resulted in 19 minutes.
That’s right… 19 minutes. Moving from the HDD to an SSD dropped the conversion from 11.5hrs to 19 minutes. I expected a speed-up, but I did not expect it to be this drastic. It makes me wonder how much faster having my Fedora mirror on an SSD would be when doing rq imports. There I have the MySQL database on the SSD, but all the rpms are being read/unpacked on the large HDD. Importing can be slow, given the size of Fedora (queries to the database is really fast).
Unfortunately, my Fedora/CentOS mirror is almost 800GB and that would be a very expensive purchase. This makes me sad.