Learning Python
I dove into Python yesterday. Today: I’m reading the tutorials. I like it. What did you expect? Everyone seems to like it, right? Have you met a person who learned Python that hates the language?
So, I’m still n00b status, but here’s the deal: It’s got all the things I love about Javascript, the good parts of Java (no bloat), and the fundamental simplicity of C. PHP is conspicuously absent here, but … now that I mention it, there’s something there too.
Let’s over go over those, since you may be flaming me already. Hey! I’m still a n00b.
Javascript I really like the function mapping aspects. Ok, so this is more of a jQuery-type thing. But it’s possible, and jQuery makes it obvious — in-your-face — how useful this feature is. I could care less about lambda functions right now, but I think they’re related. I like the way zip() works on arrays.
Java Ah, the language of verbosity. I’d rather dictate War and Peace, than write Java. What’s so good about Java? It’s got a great package system, and the try/catch/finally construct. Python’s equivalent: try/except/finally. Thumbs up! Java has a good class hierarchy that Python seems to duplicate (minus the Java overhead).
C There’s nothing more powerful than C. Assembly’s got nuthin’ on C. C is the ultimate speed-speed trade-off. The speed of code development vs the speed of execution. Everything else is derivative bloat that hinders performance. So, how does Python act like C? Well, the BDFL gives Python a coherent structure. The Java package sprawl problem is not present. Code bases are tight. Syntax is rigid. Writing Python is like clock-work — it must be precise.
PHP Don’t flame. Here it is. Python is extra-great because it’s interpreted. PHP is interpreted. That is all.
Confusion says: The n00b walks a fine line of asking and testing. Nobody ever said learning a language was easy. It should be fun (or interesting if you don’t like learning) though! So here’s the deal: I’m not flying yet. I’m tutorializing. Short programs are useful learning tools, but jumping in the deep end really makes you sink or swim — strangely, I’m trying to be trite right now. I don’t get lambda. I don’t know why there are so many different types of lists. I know I’ve had a need for sets, lists, hashes, tuples, queues, and the like, but is it really necessary that there be a specific data type for each? Whatever, I’m a n00b. I know performance is probably the real motivator, but c’mon! It’s interpretive. I was surprised to learn that compiled Python (.pyc) does not execute any faster than inline Python (.py) (Can’t find the reference). The .pyc files make the module load faster, not execute faster.
Anyway, right now, Python makes a great calculator. Anyone living in Hawai’i will tell you the numerous “spam and eggs” references make’s ‘em hungry too!
Git: Recovering a file that you deleted
You might be doing some spring cleaning to your source code, or you might move files around that you think are unnecessary. Later on, you realize that one of the files you removed was a dependency. Now what? For this, we use git checkout.
If this is you:
...edit files... git add edited-file git commit -m "made changed" git rm seemingly-useless-file git commit -m "removed unreferenced dependency" ... edit file ... realize you dynamically included that file elsewhere..
Then you can simply follow up with:
git checkout 0a323 // the previous revision (hash from `git log`) cp seemingly-useless-file seemingly-useless-file.1 git checkout master mv seemingly-useless-file.1 seemingly-useless-file git add seemingly-useless-file git commit -m "Restored seemingly-useless-file"
You may want to git blame yourself while you’re at it.
If you know of a better way, please let me know.
On the Millennials and Having Children
Everyone wants a baby, but no one wants a kid these days.
Runaway1956
Kids today get emo and suicidal because they have been given everything, never had to earn anything, never been hungry, never had anything real to fear, never been punished for their behavior and are bored with having too much entertainment.
Nadaka
Burning Rope for 45 Minutes
Premise: There are two ropes of equal length and physical composition. Each rope takes one hour to burn from end-to-end, but may burn at a variable rate. You are given a lighter and these two ropes. There is nothing else that can be utilized, not sand nor clock nor sun.
Question: How can you determine when 45 minutes have elapsed?
Answer: Light one rope at both ends. Light the other rope at only one end. When the rope that was burning from both ends has burnt out, 30 minutes have passed. Light the second end of the rope that was only burning from one end. This rope will burn out in 15 more minutes. The total time will have been 45 minutes.
Things that Kill MySQL Performance
- Failing to plan for scaling out, scaling up
- Not using EXPLAIN (learn from your mistakes)
- Using the wrong data types (hint: use smallest fixed-size)
- Using persistent connections in PHP (leads to zombie processes)
- Using a heavy DB abstraction layer (hint: use PDO or custom)
- Using the wrong storage engine (MEMORY, ARCHIVE, InnoDB, etc.)
- Using indexes improperly (hint: select in the order of the index; hint: keep primary key small)
- Issuing SQL queries that can’t be cached easily; having too large of a query cache
- Using stored procedures when prepared statements are better
- Using functions on indexed columns in the WHERE clause
- Not indexing important columns; having redundant indexes
- Using sub-queries when joins would be better
- Issuing avoidable deep scans
- Doing SELECT COUNT(*) without WHERE on InnoDB table.
- Failing to profile/benchmark your SQL
- Not using AUTO_INCREMENT if applicable
- Not using ON DUPLICATE KEY UPDATE (1 query vs 2)
Reference: