Minggu, 29 Maret 2020
Shoot Your Goo, Fun Puzzle Platformer Made With FTEQW In 48H!
The source-code can be found here, and you can head over to InsideQC to discuss with the creators.
The team who made this has become quite proficient in turning out interesting game prototypes (Bloodletter, Escape from Space etc.) with the very cool FTEQW engine... a much advanced Quake1 derived engine (unofficial developer's documentation on the QuakeWiki & source code).
There are also a few other interesting projects with FTEQW, such as CubiQuake, FreeCS, and it has even gotten to the point of being nearly ready as a functional drop in replacement engine for Xonotic.
Semi-OT: Trenchbroom, the modern take on Quake engine mapping is continuing with great improvements and should be on your list to check out for sure
Discuss on our forums here.
Battle For Boulder Badge
After the devastating loss of Rascal, I went back to training out on Route 2 with Lucky. There was no way a mere Metapod was going to stand up to Gym Leader Brock. I had confidence that Rascal, Nibbles and Kiwi would help me earn the Boulder Badge, but without Rascal my confidence faltered. It took us a few days, but eventually Lucky sprouted wings and evolved into Butterfree, a significant improvement over the lovably little lump of a Pokémon he was as Metapod. I did not neglect Kiwi and Nibbles during this time, either, but their progress was a bit less important.
Once Lucky had evolved, I spent what little money I had on a couple of potions at the PokéMart. Although they were expensive, I would not let another Pokémon fall in the Pewter City Gym. I absolutely would not. My nerves were shot as I stepped into the gym for the second time. I remember I was sweating and shaking just thinking about facing Brock. I saw the Junior Trainer who had bested my poor Rascal. He gave me an approving nod, but it did little to improve my disposition. Brock stood at the far end of the gym and beckoned me forward. He had seen my fight with the Junior Trainer several days ago and was eager to face me.
I clenched my jaw tightly as I threw out my first Pokémon. Kiwi met Brock's Geodude face-to-face in the gym's arena. We wasted no time kicking up as much dust as possible to obscure Geodude's vision. Brock had Geodude spend most of its time curling up into a defensive ball, but every now and then it lashed out with a tackle that it simply couldn't land on Kiwi. When I felt it's accuracy was sufficiently incapacitated, I withdrew Kiwi and used Nibble to wear down the Geodude slowly but surely. The Geodude was powerless in the dust Kiwi's sand-attack had kicked up and against Nibbles relentless tackling.
Then Brock threw out his champion, the Onix. I tossed Kiwi back into the ring hoping to repeat our earlier performance on Geodude. Kiwi kicked up as much sand as he could, but Onix still managed to land a lucky strike on him. It hurt Kiwi enough to discourage me from keeping Kiwi on the field any longer. Nibbles was sent out while Onix merely bided his time. I knew immediately that any attacks on Onix while in this defensive state would be unleashed twofold onto its attacker. Your only choices are to crush it swiftly, which is difficult against a rock hard Pokémon like Onix, or to wait it out.Nibbles began to stare down his opponent while it remained in its defensive posture. Slowly this would lower the Onix's defenses and leave it vulnerable to a massive strike. Eventually, Nibbles was exchanged for Lucky who covered the Onix in its string shot while it continued to wait for our attacks. Feeling safer, Kiwi returned to the battle to continue whipping up sand into Onix's face. Then as soon as Onix released its defensive posturing, Kiwi slammed it with a gust from his wings and knocked the Onix to the floor.
That was how I won my first badge in the great region of Kanto.
Brock was impressed and clasped me firmly on the back with a great slap of his hand. He knew about Rascal, of course, and was pleased at my stance on training. He liked how patient and defensive I was and as a reward not only gave me a handsome sum of PokéDollars, but a Technical Machine that would teach certain eligible Pokémon his Onix's signature technique of biding time and waiting for the counter strike. This strategy didn't really work out well for Brock that day, so I wasn't sure how I would incorporate it on to a team that I intended to take as few hits as possible. I didn't want to be rude, though, so I graciously accepted the TM #34 and the Boulder Badge.
I was now officially on the road to challenge the Indigo Plateau League. I really hadn't come to Kanto expecting to do something quite that dramatic, but I was slowly being pushed in that direction. Professor Oak had prompted me to take this journey and running into Wolf made me question what the journey really meant to me personally. The encounter with the snarky trainer in Viridian City helped me shape my personal goals and encouraged me to challenge the gyms to seek reputation and understanding in the world of Pokémon training. Now, I had my first badge pinned proudly to my backpack and I was on my way to the next adventure — with considerably more money to spend thanks to my winnings.
Current Team:
Attacks in Blue are recently learned.
CX 2692, Moon Patrol!
Moon Patrol on Random Terrain
Moon Patrol on KLOV
Moon Patrol on Atari Protos
The Zorfon Mystery by Rob Wanenchak
Mark Ackerman's web site
Atari Age Moon Patrol title screen glitch
Get Matt's Repro Freeway patch on eBay
Selasa, 24 Maret 2020
Sabtu, 21 Maret 2020
Dona Nobis Pacem And Final Fantasy X
Jumat, 20 Maret 2020
X-Wing: Second Edition Is On The Way!
![]() |
| Feeling fresh. |
Oh man, I'm excited. I haven't played X-Wing in a while because the competitive meta was just so stagnant with all the health regen, turrets,and bombs. Now that they rebooted the entire game, I'm really pumped to get back into it.
The official announcement is here:
https://www.fantasyflightgames.com/en/news/2018/5/1/x-wing-second-edition/
There's a thread on the FFG forums that has all the consolidated info:
https://community.fantasyflightgames.com/topic/274813-consolidated-x-wing-20-changes-thread/
Here's a quick run-down of what changed and what didn't..
These things have not changed in 2.0:
- Models carry over (some models may be re-released with new sculpts/paint/features)
- Dice are the same
- Range ruler is the same
- Range bonuses and obstructions work the same (except turrets)
- Templates are the same size -- but have a line down the center for alignment on nubless bases
- Basic game flow (but phases are renamed; some new phases)
- Maneuver driven by hidden dials plus actions
- Actions include: Focus, Target lock, evade, boost, barrel roll, cloak, reinforce, jam, coordinate, rotate arc (specific action mechanics may change)
- Upgrade slots: EPT, modification, title, torpedo, astromech, bombs, missiles, crew, system, turret
- Some upgrades will still take two slots
- Tokens (some art changes, shape): focus, evade, target lock, cloak, stress, tractor beam, jam, shield, ion
- Conditions are still a thing (Director Krennic)
- Setup Phase is largely the same
These things have changed in 2.0:
- New phases/phase names ("Strategy Phase")
- Medium ship bases (confirmed: U-wing, ARC-170, K-wing, G1A, Kimogila, Scurrg, Firespray, TIE Punisher, TIE Reaper, TBD)
- The new templates have a centerline that aligns to hash marks on the base and assists with bumping.
- Green maneuvers become blue
- Red actions which gain a stress after taking
- Push the Limit is gone; some ships may "link" a first action into a second and gain a stress (example: focus into target lock linked action)
- New tokens: Force, charge
- Force tokens which power force abilities for some pilots; they may also be used to change one Focus result
- Charge/surge tokens which power some pilot abilities and ordnance
- Token shape now indicates when removed: "End of Round" tokens are round; square tokens have other triggers to remove (e.g. ion, stress)
- Evade tokens to not add evade results; they just change green dice to evades.
- No costs on pilot cards or upgrades; these are in the squad builder app. Baseline is now 200 points.
- Each ship base has a bullseye arc and quadrants marked
- Turrets adopt mobile arc mechanics
- Turrets also get ranged bonuses and penalties, Ordnance does not.
- New upgrade cards are full sized, landscape
- New upgrade slots: Force Abilities ("Instinctive Aim"), Configuration ("S-foils")
- Resistance and First Order will now be separate factions
- Firespray-31 is no longer Imperial; Scum only
- New pilots
- No upgrade bar; either use ship build cards from the core set or the squad builder app
- Pilot skill is now called Initiative and goes from 1 to 6 [Wedge Antilles: 6]; no Veteran's Instincts or ability to change
- Damage deck - new. Repairing damage is now a thing. New cards ("Fuel Leak", "Panicked Pilot", "Wounded Pilot"); only 5 Direct Hits in the deck now.
- Regen exists, but is powered by charge tokens and nets a weapons disabled (R2 astromech)
- Decimator gets Reinforce and a red Coordinate
- Some ships have built-in abilities: Phantom (Stygium); TIE Advanced (Advanced Targeting Computer)
- Ordnance appears not to spend target locks (e.g. Proton torps);
- Ion tokens: 1 for small ship, 2 for medium ship, 3 for large ship
- Bombs can blow up obstacles (and do damage in the process)
- New abilities will affect the Setup Phase
- They will introduce new obstacle types
- Shield levels have been reduced on many ships
- Barrel roll is not adjustable; they use the hash marks on the bases for alignment.Barrel Roll now only has 3 positions per side (6 total) – makes Barrel Roll more inline with Boost as you only have 6 total positions.If you declare and action and you can't do it (ie Barrel Roll would land you on a rock), you just lose the action now
- There is a "range 0" for own ship abilities.
- Target Lock is now just Lock – and you can Lock on to objects as well as ships (friendly and enemy).
- Certain ships have different attack values for different arcs now.
Took inventory last night. Looks like I'm going to have to do some massive trading when the game comes out.
Rebels:
3 A-Wing (2 Aces)
4 B-Wing (2 Aces)
4 T-65 X-Wing (Core)
2 Z-Wing
1 HWK-290
1 Y-Wing
1 E-Wing
1 K-Wing
1 YT-1300 (Heroes)
1 YT-1300
1 YT-2400
1 Sabine's TIE Fighter
Imps:
3 TIE Interceptors
2 TIE Advanced
1 TIE Phantom
7 TIE Fighters (Core)
4 TIE Interceptors (Royal Guard)
4 TIE Interceptors (181st)
3 TIE Defender (Veterans)
3 TIE Bomber (Veterans)
1 TIE Advanced (Raider)
1 TIE Advanced Proto
1 TIE Aggressor
1 VT-49 Decimator
1 Lambda Shuttle
Scum:
2 BroBots
1 Slave I
1 H-6 Bomber
Resistance:
4 T-70 X-Wing (Core)
1 T-70 X-Wing (Heroes)
First Order:
7 TIE F/O (Core)
1 TIE Silencer
Proper Analog Retro Video Capture With The Datapath E1/E1s
Read more »
Selasa, 17 Maret 2020
The Shiny Trashcan Effect
We are half way through paying off our construction debt for our expansion project started in 2014. Do you remember 2014? Fantasy Flight Games was still an independent company, Magic was going strong and the big news story was the outbreak of Ebola. Good times. Our Kickstarter did fund successfully that year. We did complete the project, albeit two years late. We did send out all the rewards, and one refund to that jackass who likes to leave me (hidden) blog comments. That saga is a whole other story (it's in the book).
Customers occasionally come in, tell us how they're great supporters of ours, how they buy all their games from us and ... holy hell, you built a second floor!!! Yes, thank you, thank you. Mmm hmmm. I stopped mentioning it was years ago. Snark is not appreciated and we need all the customers we can get. Got debt to pay down.
So how are we doing? It's a bit of a struggle making loan payments and trying to grow during a period of industry transition. There are projects I would like to do. There's a white board in my office with $20,000 worth of stuff. Yet, we just improved the store in our bid to obtain Wizards of the Coast "premium" status, and we somehow came up with the thousands to do that.
Yes, thousands of dollars for a nebulous status. However, this is exactly what I had been asking for. Recognition of hard work and capital spent to improve a venue rather than shoeboxes of cardboard (even though the cardboard is more in line with success with the WOTC model). How could I not pursue this? When motivated, we can make things happen. In the future we shall refer to this as the Shiny Trashcan Effect.
Our sales necessary for growth, the needed engine to pay off our debt, have exceeded expectations. We saw a large jump when the space was complete, but it was a one time thing (about three times bigger than projected). We immediately went back to the grind. It brought home the fact that the space is really important to a small subset of customers (20%). That money spent on doubling inventory would have seen growth over years, but probably slower growth, rather than all at once. There's also the question of whether doing nothing at all would have led to the same growth rate, considering we struggled to focus the business in the Kickstarter and construction year. No, no, this will have longer term benefits, if we can leverage them.
Anyway, we're up 25% this year, due to a number of factors, so I'll continue to fantasize about that white board and work on projects that don't require intensive capital. And maybe we'll hit Premium status with WOTC and see some benefit there.
Senin, 16 Maret 2020
GameFly Experience (Monday Musings 77)
I returned Sekiro and by the next day, GameFly already shipped out a new game! I'm very happy thus far with my GameFly experience.
I decided to take advantage of GameFly's free month trial, and place Sekiro at the top of the list. Given that Sekiro was recently released, and GameFly noting that there's "low availability", I was surprised to see the game shipped out the day after I signed up for the trial! I signed up Monday, shipped Tuesday, and received Friday.
Given the popularity of Sekiro, I thought I had to wait a couple of weeks, at least, to receive the game, so I was pleasantly surprised to see "shipped" when I checked the status the next day. However, I'm not sure how quickly you can receive a game that has just been released that day. Would I have received Sekiro four days after its release date?
Looking through the list of GameFly games, I was impressed that they not only have the triple A titles, but also some niche ones including the Atelier series, that appear to come out yearly. I enjoyed Atelier Sophie, but not to the point where I want to buy future Atelier series at the $60 price point.
You can keep the game for as long as you want, and once you finish the game, upon receipt, they mail you the next game.
Games in my queue are newly released Days Gone, Dragon Quest XI (as I was considering buying the game), soon to be released A Plague Tale: Innocence, and Red Dead Redemption 2. I'm curious to see for myself if I'd enjoy RDR2, and GameFly gives me the opportunity to do so free, as opposed to having buy the game and not enjoying it.
As difficult as Sekiro is, even if it takes me 2 months to complete, the rental is nevertheless cheaper than buying the game full price. However, it does appear to be a game I'd like to buy on sale, once the Bundled edition comes out (From software always releases DLCs), so I can return Sekiro and hopefully get Days Gone (also "low availability").
Indeed, a strat that you can use, is to write down a list of all the game titles you're considering purchasing, sample these games, spending a few hours to see if this game is up your alley, and then return quickly to receive the next game. If a game appears to be a must own, then you can buy it without buyer's remorse.
If you're a slow gamer like me and you like to take months on a game, then GameFly may not be a good option, since it costs $15.95/month for one game out at a time, or $22.95/month for two games out at a time.
So far, I've had positive experience with GameFly, albeit it's only been 1 week's experience. If you have a GameFly membership, please feel free to describe your experiences with them.
The How Of Happiness Review
Jumat, 06 Maret 2020
Super Mario 64 (N64)



It only ruined little bits of them, only a few of the colours, but ideally you want your screenshots to be 0% ruined.
So I've got GOOD NEWS for you: mecha-neko wrote a thing and I did a thing and over Christmas we replaced something like 14,000 images over 1000 posts. So now the site is entirely fixed... or mostly broken, or somewhere in between. Why not click a few old posts and find out! I mean after reading this one.
| Developer: | Nintendo | | | Release Date: | 1997 (1996 in Japan + US) | | | Systems: | N64, DS, iQue Player |
This week on Super Adventures, it's Super Mario 64!
It's a game that needs no introduction, so instead I'll start off by talking about how much I hate 3D platformers. Actually I don't hate them, as long as they keep their distance and don't bother me, but they've never been my genre. I like 2D platformers, I like games where you wander around in 3D, but somehow when you combine the two I lose interest. Maybe it's because I don't like slipping off narrow platforms and misjudging depth.
Actually I will give the game a bit of an introduction, because I like trivia. Super Mario 64 was designed by pioneering Nintendo game genius Shigeru Miyamoto, who's been making Marios since the first Donkey Kong arcade cabinet. He'd already set the template for the 2D platformer genre with Super Mario Bros. so they were hoping he could pull off the same trick in 3D. And he did... though he took a few months longer than planned. Unfortunately Mario 64 was meant to be the big launch title that got people buying the Nintendo 64, so they had to delay the console for months as well. They probably made the right choice though, as the PlayStation and Saturn were well established even before the delay and the N64 needed to show off some actual magic to lure people over to a cartridge-based machine without videos, voices or CD music.
Personally I love the N64 and I've got a lot of nostalgia for it, but Mario 64 not so much. I've maybe played the game twice and the furthest I've gotten is the stone slab boss that falls on you. But some people seem to like it, and it's "acclaimed as one of the greatest video games of all time", so I'm going to give it another few hours to win me over.
Read on »
The Shiny Trashcan Effect
We are half way through paying off our construction debt for our expansion project started in 2014. Do you remember 2014? Fantasy Flight Games was still an independent company, Magic was going strong and the big news story was the outbreak of Ebola. Good times. Our Kickstarter did fund successfully that year. We did complete the project, albeit two years late. We did send out all the rewards, and one refund to that jackass who likes to leave me (hidden) blog comments. That saga is a whole other story (it's in the book).
Customers occasionally come in, tell us how they're great supporters of ours, how they buy all their games from us and ... holy hell, you built a second floor!!! Yes, thank you, thank you. Mmm hmmm. I stopped mentioning it was years ago. Snark is not appreciated and we need all the customers we can get. Got debt to pay down.
So how are we doing? It's a bit of a struggle making loan payments and trying to grow during a period of industry transition. There are projects I would like to do. There's a white board in my office with $20,000 worth of stuff. Yet, we just improved the store in our bid to obtain Wizards of the Coast "premium" status, and we somehow came up with the thousands to do that.
Yes, thousands of dollars for a nebulous status. However, this is exactly what I had been asking for. Recognition of hard work and capital spent to improve a venue rather than shoeboxes of cardboard (even though the cardboard is more in line with success with the WOTC model). How could I not pursue this? When motivated, we can make things happen. In the future we shall refer to this as the Shiny Trashcan Effect.
Our sales necessary for growth, the needed engine to pay off our debt, have exceeded expectations. We saw a large jump when the space was complete, but it was a one time thing (about three times bigger than projected). We immediately went back to the grind. It brought home the fact that the space is really important to a small subset of customers (20%). That money spent on doubling inventory would have seen growth over years, but probably slower growth, rather than all at once. There's also the question of whether doing nothing at all would have led to the same growth rate, considering we struggled to focus the business in the Kickstarter and construction year. No, no, this will have longer term benefits, if we can leverage them.
Anyway, we're up 25% this year, due to a number of factors, so I'll continue to fantasize about that white board and work on projects that don't require intensive capital. And maybe we'll hit Premium status with WOTC and see some benefit there.
Verb-noun Vs Noun-Verb
I went to the Roguelike Celebration over the weekend and enjoyed Thomas Biskup's talk about Ultimate ADOM. Among the many interface improvements they're making based on user testing is they're simplifying the controls from the traditional roguelike controls to W A S D + E F. I don't know how roguelike game players will respond to that but I'm a fan! This reminded me of two things from my past, so I thought I'd say a little about those.
Sometime in my teens I got to meet Lord British (Richard Garriott) and Iolo the Bard (David Watson). My mom was shopping, and I went to the computer aisle to browse the games I couldn't afford. Richard and Iolo were talking about Ultima 6. Nobody else was there, so I got to talk to them for half an hour! I learned about OOP, UI, testing, systems thinking, and more. Really cool!
They told me about how they coded puzzles to look for the state of the world (nouns) instead of the player actions (verbs). For example, there was a puzzle where they expected players to cast Telekinesis (ᚩᚣᛕ ORT POR YLEM) on a lever on the other side of a chasm. Instead, during playtesting, they saw that one player killed a party member, tossed the body over the chasm, cast Resurrect (ᛁᛗᚳ IN MANI CORP), then have the party member pull the lever.
Wow! That wasn't something I had ever thought of in the simple games I had written at that age.
Another thing they told me about was the simpler control scheme. Previous Ultimas had a control scheme similar to what roguelike games have. W to wear armor, I to ignite a torch, K to klimb a ladder, D to descend a ladder, B to board a ship, etc. You specify the verb such as J to jimmy a lock and then after that you can choose a noun such as the lock to jimmy.
In Ultima 6 they reversed the order so that the noun came first and then the verb. This meant the game could tell whether you were trying to J jimmy a lock or B board a ship or K klimb a ladder because the game knew that it was a lock or a ship or a ladder. And that meant they didn't need separate keys for these verbs, but instead one key, U use object. There are times when they had multiple verbs for a noun but for the most part they could get away with just one.
I haven't closely followed Ultimate ADOM but I'm guessing they're doing something similar.
The noun-verb thing comes up in another context. After I stopped making games for a living I went into programming language research. My main topic was studying how functional programming languages and object-oriented programming languages can be combined. Something I noticed at the time was that the syntax for functional languages tends to be verb then noun: f(x), whereas the syntax for object oriented languages tends to be noun then verb: x.f(). At some level these can be considered equivalent. You can express with one what you can express with the other. There's a big difference in usability though: auto-complete.
What happens when we auto-complete f(x)? First we need to know all possible f that are valid in this context. Since the programmer has just started typing in the expression, any function is valid, and that means there's a very long list to choose from. It takes many keystrokes to pick one. Second we need to know all possible x that are valid in this context. These are usually local names, so there aren't that many. Knowing the type of f narrows down the list but the list was already small, so there's not much to gain.
What happens when we auto-complete x.f()? First we need to know all possible x. The programmer has just started typing, so any local name is valid, but there aren't many. Typing just one character can narrow down the list to one or two elements. Second we need to know all possible f that are valid in this context. These are methods defined on the type of x, so there aren't that many compared to all possible functions. Knowing the type of x narrows down the list substantially, so there's a lot gained.
The two syntaxes seem equivalent in theory but they aren't in practice. I wonder if people who use regular text editors end up believing the two syntaxes are equivalent, whereas people who use IDEs prefer the object-oriented syntax, even if they're not taking advantage of object-oriented programming (inheritance, subtyping, etc.).
This asymmetry is orthogonal to whether you're using functional or object-oriented programming. It is better for programmers if they can choose from two medium length lists than to have to choose from a very long list (where a lot has to be typed before it's useful) and then a very short list (where not much is gained). You see this in other contexts too. Command line interfaces like DOS, VMS, and Unix shell typically specify a verb first and then the noun(s). GUIs such as Mac and Windows typically specify a noun first by clicking an icon, and then the verb by choosing from the right click menu. In text editors, vim's commands like d0 are verb then text selection (noun), whereas in more conventional text editors (including Emacs) you'd first select some text (the noun) and then invoke a verb like delete. Kakoune is a modal editor that uses noun-verb instead of verb-noun.
In games it seems like it'd be better for players to first choose an object from the environment and then choose from a small set of actions, than to first choose from a large set of actions and then choose from a set of objects. However I haven't surveyed enough games to see what's more common. The next time you're playing a game, look at the structure of commands to see if it's verb-noun or noun-verb.
Kamis, 05 Maret 2020
Tech Book Face Off: Python For Data Analysis Vs. Python Data Science Handbook
![]() | VS. | ![]() |
Python for Data Analysis
This book covers all of the fundamentals of doing data analysis with Python using IPython, Jupyter Notebooks, Matplotlib graphing, and the main data analysis packages: NumPy and Pandas. It stops short of going into the other major data analysis and machine learning library, Scikit-Learn, because it had already filled over 500 pages with the intricate details of NumPy and Pandas. Wes McKinney is the original author of the Pandas library, so we're getting all of those details straight from the source.The book starts out with the perfunctory chapters on installing Python and other packages, how to use IPython and Jupyter Notebooks, and running through the basic Python language features. It's filler chapters like these in nearly every programming book out there that makes me think that I no longer need to read introductory books on new languages. I can just go directly into books on applications of any given language, confident that they'll introduce me to the syntax and features I need to know anyway. It's not wrong, exactly, but the result is an awful lot of books with the same extra introductory material filling up pages that will mostly go unread.
Then there's a big chapter on using NumPy before moving on to Pandas for the rest of the book, with a chapter on the Matplotlib graphing library thrown in somewhere in the middle. The main focus is on Pandas, which is a huge library with tons of invaluable features for messing around with data. The book covers everything from reading and writing data, data cleaning, combining and merging data in various ways, doing complex calculations on the data with aggregation and groupby operations, and working with time series and categorical data.
The number and types of operations you can do on a data set with Pandas is pretty incredible, and that makes Pandas an excellent library to learn to use well. As McKinney says in the book,
During the course of doing data analysis and modeling, a significant amount of time is spent on data preparation: loading, cleaning, transforming, and rearranging. Such tasks are often reported to take up 80% or more of an analyst's time.With all of that time spent on low-level data tasks, Pandas makes the life of a data scientist so much easier and more enjoyable. Data can be cleaned and transformed much more easily and reliably, and you can get down to making inferences about the data quickly.
Beyond covering all of the ins and outs of Pandas, McKinney sprinkles in a few good tips on other tools that can speed up your data analysis tasks. For instance,
If you work with large quantities of data locally, I would encourage you to explore PyTables and h5py to see how they can suit your needs. Since many data analysis problems are I/O-bound (rather than CPU-bound), using a tool like HDF5 can massively accelerate your applications.
Other than these scattered tips, the book is actually fairly dry and uninspiring. It reads a lot like the (excellent) online documentation for Pandas, but doesn't add too much more than that. Even most of the examples for different features are just drab randomly generated numbers with boring labels. You could just as easily read the online docs and get all of the same material. It may be a little nicer to have it all in book form so that you can sit down and focus on it, but that's a slight advantage. I was hoping for something more, that secret sauce that you sometimes find in books on software libraries, to make the book a greater value than just reading the online docs.
Python Data Science Handbook
The Python Data Science Handbook covers most of what Python for Data Analysis does with somewhat less depth, but then goes much further into using Scikit-Learn to analyze data sets with machine learning techniques. The book is split into five large chapters, only the first of which delves into introductory minutiae by introducing the IPython interpreter. Thankfully, the book assumes you know Python already and doesn't bore the reader with another summary of lists, dicts, and comprehensions.
The next few chapters cover the use of NumPy, Pandas, and Matplotlib, and while the Pandas material is somewhat reduced from Python for Data Analysis, the Matplotlib material actually gets into the cartography drawing capabilities of this library. So, there are trade-offs in the number of topics covered in this book, as I would say the author gives more breadth while sacrificing some depth. The last chapter explores a good amount of Scikit-Learn with explanations and discussions of ten different machine learning models. This chapter added significantly to the book, grounding the features explored in the previous chapters with machine learning applications on real data sets of hand-written digits, bicycle traffic, and facial recognition. Seeing how different models performed better or worse in different applications was fascinating and enlightening.
The writing style of Jake VanderPlas was much more engaging as well. While reading the book, I felt like I was being guided by a mentor who wanted to make sure I understood the reasons behind different decisions, and why things should be done a certain way. While Python for Data Analysis focused on the "what" and "how" of programming with Pandas, the Python Data Science Handbook really addressed the "why" of data science programming, from explaining some of the reasons behind little decisions:
One guiding principle of Python code is that "explicit is better than implicit." The explicit nature of loc and iloc make them very useful in maintaining clean and readable code; especially in the case of integer indexes, I recommend using these both to make code easier to read and understand, and to prevent subtle bugs due to the mixed indexing/slicing convention.To carefully describing the big issues with training machine learning models:
The general behavior we would expect from a learning curve is this: A model of a given complexity will overfit a small dataset: this means the training score will be relatively high, while the validation score will be relatively low. A model of a given complexity will underfit a large dataset: this means that the training score will decrease, but the validation score will increase. A model will never, except by chance, give a better score to the validation set than the training set: this means the curves should keep getting closer together but never cross.This conversationally instructive style was quite comfortable, and made the whole book an enjoyable read, even though the material was understandably complicated with a lot of different features and concerns to think about. VanderPlas helped it all go down easily. It was a lot to take in, but it was never overwhelming. He also had plenty of words of encouragement, knowing that when real problems with data arise, it could get discouraging:
Real-world datasets are noisy and heterogeneous, may have missing features, and may include data in a form that is difficult to map to a clean [n_samples, n_features] matrix. Before applying any of the methods discussed here, you must first extract these features from your data; there is no formula for how to do this that applies across all domains, and thus this is where you as a data scientist must exercise your own intuition and expertise.It's easy to tell that I much preferred this book over Python for Data Analysis, and I would recommend anyone looking into data science and machine learning take a look at the Python Data Science Handbook. It's a great overview of the subject, and you'll be able to get up and running with Python quickly, experimenting with some real applications of machine learning, and learning some of the critical issues of feature engineering and model validation.
Only the Beginning
These two books, Python for Data Analysis and Python Data Science Handbook, clearly only scratch the surface of machine learning. They teach you how to use the main Python libraries for data analysis and machine learning, but they don't go much further than that. There's a ton more stuff to learn about how to do machine learning well and what goes on under the hood in all of these various models. I've got my eye on more machine learning books like Python Machine Learning by Sebastian Raschka, Hands-On Machine Learning with Scikit-Learn and TensorFlow by Aurélien Géron, and The Elements of Statistical Learning by Trevor Hastie, et al, among many others. There's a vast amount of literature out there now on machine learning, covering everything from practical applications to the theoretical underpinnings of the models. Suffice it to say, this is only the beginning of the exploration.













